使用反射獲取字節碼文件中的方法
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