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

Java反射概念與使用實(shí)例代碼

 更新時(shí)間:2021年11月09日 12:48:50   作者:小阿杰  
JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法,下面這篇文章主要給大家介紹了關(guān)于Java反射概念與使用的相關(guān)資料,需要的朋友可以參考下

前言

大家好,瑞雪后的第一天,每個(gè)周一的大家都期待這周五的來臨。相信很多小伙伴上周末就兩件事,賞雪和看EDG。哈哈 開始正題吧,今天聊一聊反射吧,在java中經(jīng)常使用。

反射

相信剛接觸Java的,第一句肯定會(huì)問什么是反射呢?反射有什么作用呢?為什么使用反射呢?首先反射是Java的特征之一,項(xiàng)目中Java程序在運(yùn)行的過程中,自動(dòng)去識(shí)別并創(chuàng)建對(duì)應(yīng)的類,能夠動(dòng)態(tài)的調(diào)用類的屬性、構(gòu)造方法、類中的方法。一句話描述:在程序中能動(dòng)態(tài)調(diào)用不同的類和屬性,去執(zhí)行特定的操作。

正因?yàn)榉瓷淠軌蛟谶\(yùn)行時(shí)動(dòng)態(tài)加載需要的對(duì)象,所以很多框架中都使用到了反射。本次為了大家很好的理解反射,將基于反射創(chuàng)建對(duì)象、獲取反射中的對(duì)象、獲取類中屬性、獲取類中的構(gòu)造方法、獲取類中方法幾個(gè)方面進(jìn)行介紹,下面開始進(jìn)入正題。

基礎(chǔ)數(shù)據(jù)準(zhǔn)備

為了方便演示,創(chuàng)建了一個(gè)基礎(chǔ)的對(duì)象類。并基于他進(jìn)行本次的介紹。創(chuàng)建的演示類JueJinUser如下,包含四個(gè)屬性,分別有g(shù)et和set方法,還有toString方法,沒有創(chuàng)建構(gòu)造方法,下面會(huì)介紹通過反射自動(dòng)創(chuàng)建的相關(guān)反射的方法。

public class JueJinUser {
    private Integer id;

    private String name;

    private String title;

    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "JueJinUser{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", title='" + title + '\'' +
                ", age=" + age +
                '}';
    }
}

基于反射創(chuàng)建對(duì)象

基于反射創(chuàng)建類對(duì)象主要有兩種方式:第一種是通過類對(duì)象的newInstance()方法創(chuàng)建對(duì)象,第二種是通過構(gòu)造器中的 newInstance()方法創(chuàng)建對(duì)象。

類對(duì)象的newInstance()方法

  類對(duì)象的newInstance()方法創(chuàng)建方法如下:

       Class class = JueJinUser.class;
       JueJinUser jueJinUseByClass = (JueJinUser) class.newInstance();

構(gòu)造器的newInstance()方法

        Class jueJinUserClass = JueJinUser.class;
        Constructor constructor = jueJinUserClass.getConstructor();
        JueJinUser jueJinUserByConstructor = (JueJinUser) constructor.newInstance();

需要注意的是,兩種創(chuàng)建方式中第一種基于類對(duì)象的newInstance()的方法只能是無參構(gòu)造方法,而第二種基于構(gòu)造器的 newInstance()方法可以有有參構(gòu)造方法和無參構(gòu)造方法,比較靈活。

獲取反射中的對(duì)象

獲取反射對(duì)象的方式有三種,分別是:Class.forName、.class 方法和getClass() 方法。獲取反射中對(duì)象的方法大家在項(xiàng)目中使用的還是比較多的,相信大家都不陌生。

Class.forName

    Class clzForName = Class.forName("com.example.demo.module.JueJinUser");

.class 方法

    Class clzForClass =JueJinUserString.class;
        

getClass() 方法

    JueJinUser JueJinUser = new JueJinUser();
    Class clzNewObject = str.getClass();

獲取類中屬性

通過getFields和getDeclaredFields的方法,可以獲取類中的屬性信息,其中g(shù)etFields可以獲取類中的公有屬性值,而getDeclaredFields的方法,獲取所有類中的屬性信息,但是無法獲取到父類的信息。格式如下:

        Class clz = JueJinUser.class;
        Field[] fields = clz.getFields();
        System.out.println("--- getFields start ---");
        for (Field field : fields) {
            System.out.println(field.getName());
        }
        System.out.println("--- getFields end ---");


        System.out.println("--- getDeclaredFields start ---");
        Field[] declaredFields = clz.getDeclaredFields();
        for (Field field : declaredFields) {
            System.out.println(field.getName());
        }
        System.out.println("--- etDeclaredFields end ---");

獲取類中的構(gòu)造方法

