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

java的新特性反射機(jī)制應(yīng)用及操作示例詳解

 更新時(shí)間:2023年05月22日 08:43:58   作者:avatar?小強(qiáng)Zzz  
這篇文章主要為大家介紹了java的新特性反射機(jī)制的操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

說起發(fā)射,先說正射是什么,我們代碼中通過User user = new User();代碼創(chuàng)建一個(gè)對(duì)象,并調(diào)用User類的成員變量或方法,這種我們通過Class信息獲取class實(shí)例,稱之為正射,這種代碼編譯器編譯時(shí)便知道他會(huì)生成一個(gè)user對(duì)象。

如果我們?cè)趯懘a時(shí)不知道我們要操作的對(duì)象類型,他可能是User類型,也可能是House類型,而User類型和Clazz類型有沒有繼承關(guān)系,只知道要調(diào)用他的getId()方法,那又該怎么調(diào)用對(duì)象的方法呢?

反射

對(duì)于反射而言,我們獲得了一個(gè)對(duì)象的實(shí)例,并且知道了這個(gè)對(duì)象的類型,那么我們便可以對(duì)他進(jìn)行一切操作。

這是由于JVM為每一個(gè)加載的class都創(chuàng)建了一個(gè)class實(shí)例,并保存了實(shí)例的所有信息,包括類型,父類,方法,屬性等等,這使得我們可以獲取class實(shí)例的所有信息。
這種通過class實(shí)例獲取class信息的方法稱為反射

獲取class又3種方法

通過一個(gè)class的靜態(tài)變量class獲取

Class clazz = User.class;

通過完整包路徑獲取

Class clazz = Class.forName("xiaoqiangZzz.busticket;");

通過實(shí)例獲取

Object object = getObject();
Class clazz = object.getClass();

獲取到class后,我們也可以通過class創(chuàng)建實(shí)例對(duì)象

Object object = clazz.newInstance();
Object object = clazz.newInstance();

獲取屬性

  • Field getField(name):根據(jù)字段名獲取某個(gè)public的field(包括父類)
  • Field getDeclaredField(name):根據(jù)字段名獲取當(dāng)前類的某個(gè)field(不包括父類)
  • Field[] getFields():獲取所有public的field(包括父類)
  • Field[] getDeclaredFields():獲取當(dāng)前類的所有field(不包括父類)
public void getId(Object object) throws IllegalAccessException {
    Class clazz = object.getClass();
    Field field = clazz.getField("age");
    field.setAccessible(true);
    System.out.println(field.get(object));
    field.setAccessible(false);
}

類似的,我們可以獲取方法并調(diào)用

  • Method getMethod(name, Class...):獲取某個(gè)public的Method(包括父類)
  • Method getDeclaredMethod(name, Class...):獲取當(dāng)前類的某個(gè)Method(不包括父類)
  • Method[] getMethods():獲取所有public的Method(包括父類)
  • Method[] getDeclaredMethods():獲取當(dāng)前類的所有Method(不包括父類)
public void getMethod(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    Class clazz = object.getClass();
    Method method = clazz.getMethod("getId");
    method.invoke(object);
}

反射應(yīng)用

制作一個(gè)通用的數(shù)據(jù)庫表導(dǎo)出方法

