最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java反射創(chuàng)建對(duì)象

 更新時(shí)間:2021年05月31日 16:27:00   作者:星夜孤帆  
今天帶大家學(xué)習(xí)Java的基礎(chǔ)知識(shí),文中對(duì)Java反射創(chuàng)建對(duì)象作了非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)Java的小伙伴們很有幫助,需要的朋友可以參考下

一、什么是反射

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

二、通過(guò)類對(duì)象調(diào)用newInstance()方法,適用于無(wú)參構(gòu)造方法

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 對(duì)象名.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()

通過(guò)類對(duì)象的getConstructor()或getDeclaredConstructor()方法獲得構(gòu)造器(Constructor)對(duì)象并調(diào)用其newInstance()方法創(chuàng)建對(duì)象,適用于無(wú)參和有參構(gòu)造方法。

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()區(qū)別

getDeclaredConstructor(Class<?>... parameterTypes) 

這個(gè)方法會(huì)返回指定參數(shù)類型的所有構(gòu)造器,包括public的和非public的,當(dāng)然也包括private的。getDeclaredConstructors()的返回結(jié)果就沒(méi)有參數(shù)類型的過(guò)濾了。

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

這個(gè)方法返回的是上面那個(gè)方法返回結(jié)果的子集,只返回指定參數(shù)類型訪問(wèn)權(quán)限是public的構(gòu)造器。getConstructors()的返回結(jié)果同樣也沒(méi)有參數(shù)類型的過(guò)濾。

參考文章

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

相關(guān)文章

最新評(píng)論

宝鸡市| 南和县| 七台河市| 邯郸市| 会泽县| 镶黄旗| 汉阴县| 故城县| 威宁| 东乌珠穆沁旗| 和田县| 喀什市| 湘乡市| 郁南县| 涞水县| 麻江县| 伊金霍洛旗| 都匀市| 磐安县| 四川省| 平潭县| 黎川县| 大名县| 晴隆县| 金乡县| 黑河市| 鲁甸县| 方山县| 项城市| 崇信县| 汾西县| 清流县| 文登市| 文昌市| 托克逊县| 青铜峡市| 临澧县| 六安市| 泰顺县| 隆子县| 安溪县|