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

Java實例講解反射機制是怎么一回事

 更新時間:2022年03月04日 15:35:08   作者:笑霸final  
Java的反射(reflection)機制是指在程序的運行狀態(tài)中,可以構(gòu)造任意一個類的對象,可以了解任意一個對象所屬的類,可以了解任意一個類的成員變量和方法,可以調(diào)用任意一個對象的屬性和方法

Java反射機制的概述

1.Java的反射(reflection) :機制是指在程序的運行狀態(tài)中,可以構(gòu)造任意一個類的對象,可以了解任意一個對象所屬的類,可以了解任意一個類的成員變量和方法,可以調(diào)用任意一個對象的屬性和方法。這種動態(tài)獲取程序信息以及動態(tài)調(diào)用對象的功能稱為Java語言的反射機制。反射被視為動態(tài)語言的關(guān)鍵,反射讓Java成為一個準(zhǔn)動態(tài)語言 。缺點增加不安全性。

2.動態(tài)語言(弱類型語言) 是運行時才確定數(shù)據(jù)類型的語言,變量在使用之前無需申明類型,通常變量的值是被賦值的那個值的類型。. 比如Php、Asp、JavaScript、Python、Perl等等。. 靜態(tài)語言(強類型語言) 是編譯時變量的數(shù)據(jù)類型就可以確定的語言,大多數(shù)靜態(tài)語言要求在使用變量之前必須生命數(shù)據(jù)類型。. 比如Java、C、C++、C#等。. 弱類型語言 是數(shù)據(jù)類型可以被忽略的語言。

3.靜態(tài)語言是在編譯時變量的數(shù)據(jù)類型即可確定的語言,多數(shù)靜態(tài)類型語言要求在使用變量之前必須聲明數(shù)據(jù)類型。 例如:C++、Java、Delphi、C#等。 動態(tài)語言是在運行時確定數(shù)據(jù)類型的語言。

4.Class類:是描述類的一個類。Class 類是在Java語言中定義一個特定類的實現(xiàn)。一個類的定義包含成員變量,成員方法,還有這個類實現(xiàn)的接口,以及這個類的父類。Class類的對象用于表示當(dāng)前運行的 Java 應(yīng)用程序中的類和接口。 比如:每個數(shù)組均屬于一個 Class 類對象,所有具有相同元素類型和維數(shù)的數(shù)組共享一個Class 對象。基本的 Java 類型(boolean, byte, char, short,int, long, float 和 double) 和 void 類型也可表示為 Class 對象。

理解Class類并獲取Class實列

類的加載與ClassLoader

Class c1 = Class.forName("com.fianl_.reflection_.pojo");
        Class c2 = Class.forName("com.fianl_.reflection_.pojo");
        Class c3 = Class.forName("com.fianl_.reflection_.pojo");
        System.out.println(c1.hashCode());
        System.out.println(c2.hashCode());
        System.out.println(c3.hashCode());

運行結(jié)果如下:

結(jié)論:c1.c2.c3.的hashCode一樣 說明一個類在內(nèi)存中只有一個Class對象。一個類被加載后,類的整個結(jié)構(gòu)會被封裝在Class對象中

Class一些常用的方法:

getName()
一個Class對象描述了一個特定類的屬性,Class類中最常用的方法getName以 String 的形式返回此 Class 對象所表示的實體(類、接口、數(shù)組類、基本類型或 void)名稱。
newInstance()
Class還有一個有用的方法可以為類創(chuàng)建一個實例,這個方法叫做newInstance()。例如:x.getClass.newInstance(),創(chuàng)建了一個同x一樣類型的新實例。newInstance()方法調(diào)用默認構(gòu)造器(無參數(shù)構(gòu)造器)初始化新建對象。
getClassLoader()
返回該類的類加載器。
getComponentType()
返回表示數(shù)組組件類型的 Class。
getSuperclass()
返回表示此 Class 所表示的實體(類、接口、基本類型或 void)的超類的 Class。
isArray()
判定此 Class 對象是否表示一個數(shù)組類。
getClassLoader()
/******************************************************************/
獲取該類的類裝載器。

