Java之反射學習【Class類對象功能】

  • 獲取成員變量們:

Field getField(String name)

返回一個 Field對象,它反映此表示的類或接口的指定公共成員字段 對象。

獲取指定的Class類對象中的成員變量  【public修飾】
Field[] getFields()

返回包含一個數組 Field對象反射由此表示的類或接口的所有可訪問的公共字段 對象。

獲取所有Class類對象中public修飾的所有成員變量【public修飾】
Field getDeclaredField(String name)

返回一個 Field對象,它反映此表示的類或接口的指定已聲明字段 對象。

獲取指定的Class類對象中的成員變量  【不考慮修飾符,但要做暴力反射處理】
Field[] getDeclaredFields()

返回的數組 Field對象反映此表示的類或接口聲明的所有字段 對象。

獲取指定的Class類對象中的所有成員變量  【不考慮修飾符,但要做暴力反射處理】

       獲取指定public修飾的成員變量

public static void main(String[] args) throws Exception {
        // 獲取Class類對象
        Class classPerson = Person.class;
        // 通過Class類對象 獲取成員變量
        Field field = classPerson.getField("address");
        // 實例化Person對象
        Person person = new Person();
        // 設置值
        field.set(person,"中國");
        String value =  (String) field.get(person);
        System.out.println(value);
    }

    獲取public修飾的Class對象的成員變量們。【其中Field.get()方法:獲取值,同樣也有Field.set()方法】

public class Test {
    public static void main(String[] args) throws Exception {
        // 獲取Class類對象
        Class classPerson = Person.class;
        // 通過Class類對象 獲取成員變量
        Field[] fields = classPerson.getFields();
        // 實例化一個Person對象
        Person person = new Person();
        // 遍歷Class對象的成員變量
        for (Field field : fields){
            System.out.println(field);
            // 獲取Class類對象的成員變量的值
            String value = (String) field.get(person);
            System.out.println(value);
        }
    }
}

以下這兩個方法可以獲取所有Class類對象的成員變量

【不考慮修飾符,包括私有成員變量,但是要忽略訪問修飾符的安全監測,即暴力反射處理】

// 暴力反射 
field.setAccessible(true);

  • 獲取構造方法們:

Constructor<T> getConstructor(<?>... parameterTypes)

返回一個 Constructor對象,該對象反映 Constructor對象表示的類的指定的公共 函數。

Constructor<?>[] getConstructors()

返回包含一個數組 Constructor對象反射由此表示的類的所有公共構造 對象。

Constructor<T> getDeclaredConstructor(<?>... parameterTypes)

返回一個 Constructor對象,該對象反映 Constructor對象表示的類或接口的指定 函數。

Constructor<?>[] getDeclaredConstructors()

返回一個反映 Constructor對象表示的類聲明的所有 Constructor對象的數組  。

  • getConstructor(<?>... parameterTypes)方法;【注:該方法的參數爲構造方法對應的參數】

    獲取Class類對象的構造方法;【注意:獲取的這個構造方法是一個對象】

public static void main(String[] args) throws Exception {
        // 獲取Class類對象
        Class personClass = Person.class;
        // 獲取Class對象的構造方法
        Constructor constructor = personClass.getConstructor(int.class,String.class);
        // 同過constructor實例化一個person對象
        Person person = (Person) constructor.newInstance(11,"張三");
        // 輸出person內容
        System.out.println(person.getId()+","+person.getName());
    }

【注:其他方法類似的都與上面介紹一致,自行理解一下】


  • 獲取成員方法們:

Method getMethod(String name, <?>... parameterTypes)

返回一個 方法對象,它反映此表示的類或接口的指定公共成員方法 對象。

Method[] getMethods()

返回包含一個數組 方法對象反射由此表示的類或接口的所有公共方法 對象,包括那些由類或接口和那些從超類和超接口繼承的聲明。

Method getDeclaredMethod(String name, <?>... parameterTypes)

返回一個 方法對象,它反映此表示的類或接口的指定聲明的方法 對象。

Method[] getDeclaredMethods()

返回包含一個數組 方法對象反射的類或接口的所有聲明的方法,通過此表示 對象,包括公共,保護,默認(包)訪問和私有方法,但不包括繼承的方法。

  • getMethod(String name, <?>... parameterTypes)  【注:參數列表:方法名,實際的參數類型】

     獲取Class類對象的成員方法  【注:成員方法爲一個對象】

無參方法代碼示例:

import java.lang.reflect.Method;

public class Test {
    public static void main(String[] args) throws Exception {
        // 獲取Class類對象
        Class personClass = Person.class;
        // 實例化一個Person對象
        Person person = new Person();
        // 獲取Class對象的成員方法對象
        Method method = personClass.getMethod("Eat");
        // 執行方法
        method.invoke(person);
    }
}

有參方法代碼示例:

public class Test {
    public static void main(String[] args) throws Exception {
        // 獲取Class類對象
        Class personClass = Person.class;
        // 實例化一個Person對象
        Person person = new Person();
        // 獲取Class對象的成員方法對象
        Method method = personClass.getMethod("Eat",String.class);
        // 執行方法
        method.invoke(person,"宮爆雞丁");
    }
}

  • 獲取類名:

     String getName()

返回由 對象表示的實體(類,接口,數組類,原始類型或空白)的名稱,作爲 String 。

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章