public void wirte(Object[] objects, Class classN) throws IllegalAccessException {
        Sheet sheet = new Sheet();
        Field[] fields = classN.getDeclaredFields();
        for (int i = 1; i < objects.length; i++) {
            Row row = sheet.createRow(i);
            for (Field field : fields) {
                field.setAccessible(true);
                // 寫入單元格
                ...........
                field.setAccessible(false);
        }
    }

注解獲取類

以上就是java的新特性--反射的詳細(xì)內(nèi)容,更多關(guān)于java的新特性--反射的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • jvm調(diào)優(yōu)常用命令行工具詳解

    jvm調(diào)優(yōu)常用命令行工具詳解

    這篇文章主要介紹了jvm調(diào)優(yōu)常用命令行工具的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java多線程之異步Future機(jī)制的原理和實(shí)現(xiàn)

    Java多線程之異步Future機(jī)制的原理和實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java多線程之異步Future機(jī)制的原理和實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-08-08
  • SpringBoot實(shí)現(xiàn)配置文件加密的方案分享

    SpringBoot實(shí)現(xiàn)配置文件加密的方案分享

    項(xiàng)目的數(shù)據(jù)庫密碼、redis 密碼等明文展示在配置文件中會(huì)有潛在的風(fēng)險(xiǎn),因此采用合適的安全防護(hù)措施是有必要的,下面小編就為大家介紹一下SpringBoot中配置文件加密的方法,希望對(duì)大家有所幫助
    2023-11-11
  • 詳解springboot集成websocket的兩種實(shí)現(xiàn)方式

    詳解springboot集成websocket的兩種實(shí)現(xiàn)方式

    這篇文章主要介紹了springboot集成websocket的兩種實(shí)現(xiàn)方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java內(nèi)存模型JMM詳解

    Java內(nèi)存模型JMM詳解

    這篇文章主要介紹了Java內(nèi)存模型JMM詳解,涉及volatile和監(jiān)視器鎖,final字段,內(nèi)存屏障等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java 覆蓋equals時(shí)總要覆蓋hashcode

    Java 覆蓋equals時(shí)總要覆蓋hashcode

    這篇文章主要介紹了Java 覆蓋equals時(shí)總要覆蓋hashcode的相關(guān)資料,這里附有實(shí)例代碼,具有參考價(jià)值,需要的朋友可以參考下
    2016-12-12
  • SpringCloud集成Micrometer Tracing的代碼工程

    SpringCloud集成Micrometer Tracing的代碼工程

    Micrometer Tracing 是一個(gè)用于微服務(wù)架構(gòu)的追蹤庫,它提供了一種簡單而強(qiáng)大的方式來收集和報(bào)告分布式系統(tǒng)中的性能和調(diào)用鏈信息,Micrometer Tracing 旨在幫助開發(fā)者和運(yùn)維人員理解微服務(wù)之間的交互,本文給大家介紹了如何在 Spring Cloud 集成 Micrometer Tracing
    2024-12-12
  • Java中stream的用法詳細(xì)解讀

    Java中stream的用法詳細(xì)解讀

    這篇文章主要介紹了Java中stream的用法詳細(xì)解讀,Stream 是 Java8 中處理集合的關(guān)鍵抽象概念,它可以指定你希望對(duì)集合進(jìn)行的操作,可以執(zhí)行非常復(fù)雜的查找、過濾和映射數(shù)據(jù)等操作,使用Stream API 對(duì)集合數(shù)據(jù)進(jìn)行操作,就類似于使用SQL執(zhí)行的數(shù)據(jù)庫查詢,需要的朋友可以參考下
    2023-10-10
  • java POI 如何實(shí)現(xiàn)Excel單元格內(nèi)容換行

    java POI 如何實(shí)現(xiàn)Excel單元格內(nèi)容換行

    這篇文章主要介紹了java POI 如何實(shí)現(xiàn)Excel單元格內(nèi)容換行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java 數(shù)據(jù)結(jié)構(gòu)線性表之順序存儲(chǔ)詳解原理

    Java 數(shù)據(jù)結(jié)構(gòu)線性表之順序存儲(chǔ)詳解原理

    線性表的順序存儲(chǔ)是指用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性表中的各個(gè)元素、使得線性表中在邏輯結(jié)構(gòu)上相鄰的數(shù)據(jù)元素存儲(chǔ)在相鄰的物理存儲(chǔ)單元中,即通過數(shù)據(jù)元素物理存儲(chǔ)的相鄰關(guān)系來反映數(shù)據(jù)元素之間邏輯上的相鄰關(guān)系
    2021-10-10

最新評(píng)論

孝义市| 平武县| 资中县| 儋州市| 望江县| 柞水县| 安丘市| 霸州市| 通渭县| 中江县| 彝良县| 疏附县| 三都| 南汇区| 蕉岭县| 乡城县| 肃南| 阆中市| 荥阳市| 太仆寺旗| 安乡县| 东海县| 贵定县| 辽阳市| 兰考县| 贡嘎县| 萨迦县| 萝北县| 镇平县| 永善县| 汽车| 吕梁市| 白城市| 湖南省| 乐陵市| 湘潭县| 灯塔市| 壶关县| 墨竹工卡县| 瑞金市| 南木林县|