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

Java高級(jí)特性基礎(chǔ)之反射五連問

 更新時(shí)間:2023年01月11日 10:17:37   作者:世界盡頭與你  
反射賦予了我們?cè)谶\(yùn)行時(shí)分析類以及執(zhí)行類中方法的能力。通過反射你可以獲取任意一個(gè)類的所有屬性和方法,你還可以調(diào)用這些方法和屬性。本文就來和大家詳細(xì)聊聊Java中的反射,感興趣的可以了解一下

1.反射的作用

它賦予了我們?cè)谶\(yùn)行時(shí)分析類以及執(zhí)行類中方法的能力。通過反射你可以獲取任意一個(gè)類的所有屬性和方法,你還可以調(diào)用這些方法和屬性

2.反射的優(yōu)缺點(diǎn)

反射讓我們?cè)谶\(yùn)行時(shí)有了分析操作類的能力,反射可以讓我們的代碼更加靈活、為各種框架提供開箱即用的功能提供了便利。

增加了安全問題,比如可以無視泛型參數(shù)的安全檢查(泛型參數(shù)的安全檢查發(fā)生在編譯時(shí))

另外,反射的性能也要稍差點(diǎn),不過,對(duì)于框架來說實(shí)際是影響不大的

3.反射的應(yīng)用場(chǎng)景

Spring/Spring Boot、MyBatis 等等框架中都大量使用了反射機(jī)制

Java動(dòng)態(tài)代理的實(shí)現(xiàn)也依賴反射

Java 中的一大利器 注解 的實(shí)現(xiàn)也用到了反射

4.說一下反射的相關(guān)類有哪些

/**
 * 反射入門
 * 通過字符串形式的類的路徑和方法信息調(diào)用類的方法
 */
public class reflectionTest {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        // 類的路徑
        String classPath = "reflection.Cat";
        // 要執(zhí)行類的方法名稱
        String classMethod = "hi";
        // 加載類
        Class cls = Class.forName(classPath);
        // 通過cls得到你加載的類Cat的對(duì)象實(shí)例
        Object o = cls.newInstance();
        // 查看o的運(yùn)行類型,為Cat類型
        System.out.println(o.getClass());  // class reflection.Cat
        // 得到加載的類的方法對(duì)象
        // 在反射中,可以把方法視為對(duì)象
        Method method = cls.getMethod(classMethod);
        // 通過method實(shí)例調(diào)用方法:即通過方法對(duì)象來實(shí)現(xiàn)調(diào)用方法
        method.invoke(o);  // 喵喵喵~

        // 得到name字段的信息
        // 注意:getField不能得到私有的屬性信息
        Field nameField = cls.getField("name");
        System.out.println(nameField.get(o));  // 豹貓(我們定義的屬性名字)

        // 得到構(gòu)造器
        Constructor constructor = cls.getConstructor();
        System.out.println(constructor);  // public reflection.Cat()
    }
}

5.獲取Class對(duì)象的六種方式

forName獲取。多用于配置文件讀取類的全路徑,加載類

String classAllPath = "reflection.Cat";
Class ccls = Class.forName(classAllPath);

類名.class。多用于參數(shù)傳遞

System.out.println(String.class);  // class java.lang.String
System.out.println(Cat.class);  // class reflection.Cat

對(duì)象.getClass。適用于已經(jīng)存在對(duì)象實(shí)例的情況

Cat cat = new Cat();
System.out.println(cat.getClass());  // class reflection.Cat

通過類加載器獲取Class對(duì)象,通過類加載器獲取 Class 對(duì)象不會(huì)進(jìn)行初始化,意味著不進(jìn)行包括初始化等一系列步驟,靜態(tài)代碼塊和靜態(tài)對(duì)象不會(huì)得到執(zhí)行

String classAllPath = "reflection.Cat";
Cat cat = new Cat();
// (1)得到類加載器
ClassLoader classLoader = cat.getClass().getClassLoader();
// (2)通過類加載器得到Class對(duì)象
Class<?> cls = classLoader.loadClass(classAllPath);
System.out.println(cls);  // class reflection.Cat

基本數(shù)據(jù)類型通過.class獲取Class對(duì)象

Class<Integer> integerClass = int.class;
Class<Character> characterClass = char.class;
Class<Boolean> booleanClass = boolean.class;
System.out.println(integerClass);  // int

基本數(shù)據(jù)類型的包裝類可以通過.TYPE得到Class對(duì)象

Class<Integer> type = Integer.TYPE;
System.out.println(type);  // int

