Java開(kāi)發(fā)之內(nèi)部類對(duì)象的創(chuàng)建及hook機(jī)制分析
本文實(shí)例講述了Java內(nèi)部類對(duì)象的創(chuàng)建及hook機(jī)制。分享給大家供大家參考,具體如下:
Java中的內(nèi)部類雖然在狀態(tài)信息上與其外圍類在狀態(tài)信息是完全獨(dú)立的(可直接通過(guò)內(nèi)部類實(shí)例執(zhí)行其功能),但是外圍類對(duì)象卻是內(nèi)部類對(duì)象得以存在的基礎(chǔ)。
內(nèi)部類對(duì)象生成的時(shí)候,必須要保證其能夠有外圍類對(duì)象進(jìn)行掛靠(hook),從而java提供了嚴(yán)格的內(nèi)部類對(duì)象生成的語(yǔ)法。
一般慣用兩種方法,生成內(nèi)部類對(duì)象。
Method1: 使用 外圍類實(shí)例.new 內(nèi)部類名稱() 的標(biāo)準(zhǔn)方法。
Example 1:
public class Outer{ int no; class Inner implents InterfaceA{} } interface InterfaceA{} main() { Outer instanceA= new Outer(); InterfaceA interfaceA=instanceA.new Inner() ;//注意內(nèi)部類實(shí)例產(chǎn)生的方法,new 外圍類實(shí)例.內(nèi)部類名() ,這樣做的目的是為了保證內(nèi)部類實(shí)例一定有外圍類實(shí)例hook. InterfaceA interfaceB=instanceA.new Outer();//又生成了一個(gè)內(nèi)部類的實(shí)例,且也掛靠在了實(shí)例instanceA上。 }
Method2: 使用工廠方法,直接返回實(shí)現(xiàn)了某一接口的對(duì)象(該對(duì)象一般為內(nèi)部類)。
Example 1:
public class Outer{ int no; class Inner implents InterfaceA{} public InterfaceA createInnerInstance{ return InterfaceA{ read(); } } } interface InterfaceA{public void read();} main() { Outer instanceA= new Outer(); InterfaceA interfaceA=instanceA.createInnerInstance() ;//注意內(nèi)部類實(shí)例產(chǎn)生的方法,直接調(diào)用了一個(gè)工廠方法,返回一個(gè)實(shí)現(xiàn)InterfaceA接口的對(duì)象。 InterfaceA interfaceB=instanceA.createInnerInstance();//又生成了一個(gè)內(nèi)部類的實(shí)例,且也掛靠在了實(shí)例instanceA上。 }
與使用實(shí)例名.new 類名()的方式相比,工廠方法顯得更為優(yōu)雅和清晰。
!注意內(nèi)部類的使用場(chǎng)景,一般是返回一個(gè)實(shí)現(xiàn)了某接口功能的內(nèi)部類對(duì)象到外部,然后進(jìn)行相應(yīng)的操作。(由于外圍類的成員對(duì)內(nèi)部類全可見(jiàn),其方便性和優(yōu)勢(shì)十分的明顯)
由于內(nèi)部類對(duì)象在生成的時(shí)候,編譯器就自動(dòng)的對(duì)創(chuàng)建其的外圍類實(shí)例信息進(jìn)行了捕獲,所以java還提供了.this方式回調(diào)外圍類實(shí)例(此方法有時(shí)候十分的重要)。
Example:
public class Outer { class inner { public Outer callback(){return Outer.this}//callback()方法返回了內(nèi)部類對(duì)象hook的外圍類對(duì)象的引用,使用語(yǔ)法 外圍類名.this, 注意函數(shù)的返回類型! } }
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- Java 創(chuàng)建動(dòng)態(tài)類和查看方法列表信息的實(shí)例
- Java創(chuàng)建內(nèi)部類對(duì)象實(shí)例詳解
- Java實(shí)現(xiàn)創(chuàng)建運(yùn)行時(shí)類的對(duì)象操作示例
- java創(chuàng)建一個(gè)類實(shí)現(xiàn)讀取一個(gè)文件中的每一行顯示出來(lái)
- Java手動(dòng)方式創(chuàng)建枚舉類示例
- Java為什么基本數(shù)據(jù)類型不需要進(jìn)行創(chuàng)建對(duì)象?
- Java動(dòng)態(tài)調(diào)用類中方法代碼
- java 利用java反射機(jī)制動(dòng)態(tài)加載類的簡(jiǎn)單實(shí)現(xiàn)
- Java 8 動(dòng)態(tài)類型語(yǔ)言Lambda表達(dá)式實(shí)現(xiàn)原理解析
- Java實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類操作示例
相關(guān)文章
Java遞歸查找層級(jí)文件夾下特定內(nèi)容的文件的方法
這篇文章主要介紹了Java遞歸查找層級(jí)文件夾下特定內(nèi)容的文件,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Java正則驗(yàn)證字串符RegexValidator類使用
正則驗(yàn)證字串符是一種強(qiáng)大的工具,可以幫助程序員在處理字符串時(shí)輕松進(jìn)行復(fù)雜匹配,本文將介紹正則表達(dá)式的概念、語(yǔ)法和在編程中的應(yīng)用,并通過(guò)實(shí)例演示如何使用正則表達(dá)式進(jìn)行字符串匹配、替換和提取等操作2023-11-11java自定義切面增強(qiáng)方式(關(guān)于自定義注解aop)
這篇文章主要介紹了java自定義切面增強(qiáng)方式(關(guān)于自定義注解aop),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題
這篇文章主要介紹了解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Spring?Data?JPA命名約定查詢實(shí)現(xiàn)方法
這篇文章主要為大家介紹了Spring?Data?JPA命名約定查詢實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Java編譯錯(cuò)誤信息提示java.lang.ExceptionInInitializer解決
這篇文章主要介紹了Java編譯錯(cuò)誤信息提示java.lang.ExceptionInInitializer的分析講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07淺談Java異常的Exception e中的egetMessage()和toString()方法的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談Java異常的Exception e中的egetMessage()和toString()方法的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例
本文詳細(xì)講解了Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12java使用URLDecoder和URLEncoder對(duì)中文字符進(jìn)行編碼和解碼
這篇文章主要介紹了java 使用 URLDecoder 和 URLEncoder 對(duì)中文字符進(jìn)行編碼和解碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07