1. 程式人生 > >Java反射常用API匯總

Java反射常用API匯總

所有 void 通過 IE get eth AD const tor

“JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性”

一、類對象的獲取

1.通過對象獲取

Object obj = new Object();
obj.getClass();

2.通過類名獲取

Object.class;

3.通過類的路徑名獲取

Class.forName("com.metadata.Student");

二、類的實例化和構造函數

獲取到的class對象可以直接通過clazz.newInstance()方法實例化,但是需要目標類有默認無參構造函數,不然會拋出異常。

在類沒有默認無參構造函數,或者需要某個具體的構造函數來實例化的情況,需要通過Constructor類的newInstance()來完成。

1.獲取公有構造函數,不包括父類

//Class
public
Constructor<?>[] getConstructors() public Constructor<T> getConstructor(Class<?>... parameterTypes)

2.獲取當前類構造函數,忽略修飾符

//Class
public Constructor<?>[] getDeclaredConstructors()
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)

構造函數調用

//Constructor
public T newInstance(Object... initargs)
//忽略修飾符,強制調用
public void setAccessible(boolean flag)

三、類成員變量的獲取

1.獲取公有變量,包括父類

//Class
public Field[] getFields()
public Field getField(String name)

2.獲取當前類成員變量,忽略修飾符

//Class
public Field[] getDeclaredFields()
public Field getDeclaredField(String name)

成員變量賦值

//Field
//obj為實例對象
public void set(Object obj,Object value)

//忽略修飾符,強制調用
public void setAccessible(boolean flag)

四、類方法的獲取

1.獲取公有方法,包括父類

//Class
public Method[] getMethods()
public Method getMethod(String name,
                        Class<?>... parameterTypes)

2.獲取當前類方法,忽略修飾符

//Class
public Method[] getDeclaredMethods()
public Method getDeclaredMethod(String name,
                                Class<?>... parameterTypes)

方法調用

//Method
//obj為類實例化對象,如果為靜態方法obj為Null
invoke(Object obj, Object... args)

//忽略修飾符,強制調用
public void setAccessible(boolean flag)

Java反射常用API匯總