到此這篇關(guān)于Java高級(jí)特性基礎(chǔ)之反射五連問的文章就介紹到這了,更多相關(guān)Java高級(jí)特性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實(shí)現(xiàn)的各種排序算法代碼示例

    java實(shí)現(xiàn)的各種排序算法代碼示例

    這篇文章主要介紹了java實(shí)現(xiàn)的各種排序算法代碼示例,比較全面,代碼親測(cè)可用,如有不足之處,歡迎留言指出。
    2017-10-10
  • 全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系

    全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系

    String的值是不可變的,這就導(dǎo)致每次對(duì)String的操作都會(huì)生成新的String對(duì)象,不僅效率低下,而且大量浪費(fèi)有限的內(nèi)存空間,StringBuffer是可變類,和線程安全的字符串操作類,任何對(duì)它指向的字符串的操作都不會(huì)產(chǎn)生新的對(duì)象,StringBuffer和StringBuilder類功能基本相似
    2013-01-01
  • Java字符串轉(zhuǎn)成二進(jìn)制碼的方法

    Java字符串轉(zhuǎn)成二進(jìn)制碼的方法

    這篇文章主要為大家詳細(xì)介紹了Java字符串轉(zhuǎn)成二進(jìn)制碼的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一
    2017-05-05
  • JAVA過濾器和攔截器有什么區(qū)別詳細(xì)講解

    JAVA過濾器和攔截器有什么區(qū)別詳細(xì)講解

    在JavaWeb開發(fā)中,過濾器(Filter)和攔截器(Interceptor)是兩種重要的組件,主要用于攔截和處理請(qǐng)求,過濾器屬于JavaServlet規(guī)范,用于請(qǐng)求到達(dá)目標(biāo)資源之前或響應(yīng)返回客戶端之前的處理,需要的朋友可以參考下
    2024-10-10
  • java學(xué)習(xí)之junit單元測(cè)試案例(經(jīng)典版)

    java學(xué)習(xí)之junit單元測(cè)試案例(經(jīng)典版)

    這篇文章主要介紹了java學(xué)習(xí)之junit單元測(cè)試的相關(guān)資料,文中講解了JUnit單元測(cè)試的基本概念、作用、使用assert進(jìn)行驗(yàn)證、覆蓋率分析、BeforeEach和AfterAll的使用、通過反射和注解實(shí)現(xiàn)測(cè)試,需要的朋友可以參考下
    2024-12-12
  • Java原生方法實(shí)現(xiàn) AES 算法示例

    Java原生方法實(shí)現(xiàn) AES 算法示例

    這篇文章主要介紹了Java原生方法實(shí)現(xiàn) AES 算法,結(jié)合實(shí)例形式分析了Java實(shí)現(xiàn)AES加密算法的相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Spring?Boot?Rest常用框架注解詳情簡(jiǎn)介

    Spring?Boot?Rest常用框架注解詳情簡(jiǎn)介

    這篇文章主要介紹了Spring?Boot?Rest常用框架注解,通過將嘗試解釋Spring?Boot?Rest?API的不同注釋,這些注釋是Spring?Boot中REST?API所必需的,需要的朋友可以參考一下
    2022-06-06
  • 高內(nèi)聚低耦合原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    高內(nèi)聚低耦合原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    耦合度就是某模塊(類)與其它模塊(類)之間的關(guān)聯(lián)、感知和依賴的程度,是衡量代碼獨(dú)立性的一個(gè)指標(biāo),也是軟件工程設(shè)計(jì)及編碼質(zhì)量評(píng)價(jià)的一個(gè)標(biāo)準(zhǔn)
    2017-08-08
  • java實(shí)現(xiàn)全局監(jiān)聽鍵盤詳解

    java實(shí)現(xiàn)全局監(jiān)聽鍵盤詳解

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)全局監(jiān)聽鍵盤的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2024-01-01
  • Maven安裝與配置及Idea配置Maven的全過程

    Maven安裝與配置及Idea配置Maven的全過程

    Maven是一個(gè)項(xiàng)目管理工具,可以對(duì)Java項(xiàng)目進(jìn)行自動(dòng)化的構(gòu)建和依賴管理,下面這篇文章主要給大家介紹了關(guān)于Maven安裝與配置及Idea配置Maven的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02

最新評(píng)論

资源县| 水城县| 山丹县| 平顶山市| 得荣县| 枞阳县| 遂平县| 宣化县| 五原县| 靖远县| 育儿| 泌阳县| 抚松县| 观塘区| 环江| 贞丰县| 广昌县| 霞浦县| 通州区| 大邑县| 抚宁县| 滕州市| 台江县| 理塘县| 松桃| 裕民县| 威海市| 建平县| 东明县| 桐梓县| 贵德县| 阿拉善左旗| 延安市| 嘉兴市| 龙海市| 灵川县| 柳州市| 新民市| 宁安市| 鄂托克旗| 虎林市|