getComponentType()

如果當(dāng)前類表示一個數(shù)組,則返回表示該數(shù)組組件的Class對象,否則返回null。

getConstructor(Class[])

返回當(dāng)前Class對象表示的類的指定的公有構(gòu)造子對象。

getConstructors()

返回當(dāng)前Class對象表示的類的所有公有構(gòu)造子對象數(shù)組。

getDeclaredConstructor(Class[])

返回當(dāng)前Class對象表示的類的指定已說明的一個構(gòu)造子對象。

getDeclaredConstructors()

返回當(dāng)前Class對象表示的類的所有已說明的構(gòu)造子對象數(shù)組。

getDeclaredField(String)

返回當(dāng)前Class對象表示的類或接口的指定已說明的一個域?qū)ο蟆?/p>

getDeclaredFields()

返回當(dāng)前Class對象表示的類或接口的所有已說明的域?qū)ο髷?shù)組。

getDeclaredMethod(String,Class[])

返回當(dāng)前Class對象表示的類或接口的指定已說明的一個方法對象。

getDeclaredMethods()

返回Class對象表示的類或接口的所有已說明的方法數(shù)組。

getField(String)

返回當(dāng)前Class對象表示的類或接口的指定的公有成員域?qū)ο蟆?/p>

getFields()

返回當(dāng)前Class對象表示的類或接口的所有可訪問的公有域?qū)ο髷?shù)組。

getInterfaces()

返回當(dāng)前對象表示的類或接口實現(xiàn)的接口。

getMethod(String,Class[])

返回當(dāng)前Class對象表示的類或接口的指定的公有成員方法對象。

getMethods()

返回當(dāng)前Class對象表示的類或接口的所有公有成員方法對象數(shù)組,包括已聲明的和從父類繼承的方法。

getModifiers()

返回該類或接口的Java語言修改器代碼。

getName()

返回Class對象表示的類型(類、接口、數(shù)組或基類型)的完整路徑名字符串。

getResource(String)

按指定名查找資源。

getResourceAsStream(String)

用給定名查找資源。

getSigners()

獲取類標(biāo)記。

getSuperclass()

如果此對象表示除Object外的任一類,那么返回此對象的父類對象。

isArray()

如果Class對象表示一個數(shù)組則返回true,否則返回false。

isAssignableFrom(Class)

判定Class對象表示的類或接口是否同參數(shù)指定的Class表示的類或接口相同,或是其父類。

isInstance(Object)

此方法是Java語言instanceof操作的動態(tài)等價方法。

isInterface()

判定指定的Class對象是否表示一個接口類型。

isPrimitive()

判定指定的Class對象是否表示一個Java的基類型。

newInstance()

創(chuàng)建類的新實例。

toString()

將對象轉(zhuǎn)換為字符串。

獲取Class類的三種方法

  • 1.知道具體的類,通過類的class的屬性獲取,該方法最安全可靠,性能最高
Class a2=pojo.class;
        System.out.println(a2.hashCode());
  • 2.知道一個類的實例,調(diào)用實例的getClass()方法獲取Class對象
pojo pojo = new pojo();
        Class a1=pojo.getClass();
        System.out.println(a1.hashCode());
  • 3.知道一個類的全名,并且該類在類路徑下,可通過Class類的靜態(tài)方法forName()獲取,可能拋出 ClassNotFoundException異常
 Class c1 = Class.forName("com.fianl_.reflection_.pojo");
        System.out.println(c1.hashCode());

運行代碼:

