反射(一)動態加載類
阿新 • • 發佈:2017-09-15
bject 調用方法 創建 new copyright 運行 加載 str []
反射是什麽?當我們的程序在運行時,需要動態的加載一些類這些類可能之前用不到所以不用加載到jvm,而是在運行時根據需要才加載,這樣的好處對於服務器來說不言而喻,比如我們的項目底層有時是用mysql,有時用oracle,需要動態地根據實際情況加載驅動類,通過類的全類名讓jvm在服務器中找到並加載這個類,根據需求來改變傳入的參數。這時候就可以看到反射的好處了。
通過反射加載一個類,創建對象和調用方法:
//根據類的包名+類名加載一個類
Class<?> c = Class.forName("com.bwf.test.User");
Object o = c.newInstance();//默認調用了該類的無參構造方法來創建了對象
//根據參數類型找到相應的構造方法, 通過構造方法創建對象
c.getConstructor( new Class[]{String.class}).newInstance(new Object[]{"zhangsan"});
//動態獲取類下面的屬性
Field[] fields = c.getDeclaredFields();
for(Field field : fields){
System.out.println(field.getName());
}
//獲取指定的方法
Method m = c.getDeclaredMethod("eat", new Class[]{String.class,int.class});
//調用指定的方法
Object result = m.invoke(o, new Object[]{"lisi",1});
反射(一)動態加載類