反射就是程序在運行時能夠獲取自身的信息,在java中,只要給定類的名字, 就可以通過反射機制來獲得類的所有信息。
反射可以實現動態創建對象和編譯,體現出很大的靈活性,通過反射,類中有什么信息,它就可以獲得什么信息。
- 獲取完整的包名,類名:
public class test {
public static void main(String[] args) throws Exception {
test t = new test();
t.getClass().getName();
}
}
- 創建對象:
Class<?> clazz =Class.forName("XXX");
//創建此Class 對象所表示的類的一個新實例
Object obj = clazz.newInstance();
- 獲取所有屬性:
Class<?> clazz = Class.forName("XXX");
//獲取所有的屬性
Field[] fs = clazz.getDeclaredFields();
//獲取屬性為XXX的屬性
Field idF = c.getDeclaredField("XXX");
- 獲取所有方法:
Class<?> clazz = Class.forName("XXX");
Method method[] = clazz.getMethods();
- 調用某個類的方法:
Class<?> clazz = Class.forName("XXX");
Object obj = clazz.newInstance();
// 獲取XXX類中的method1方法
Method method2 = clazz.getMethod("method1");
//調用obj(clazz.newInstance())類中method1方法
Method1.invoke(obj);
//如果這個類的方法method2需要傳遞參數
Method method2 = clazz.getMethod("method2", int A, String B);
method2.invoke(obj, paramter1, paramter2…);
- 操作某個類的屬性:
Class<?> clazz = Class.forName("XXX");
//對AAA屬性賦值
Field field = clazz.getDeclaredField("AAA");
field.setXXX(BBB);