欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳解Java中的反射api

 更新時間:2025年02月05日 09:01:04   作者:會說法語的豬  
這篇文章主要為大家詳細(xì)介紹了Java中的6個反射api,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1. 調(diào)用無參數(shù)構(gòu)造器得到一個類的對象返回

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class對象
    Class c = Person.class;
    // 定位無參構(gòu)造器對象
    Constructor constructor = c.getDeclaredConstructor();
    // 暴力打開私有構(gòu)造器的訪問權(quán)限(如果是私有構(gòu)造器、private 就可以使用setAccessible暴力打開)
    constructor.setAccessible(true);
    // 通過無參數(shù)構(gòu)造器初始化對象返回
    Person person = (Person) constructor.newInstance();
    System.out.println(person);
}

2. 調(diào)用有參數(shù)構(gòu)造器得到一個類的對象返回

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class對象
    Class c = Person.class;
    // 定位無參構(gòu)造器對象
    Constructor constructor = c.getDeclaredConstructor(String.class, Integer.class, String.class);
    // 暴力打開私有構(gòu)造器的訪問權(quán)限(如果是私有構(gòu)造器、private 就可以使用setAccessible暴力打開)
    // constructor.setAccessible(true);
    // 通過無參數(shù)構(gòu)造器初始化對象返回
    Person person = (Person) constructor.newInstance("WFT", 18, "1.88");
    System.out.println(person);
}

3. 獲取全部的成員變量

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class對象
    Class c = Person.class;
    // 獲取全部聲明的成員變量對象
    Field[] fields = c.getDeclaredFields();
    for (Field field : fields) {
        System.out.println(field.getName() + "-->>" + field.getType());
    }
}

4. 獲取某個成員變量 并為其賦值

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class對象
    Class c = Person.class;
    // 獲取全部聲明的成員變量對象
    Field nameField = c.getDeclaredField("name");
    System.out.println(nameField.getName() + "--->>" + nameField.getType());
    Person person = new Person();
    nameField.setAccessible(true); // 因?yàn)槭撬接袑傩?采用暴力反射!
    /**
     * 參數(shù)1:被賦值的對象
     * 參數(shù)2:該成員變量的值
     */
    nameField.set(person, "王大錘");
    System.out.println(person);
    /**
     * 獲取改成員變量的值
     */
    String name = nameField.get(person) + "";
    System.out.println(name);
}

5. 獲取所有的methods方法

public static void main(String[] args) {
    // 反射第一步先得到Class對象
    Class c = Person.class;
    // 獲取所有的方法
    Method[] methods = c.getDeclaredMethods();
    // 遍歷看一下
    for (Method method : methods) {
        // 方法名稱 參數(shù)個數(shù) 返回值類型
        System.out.println(method.getName() + "->" + method.getParameterCount() + "->" + method.getReturnType());
    }
}

6.  獲取某個methods方法并執(zhí)行

public static void main(String[] args) throws Exception {
    // 反射第一步先得到Class對象
    Class c = Person.class;
    // 獲取setName方法
    Method setName = c.getDeclaredMethod("setName", String.class);
    // 調(diào)用方法
    Person person = new Person();
    Object o = setName.invoke(person, "WFT"); // 如果方法沒有返回值  返回值為null
    System.out.println(o);
    System.out.println(person);
}

到此這篇關(guān)于一文詳解Java中的反射api的文章就介紹到這了,更多相關(guān)Java反射api內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論