Class c1 = Class.forName("com.fianl_.reflection_.pojo");
        System.out.println(c1.hashCode());
        //.知道一個類的實例,調(diào)用實例的getClass()方法獲取Class對象
        pojo pojo = new pojo();
        Class a1=pojo.getClass();
        System.out.println(a1.hashCode());
        //知道具體的類,通過類的class的屬性獲取,該方法最安全可靠,性能最高
        Class a2=pojo.class;
        System.out.println(a2.hashCode());

結(jié)果:

到此這篇關(guān)于Java實例講解反射機制是怎么一回事的文章就介紹到這了,更多相關(guān)Java 反射機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java如何使用ftp下載遠程服務(wù)器文件

    java如何使用ftp下載遠程服務(wù)器文件

    Java通過FTP下載文件主要有兩種方式:第一種是直接在連接中包含賬號和密碼進行遠程下載;第二種是登錄后使用賬號和密碼進行下載,這些方法適用于需要從遠程服務(wù)器獲取文件的場景
    2024-11-11
  • 如何避免Apache?Beanutils屬性copy

    如何避免Apache?Beanutils屬性copy

    這篇文章主要為大家介紹了如何避免Apache?Beanutils屬性copy的分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 如何在IDEA中查看依賴關(guān)系的方法步驟

    如何在IDEA中查看依賴關(guān)系的方法步驟

    這篇文章主要介紹了如何在IDEA中查看依賴關(guān)系的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java使用wait()和notify()線程間通訊的實現(xiàn)

    java使用wait()和notify()線程間通訊的實現(xiàn)

    Java 線程通信是將多個獨立的線程個體進行關(guān)聯(lián)處理,使得線程與線程之間能進行相互通信,本文就介紹了java使用wait()和notify()線程間通訊的實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • Java如何實現(xiàn)壓縮文件與解壓縮zip文件

    Java如何實現(xiàn)壓縮文件與解壓縮zip文件

    這篇文章主要介紹了Java如何實現(xiàn)壓縮文件與解壓縮zip文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 用dom4j生成xml,去掉xml頭的方法

    用dom4j生成xml,去掉xml頭的方法

    今天小編就為大家分享一篇用dom4j生成xml,去掉xml頭的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造

    Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造

    Service Mesh這個“熱”詞是2016年9月被“造”出來,而今年2018年更是被稱為service Mesh的關(guān)鍵之年,各家大公司都希望能在這個思潮下領(lǐng)先一步
    2023-03-03
  • Spring中的兩種代理JDK和CGLIB的區(qū)別淺談

    Spring中的兩種代理JDK和CGLIB的區(qū)別淺談

    本篇文章中主要介紹了Spring中的兩種代理JDK和CGLIB的區(qū)別淺談,詳解的介紹了JDK和CGLIB的原理和方法,有需要的朋友可以了解一下
    2017-04-04
  • 使用?EasyCode生成springboot+mybatis基礎(chǔ)程序的實現(xiàn)示例

    使用?EasyCode生成springboot+mybatis基礎(chǔ)程序的實現(xiàn)示例

    本文主要介紹了使用?EasyCode生成springboot+mybatis基礎(chǔ)程序的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • springboot上傳zip包并解壓至服務(wù)器nginx目錄方式

    springboot上傳zip包并解壓至服務(wù)器nginx目錄方式

    這篇文章主要介紹了springboot上傳zip包并解壓至服務(wù)器nginx目錄方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評論

芒康县| 田林县| 汉中市| 容城县| 中阳县| 泰和县| 田东县| 富裕县| 公主岭市| 扶余县| 木兰县| 梨树县| 繁峙县| 五河县| 吴堡县| 铜陵市| 雅江县| 广元市| 三明市| 鹿泉市| 玛曲县| 嘉峪关市| 潜山县| 嘉峪关市| 大兴区| 建昌县| 九寨沟县| 正镶白旗| 元朗区| 开原市| 普兰县| 长泰县| 裕民县| 拉孜县| 双流县| 宜宾县| 沙田区| 云龙县| 贺兰县| 嘉鱼县| 泗水县|