亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解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)文章

  • Java基于自定義類加載器實(shí)現(xiàn)熱部署過(guò)程解析

    Java基于自定義類加載器實(shí)現(xiàn)熱部署過(guò)程解析

    這篇文章主要介紹了Java基于自定義類加載器實(shí)現(xiàn)熱部署過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Spring?Cloud?Gateway中netty線程池優(yōu)化示例詳解

    Spring?Cloud?Gateway中netty線程池優(yōu)化示例詳解

    這篇文章主要介紹了Spring?Cloud?Gateway中netty線程池優(yōu)化示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • spring源碼學(xué)習(xí)之bean的初始化以及循環(huán)引用

    spring源碼學(xué)習(xí)之bean的初始化以及循環(huán)引用

    這篇文章主要給大家介紹了關(guān)于spring源碼學(xué)習(xí)之bean的初始化以及循環(huán)引用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • java 利用java反射機(jī)制動(dòng)態(tài)加載類的簡(jiǎn)單實(shí)現(xiàn)

    java 利用java反射機(jī)制動(dòng)態(tài)加載類的簡(jiǎn)單實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇java 利用java反射機(jī)制動(dòng)態(tài)加載類的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • Java使用RedisTemplate模糊刪除key操作

    Java使用RedisTemplate模糊刪除key操作

    這篇文章主要介紹了Java使用RedisTemplate模糊刪除key操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • 聊一聊Java中的Steam流

    聊一聊Java中的Steam流

    當(dāng)我們需要處理的數(shù)據(jù)量很大的時(shí)候,為了提高性能,就需要使用到并行處理,這樣的處理方式是很復(fù)雜的,流可以幫助開(kāi)發(fā)者節(jié)約寶貴的時(shí)間,讓以上的事情變得輕松,本文就和大家聊一聊Java中的Steam流,感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-07-07
  • springboot整合webservice使用簡(jiǎn)單案例總結(jié)

    springboot整合webservice使用簡(jiǎn)單案例總結(jié)

    WebService是一個(gè)SOA(面向服務(wù)的編程)的架構(gòu),它是不依賴于語(yǔ)言,平臺(tái)等,可以實(shí)現(xiàn)不同的語(yǔ)言間的相互調(diào)用,下面這篇文章主要給大家介紹了關(guān)于springboot整合webservice使用的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • Java微信公眾平臺(tái)開(kāi)發(fā)(13) 微信JSSDK中Config配置

    Java微信公眾平臺(tái)開(kāi)發(fā)(13) 微信JSSDK中Config配置

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開(kāi)發(fā)第十三步,微信JSSDK中Config配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Spring?main方法中如何調(diào)用Dao層和Service層的方法

    Spring?main方法中如何調(diào)用Dao層和Service層的方法

    這篇文章主要介紹了Spring?main方法中調(diào)用Dao層和Service層的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java實(shí)現(xiàn)線性表的鏈?zhǔn)酱鎯?chǔ)

    Java實(shí)現(xiàn)線性表的鏈?zhǔn)酱鎯?chǔ)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)線性表的鏈?zhǔn)酱鎯?chǔ),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評(píng)論