反射的概述
java反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能成爲java語言的反射機制。
java反射機制的作用
是用來編寫一些通用性較高的代碼或者框架的時候使用
Class類
java中java.lang.Class類用於表示一個類的字節碼(.class)文件
如何得到某個class文件對應的Class對象
已知類和對象的情況下
- 類名.class
- 對象.getClass()-----Object類提供
未知類和對象的情況下
- Class.forName("包名.類名")
Constructor類
Constructor類的實例對象代表類的一個構造方法
得到某個類所有的構造方法
Constructor [] constructors = Class.forName("java.lang.String").getConstructors();
得到指定的構造方法並調用
Constructor constructor = Class.forName("java.lang.String").getConstructor(String.class);
String str = (String)constructor.newIanstance("abc");
Class類的newInstance()方法來調用類的默認構造方法
String obj = (String)Class.forName("java.lang.String").newInstance();
Field類
- Field類代表某個類中的一個成員變量,並提供動態的訪問權限
- Field對象的獲得
- 得到所有的成員變量
Field[] fields = c.getFields();//取得所有public屬性(包括父類繼承)
Field[] fields = c.getDeclaredFields();//取得所有聲明的屬性
得到指定的成員變量
Field name=c.getField("name");
Field name= c.getDeclaredField("name");
設置變量是否可以訪問
- field.setAccessible(boolean);
Field變量值的讀取,設置
- field.get(obj);
- field.set(obj,value);
Method類
Method類代表某個類中的一個成員方法
method對象的獲得
獲得所有方法
- getDeclaredMethods()
- getMethods()
獲得指定的方法
- getDeclaredMethod(String name,Class<?>...parameterTypes)
- getMethod(String name,Class<?>...parametrTypes)
通過反射執行方法
- invoke(Object obj,Object...args)