《黑馬程式設計師》 使用反射獲取位元組碼檔案中的方法
阿新 • • 發佈:2019-01-28
public class ReflectMethod { /** * 方法的反射 * @param args */ public static void main(String[] args) throws Exception { String str1="www.baidu.com"; System.out.println(str1.charAt(2)); //我們平時的時候是使用str1.charAt()去呼叫的方法,然後獲取到第二個字元 /** * String str1="aaa"; * String str2="aaaa"; * str1.charAt(); * str2.charAt(); * 我們只是使用某個物件來呼叫某個方法 * 方法和物件是沒有關係的 * * 呼叫方法,我們必須通過某個物件去呼叫.我們得到了某個方法, * 方法和物件是沒有關係的。我們要想呼叫某個物件身上的方法, * 就先得到這個方法,然後針對某個物件,呼叫這個方法 */ //引數需要帶要獲取的方法的名稱 Method methodCharAt=String.class.getMethod("charAt", int.class); //將方法作用在某個物件身上 System.out.println("值為:"+methodCharAt.invoke(str1, 1)); //我們來對這個方法的引數進行改寫: //因為jdk1.4之前沒有可變引數,它是通過陣列來實現的 // new int[]{1,23,44,55}; // new String[]{"abc","def","kkk","qq"}; // new String[]{new Sring("abd"),new String("def"),new String("kkk"),new String("123")}; // new Object[]{new Sring("abd"),new String("def"),new String("kkk"),new String("123")}; // new Object[]{new Sring("abd"),1,new String("kkk"),new String("123")}; //本來1是不行的。但是jdk1.5之後有自動裝箱的功能。 //所有的型別都是Object的子類 //所以這樣就可以了 System.out.println(methodCharAt.invoke(str1, new Object[]{5})); // new Object[]{} 這裡是代表一個引數都沒有 所有的類都是object的子類 //new Object[]{2} 這裡就是表示有一個 //new Object[]{2} 這裡就是new一個object的陣列,{數組裡面的元素列表},2就說明它是object的 // 整數型別的object,把它給放到object陣列中去了,放的是Integer型別。自動裝箱了。這個時候,這個 // 陣列的長度為1,裝了一個integer型別的物件.這個integer的值是2 } }