使用反射獲取字節碼文件中的方法
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 } }
最後更新:2017-04-03 12:55:33