最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Java中反射機(jī)制的原理-創(chuàng)新互聯(lián)

Java中反射機(jī)制的原理?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出鯉城免費(fèi)做網(wǎng)站回饋大家。

Java的優(yōu)點(diǎn)是什么

1. 簡(jiǎn)單,只需理解基本的概念,就可以編寫適合于各種情況的應(yīng)用程序;2. 面向?qū)ο螅?. 分布性,Java是面向網(wǎng)絡(luò)的語(yǔ)言;4. 魯棒性,java提供自動(dòng)垃圾收集來(lái)進(jìn)行內(nèi)存管理,防止程序員在管理內(nèi)存時(shí)容易產(chǎn)生的錯(cuò)誤。;5. 安全性,用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須防止病毒的入侵。6. 體系結(jié)構(gòu)中立,只要安裝了Java運(yùn)行時(shí)系統(tǒng),就可在任意處理器上運(yùn)行。7. 可移植性,Java可以方便地移植到網(wǎng)絡(luò)上的不同機(jī)器。8.解釋執(zhí)行,Java解釋器直接對(duì)Java字節(jié)碼進(jìn)行解釋執(zhí)行。

Java 反射機(jī)制

Reflection(反射)是被視為動(dòng)態(tài)語(yǔ)言的關(guān)鍵,反射機(jī)制允許程序在執(zhí)行期借助于Reflection
API取得任何類的內(nèi)部信息,并能直接操作任意對(duì)象的內(nèi)部屬性及方法。

Java反射機(jī)制提供的功能

  • 在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類

  • 在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象

  • 在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法

  • 在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的成員變量和方法

  • 生成動(dòng)態(tài)代理

反射相關(guān)的主要API:

  • java.lang.Class:代表一個(gè)類

  • java.lang.reflect.Method:代表類的方法

  • java.lang.reflect.Field:代表類的成員變量

  • java.lang.reflect.Constructor:代表類的構(gòu)造方法

Class類

  • 對(duì)照鏡子后可以得到的信息:某個(gè)類的屬性、方法和構(gòu)造器、某個(gè)類到底實(shí)現(xiàn)了哪些接口。對(duì)于每個(gè)類而言,JRE 都為其保留一個(gè)不變的 Class類型的對(duì)象。一個(gè) Class對(duì)象包含了特定某個(gè)類的有關(guān)信息。

  • Class本身也是一個(gè)類

  • Class對(duì)象只能由系統(tǒng)建立對(duì)象

  • 一個(gè)類在JVM 中只會(huì)有一個(gè)Class實(shí)例

  • 一個(gè)Class對(duì)象對(duì)應(yīng)的是一個(gè)加載到JVM中的一個(gè).class文件

  • 每個(gè)類的實(shí)例都會(huì)記得自己是由哪個(gè)Class 實(shí)例所生成

  • 通過(guò)Class可以完整地得到一個(gè)類中的完整結(jié)構(gòu)

實(shí)例化Class類對(duì)象

1、前提:若已知具體的類,通過(guò)類的class屬性獲取,該方法最為安全可靠,程序性能最高

實(shí)例:

Class clazz = String.class;

2、前提:已知某個(gè)類的實(shí)例,調(diào)用該實(shí)例的getClass()方法獲取Class對(duì)象

實(shí)例:

Class clazz ="www.atguigu.com".getClass();

3、前提:已知一個(gè)類的全類名,且該類在類路徑下,可通過(guò)Class類的靜態(tài)方法forName()獲取,可能拋出
ClassNotFoundException

實(shí)例:

Classclazz= Class.forName("java.lang.String");

4、其他方式(不做要求)

ClassLoader cl =this.getClass().getClassLoader();

Classclazz4 = cl.loadClass("類的全類名");

創(chuàng)建類對(duì)象并獲取類的完整結(jié)構(gòu)

1.創(chuàng)建類的對(duì)象:調(diào)用Class對(duì)象的newInstance()方法

要求:

1)類必須有一個(gè)無(wú)參數(shù)的構(gòu)造器。

2)類的構(gòu)造器的訪問(wèn)權(quán)限需要足夠。

難道沒(méi)有無(wú)參的構(gòu)造器就不能創(chuàng)建對(duì)象了嗎?

不是!只要在操作的時(shí)候明確的調(diào)用類中的構(gòu)造方法,并將參數(shù)傳遞進(jìn)去之后,才可以實(shí)例化操作。步驟如下:

1)通過(guò)Class類的getDeclaredConstructor(Class …parameterTypes)取得本類的指定形參類型的構(gòu)造器

