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

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

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

一、什么是反射

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

二、通過類對象調(diào)用newInstance()方法,適用于無參構(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 對象名.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()方法獲得構(gòu)造器(Constructor)對象并調(diào)用其newInstance()方法創(chuàng)建對象,適用于無參和有參構(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) 

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

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

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

參考文章

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

相關(guān)文章

  • Java使用橋接模式實現(xiàn)開關(guān)和電燈照明功能詳解

    Java使用橋接模式實現(xiàn)開關(guān)和電燈照明功能詳解

    這篇文章主要介紹了Java使用橋接模式實現(xiàn)開關(guān)和電燈照明功能,較為詳細的講述了橋接模式的概念、原理并結(jié)合實例形式分析了Java使用橋接模式實現(xiàn)開關(guān)和電燈照明功能相關(guān)操作步驟與注意事項,需要的朋友可以參考下
    2018-05-05
  • Python學習之書寫格式及變量命名

    Python學習之書寫格式及變量命名

    這篇文章我們給大家總結(jié)了關(guān)于Python書寫格式及變量命名,小編覺得這篇文章寫的還不錯,有興趣的朋友跟著參考學習下,希望能夠給你帶來幫助
    2021-10-10
  • IDEA如何使用spring-Initializr快速搭建SpringBoot

    IDEA如何使用spring-Initializr快速搭建SpringBoot

    這篇文章主要介紹了IDEA如何使用spring-Initializr快速搭建SpringBoot問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 基于Spring-AOP實現(xiàn)自定義分片工具詳解

    基于Spring-AOP實現(xiàn)自定義分片工具詳解

    隨著數(shù)據(jù)量的增長,在與其他系統(tǒng)交互時,批量接口會出現(xiàn)超時現(xiàn)象,發(fā)現(xiàn)原批量接口在實現(xiàn)時,沒有做分片處理。由于與其他系統(tǒng)交互比較多,一個一個接口去做分片優(yōu)化,改動量較大,所以考慮通過AOP解決此問題,感興趣的可以了解一下
    2022-11-11
  • 新版Android?Studio修改jdk版本的簡單步驟

    新版Android?Studio修改jdk版本的簡單步驟

    這篇文章主要介紹了新版Android?Studio修改jdk版本的簡單步驟,升級Android?Studio后,JDK版本設(shè)置選項消失,可以通過Settings面板進入Gradle設(shè)置,修改GradleJDK路徑來解決問題,需要的朋友可以參考下
    2025-03-03
  • Java對象傳遞與返回的細節(jié)問題詳析

    Java對象傳遞與返回的細節(jié)問題詳析

    我們知道這是一個核心概念,在Java中總是按值傳遞而不是按引用傳遞,下面這篇文章主要給大家介紹了關(guān)于Java對象傳遞與返回的細節(jié)問題的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • SpringSecurity?默認登錄認證的實現(xiàn)原理解析

    SpringSecurity?默認登錄認證的實現(xiàn)原理解析

    這篇文章主要介紹了SpringSecurity?默認登錄認證的實現(xiàn)原理解析,本文通過圖文示例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-12-12
  • Java經(jīng)驗點滴:處理沒有被捕獲的異常

    Java經(jīng)驗點滴:處理沒有被捕獲的異常

    Java經(jīng)驗點滴:處理沒有被捕獲的異常...
    2006-12-12
  • 簡單注解實現(xiàn)集群同步鎖(spring+redis+注解)

    簡單注解實現(xiàn)集群同步鎖(spring+redis+注解)

    本文主要介紹了簡單注解實現(xiàn)集群同步鎖的步驟與方法。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Spring常見錯誤之Web嵌套對象校驗失效解決辦法

    Spring常見錯誤之Web嵌套對象校驗失效解決辦法

    這篇文章主要介紹了Spring常見錯誤之Web嵌套對象校驗失效解決的相關(guān)資料,通過在Phone對象上添加@Valid注解,問題得以解決,需要的朋友可以參考下
    2025-01-01

最新評論

井研县| 仪征市| 平和县| 九寨沟县| 红桥区| 文水县| 陇川县| 商河县| 应用必备| 安岳县| 云浮市| 陆川县| 惠来县| 海兴县| 乌鲁木齐市| 隆安县| 远安县| 保靖县| 隆安县| 东安县| 铁岭市| 长春市| 洛川县| 连南| 始兴县| 上犹县| 盐边县| 达日县| 长宁县| 手游| 罗甸县| 介休市| 亚东县| 莆田市| 昌图县| 日土县| 和顺县| 宁晋县| 岑巩县| 郓城县| 奉新县|