中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何在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

武汉市| 古浪县| 东方市| 成安县| 南岸区| 阿克陶县| 安福县| 商南县| 曲沃县| 大名县| 凤山市| 临城县| 和硕县| 易门县| 长宁区| 大竹县| 乌兰浩特市| 茂名市| 库尔勒市| 淳安县| 冷水江市| 岗巴县| 肃宁县| 石狮市| 改则县| 同心县| 石景山区| 大厂| 谢通门县| 类乌齐县| 汕尾市| 襄樊市| 岱山县| 定兴县| 台中县| 黔江区| 金寨县| 山东| 马山县| 和平区| 林州市|