2)向構(gòu)造器的形參中傳遞一個(gè)對(duì)象數(shù)組進(jìn)去,里面包含了構(gòu)造器中所需的各個(gè)參數(shù)。

//1.根據(jù)全類名獲取對(duì)應(yīng)的Class對(duì)象
String name = "atguigu.java.Person";
Class clazz = null;
clazz = Class.forName(name);
//2.調(diào)用指定參數(shù)結(jié)構(gòu)的構(gòu)造器,生成Constructor的實(shí)例
Constructor con = clazz.getConstructor(String.class,Integer.class);
//3.通過(guò)Constructor的實(shí)例創(chuàng)建對(duì)應(yīng)類的對(duì)象,并初始化類屬性
Person p2 = (Person)  con.newInstance("Peter",20);
System.out.println(p2);

通過(guò)反射調(diào)用類的完整結(jié)構(gòu)

使用反射可以取得:

1.實(shí)現(xiàn)的全部接口

public Class

通過(guò)反射調(diào)用類中的指定方法、指定屬性

1.調(diào)用指定方法

通過(guò)反射,調(diào)用類中的方法,通過(guò)Method類完成。步驟:

1.通過(guò)Class類的getMethod(String name,Class…parameterTypes)方法取得一個(gè)Method對(duì)象,并設(shè)置此方法操作時(shí)所需要的參數(shù)類型。

2.之后使用Object invoke(Object obj, Object[] args)進(jìn)行調(diào)用,并向方法中傳遞要設(shè)置的obj對(duì)象的參數(shù)信息。

Object invoke(Object obj, Object … args)

說(shuō)明:

1.Object 對(duì)應(yīng)原方法的返回值,若原方法無(wú)返回值,此時(shí)返回null

2.若原方法若為靜態(tài)方法,此時(shí)形參Objectobj可為null

3.若原方法形參列表為空,則Object[]args為null

4.若原方法聲明為private,則需要在調(diào)用此invoke()方法前,顯式調(diào)用方法對(duì)象的 setAccessible(true)方法,將可訪問(wèn)private的方法。

2.調(diào)用指定屬性

在反射機(jī)制中,可以直接通過(guò)Field類操作類中的屬性,通過(guò)Field類提供的set()和get()方法就可以完成設(shè)置和取得屬性內(nèi)容的操作。

public Field getField(Stringname)返回此Class對(duì)象表示的類或接口的指定的public的Field。
public Field getDeclaredField(Stringname)返回此Class對(duì)象表示的類或接口的指定的Field。

在Field中:

public Object get(Object obj)取得指定對(duì)象obj上此Field的屬性內(nèi)容
public void set(Object obj,Objectvalue)設(shè)置指定對(duì)象obj上此Field的屬性內(nèi)容

注:在類中屬性都設(shè)置為private的前提下,在使用set()和get()方法時(shí),首先要使用Field類中的setAccessible(true)方法將需要操作的屬性設(shè)置為可以被外部訪問(wèn)。
public void setAccessible(true)訪問(wèn)私有屬性時(shí),讓這個(gè)屬性可見(jiàn)。

Java動(dòng)態(tài)代理

1、動(dòng)態(tài)代理是指客戶通過(guò)代理類來(lái)調(diào)用其它對(duì)象的方法,并且是在程序運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)創(chuàng)建目標(biāo)類的代理對(duì)象。

2、動(dòng)態(tài)代理使用場(chǎng)合:

  • 調(diào)試

  • 遠(yuǎn)程方法調(diào)用

3、代理設(shè)計(jì)模式的原理:

  • 使用一個(gè)代理將對(duì)象包裝起來(lái), 然后用該代理對(duì)象取代原始對(duì)象. 任何對(duì)原始對(duì)象的調(diào)用都要通過(guò)代理. 代理對(duì)象決定是否以及何時(shí)將方法調(diào)用轉(zhuǎn)到原始對(duì)象上

4、Proxy :專門完成代理的操作類,是所有動(dòng)態(tài)代理類的父類。通過(guò)此類為一個(gè)或多個(gè)接口動(dòng)態(tài)地生成實(shí)現(xiàn)類。

5、提供用于創(chuàng)建動(dòng)態(tài)代理類和動(dòng)態(tài)代理對(duì)象的靜態(tài)方法

static Class

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)建站的支持。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、建站服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


本文題目:Java中反射機(jī)制的原理-創(chuàng)新互聯(lián)
鏈接分享:http://fisionsoft.com.cn/article/diipdp.html