通過getConstructors和getDeclaredConstructors的方法,可以獲取類中的構(gòu)造方法信息,其中g(shù)etConstructors可以獲取類中構(gòu)造方法,而getDeclaredConstructors的方法,獲取所有類中的構(gòu)造方法,但是無法獲取到父類的構(gòu)造方法信息。格式如下:

     System.out.println("--- getConstructors start ---");
        Constructor[] constructors = clz.getConstructors();
        for (Constructor constructor : constructors) {
            System.out.println(constructor.getName());
        }
        System.out.println("--- getConstructors end ---");

        System.out.println("---getDeclaredConstructors start---");
        Constructor[] declaredConstructors = clz.getDeclaredConstructors();
        for (Constructor constructor : declaredConstructors) {
            System.out.println(constructor.getName());
        }
        System.out.println("---getDeclaredConstructors end---");

獲取類中方法

通過getMethods和getDeclaredMethods的方法,可以獲取類中的構(gòu)造方法信息,其中g(shù)etMethods可以獲取類中構(gòu)造方法,而getDeclaredMethods的方法,獲取所有類中的方法,但是無法獲取到父類的方法信息。格式如下:

     System.out.println("--- getMethods start ---");
        Method[] methods = clz.getMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
        }
        System.out.println("--- getMethods end ---");


        System.out.println("--- getDeclaredMethods start---");
        Method[] declaredMethods = clz.getDeclaredMethods();
        for (Method method : declaredMethods) {
            System.out.println(method.getName());
        }
        System.out.println("--- getDeclaredMethods end ---");

結(jié)語

到此這篇關(guān)于Java反射概念與使用的文章就介紹到這了,更多相關(guān)Java反射概念與使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java并發(fā)編程示例(八):處理線程的非受檢異常

    Java并發(fā)編程示例(八):處理線程的非受檢異常

    這篇文章主要介紹了Java并發(fā)編程示例(八):處理線程的非受檢異常,Java為我們提供了一種機(jī)制,專門用于處理由Thread對(duì)象拋出的非受檢異常,以避免程序的退出,需要的朋友可以參考下
    2014-12-12
  • Java多線程之readwritelock讀寫分離的實(shí)現(xiàn)代碼

    Java多線程之readwritelock讀寫分離的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java多線程之readwritelock讀寫分離的相關(guān)內(nèi)容,文中涉及具體實(shí)例代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • java.net.ConnectException異常的正確解決方法(親測(cè)有效!)

    java.net.ConnectException異常的正確解決方法(親測(cè)有效!)

    java.net.ConnectException異常是與網(wǎng)絡(luò)相關(guān)的最常見的Java異常之一,建立從客戶端應(yīng)用程序到服務(wù)器的TCP連接時(shí),我們可能會(huì)遇到它,這篇文章主要給大家介紹了關(guān)于java.net.ConnectException異常的正確解決方法,需要的朋友可以參考下
    2024-01-01
  • JavaWeb文件上傳開發(fā)實(shí)例

    JavaWeb文件上傳開發(fā)實(shí)例

    這篇文章主要為大家詳細(xì)介紹了JavaWeb文件上傳開發(fā)實(shí)例,如何進(jìn)行文件上傳操作,感興趣的小伙伴們可以參考一下
    2016-08-08
  • IDEA常用配置之類Tab頁(yè)多行顯示方式

    IDEA常用配置之類Tab頁(yè)多行顯示方式

    這篇文章主要介紹了IDEA常用配置之類Tab頁(yè)多行顯示方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java利用遞歸實(shí)現(xiàn)類別樹示例代碼

    java利用遞歸實(shí)現(xiàn)類別樹示例代碼

    這篇文章主要給大家介紹了關(guān)于java利用遞歸實(shí)現(xiàn)類別樹的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 基于mybatis 動(dòng)態(tài)SQL查詢總結(jié)

    基于mybatis 動(dòng)態(tài)SQL查詢總結(jié)

    這篇文章主要介紹了mybatis 動(dòng)態(tài)SQL查詢總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring Data JPA帶條件分頁(yè)查詢實(shí)現(xiàn)原理

    Spring Data JPA帶條件分頁(yè)查詢實(shí)現(xiàn)原理

    這篇文章主要介紹了Spring Data JPA帶條件分頁(yè)查詢實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 基于dubbo中Listener的實(shí)現(xiàn)方法

    基于dubbo中Listener的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄赿ubbo中Listener的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java實(shí)現(xiàn)學(xué)生信息管理界面

    Java實(shí)現(xiàn)學(xué)生信息管理界面

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生信息管理界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論

海林市| 上犹县| 咸阳市| 沐川县| 金寨县| 张北县| 芜湖县| 灵璧县| 紫金县| 阆中市| 铁岭县| 和林格尔县| 简阳市| 云浮市| 华安县| 遂昌县| 明溪县| 营口市| 保德县| 五河县| 颍上县| 湟源县| 社会| 蒙阴县| 白玉县| 晋宁县| 揭阳市| 靖江市| 宜兴市| 泰州市| 合川市| 安平县| 康马县| 平果县| 蓝山县| 福鼎市| 延吉市| 革吉县| 张北县| 乌拉特中旗| 孝昌县|