91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

泌阳县| 自贡市| 扶余县| 广德县| 新晃| 淮北市| 平阳县| 察隅县| 蓝田县| 松原市| 林州市| 永丰县| 哈巴河县| 信宜市| 盐城市| 和硕县| 安阳县| 开阳县| 永康市| 合阳县| 若羌县| 沧州市| 漳浦县| 平顶山市| 曲水县| 苗栗县| 阳泉市| 商都县| 土默特右旗| 思茅市| 澄江县| 南丰县| 镇沅| 正蓝旗| 靖江市| 方正县| 清河县| 永新县| 万年县| 辽阳县| 汶川县|