亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Java中利用反射創建對象

發布時間:2021-05-31 18:22:54 來源:億速云 閱讀:168 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關如何在Java中利用反射創建對象,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、什么是反射

Java Reflaction in Action中的解釋:反射是運行中的程序檢查自己和軟件運行環境的能力,它可以根據它發現的進行改變。通俗的講就是反射可以在運行時根據指定的類名獲得類的信息 個人理解:就是我們對于創建對象我們除了通過 new關鍵字創建外,還能通過什么創建呢?private的屬屬性真的不能獲取嗎?反射就能做到打破這些所謂的規則反射和new創建對象誰的效率高? new

二、通過類對象調用newInstance()方法,適用于無參構造方法

如何在Java中利用反射創建對象

2.1 類名.class

public class Main {
 
    public static void main(String[] args) throws IllegalAccessException, InstantiationException {
        Class<Person> clazz = Person.class;
        Person person = clazz.newInstance();
        System.out.println(person instanceof Person); // true
    }
}
 
class Person {
 
    private Integer age;
 
    private String name;
 
    public Person() {
    }
}

2.2 Class.forName

public class Main {
 
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        Class<?> clazz = Class.forName("com.best.test.Person");
        Person person = (Person) clazz.newInstance();
        System.out.println(person instanceof Person); // true
    }
}
 
class Person {
 
    private Integer age;
 
    private String name;
 
    public Person() {
    }
}

2.3 對象名.getClass

public class Main {
 
    public static void main(String[] args) throws IllegalAccessException, InstantiationException{
        Person person = new Person();
        Class<? extends Person> clazz = person.getClass();
        Person person1 = clazz.newInstance();
        System.out.println(person1 instanceof Person); // true
    }
}
 
class Person {
 
    private Integer age;
 
    private String name;
 
    public Person() {
    }
}

三、getConstructor()和getDeclaredConstructor()

通過類對象的getConstructor()或getDeclaredConstructor()方法獲得構造器(Constructor)對象并調用其newInstance()方法創建對象,適用于無參和有參構造方法。

如何在Java中利用反射創建對象

3.1 getConstructor()

public class Main {
 
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        Class<Person> clazz = Person.class;
        Constructor<Person> ctor = clazz.getConstructor(Integer.class, String.class);
        Person person = ctor.newInstance(26, "jak");
        System.out.println(person instanceof Person); // true
    }
}
 
class Person {
 
    private Integer age;
 
    private String name;
 
    public Person(Integer age, String name) {
        this.age = age;
        this.name = name;
    }
}

3.2 getDeclaredConstructor()

public class Main {
 
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        Class<Person> clazz = Person.class;
        Constructor<Person> ctor = clazz.getDeclaredConstructor(String.class);
        Person person = ctor.newInstance("jak");
        
        System.out.println(person instanceof Person); // true
    }
}
 
class Person {
 
    private Integer age;
 
    private String name;
 
    public Person(Integer age, String name) {
        this.age = age;
        this.name = name;
    }
 
    public Person(String name) {
        this.name = name;
    }
}

3.3 getConstructor()和getDeclaredConstructor()區別

getDeclaredConstructor(Class<?>... parameterTypes) 

這個方法會返回指定參數類型的所有構造器,包括public的和非public的,當然也包括private的。getDeclaredConstructors()的返回結果就沒有參數類型的過濾了。

再來看getConstructor(Class<?>... parameterTypes)

這個方法返回的是上面那個方法返回結果的子集,只返回指定參數類型訪問權限是public的構造器。getConstructors()的返回結果同樣也沒有參數類型的過濾。

以上就是如何在Java中利用反射創建對象,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

从江县| 托里县| 隆安县| 阿图什市| 桐城市| 林周县| 宁城县| 平乡县| 广宗县| 民丰县| 双牌县| 灵石县| 九龙城区| 老河口市| 六安市| 和平区| 南宁市| 莎车县| 舞钢市| 成安县| 平江县| 桐梓县| 兴隆县| 太和县| 临沂市| 彭山县| 陆良县| 轮台县| 阿克陶县| 阿图什市| 台北市| 崇礼县| 丰都县| 保康县| 沈丘县| 土默特右旗| 枝江市| 孝义市| 江门市| 赤城县| 建阳市|