欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java開(kāi)發(fā)之內(nèi)部類對(duì)象的創(chuàng)建及hook機(jī)制分析

 更新時(shí)間:2018年01月18日 15:25:59   作者:airforce  
這篇文章主要介紹了Java開(kāi)發(fā)之內(nèi)部類對(duì)象的創(chuàng)建及hook機(jī)制,結(jié)合實(shí)例形式分析了java基于hook機(jī)制內(nèi)部類對(duì)象的創(chuàng)建與使用,需要的朋友可以參考下

本文實(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ì)有所幫助。

相關(guān)文章

  • Java遞歸查找層級(jí)文件夾下特定內(nèi)容的文件的方法

    Java遞歸查找層級(jí)文件夾下特定內(nèi)容的文件的方法

    這篇文章主要介紹了Java遞歸查找層級(jí)文件夾下特定內(nèi)容的文件,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Java正則驗(yàn)證字串符RegexValidator類使用

    Java正則驗(yàn)證字串符RegexValidator類使用

    正則驗(yàn)證字串符是一種強(qiáng)大的工具,可以幫助程序員在處理字符串時(shí)輕松進(jìn)行復(fù)雜匹配,本文將介紹正則表達(dá)式的概念、語(yǔ)法和在編程中的應(yīng)用,并通過(guò)實(shí)例演示如何使用正則表達(dá)式進(jìn)行字符串匹配、替換和提取等操作
    2023-11-11
  • java自定義切面增強(qiáng)方式(關(guān)于自定義注解aop)

    java自定義切面增強(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)題

    這篇文章主要介紹了解決Spring boot整合mybatis,xml資源文件放置及路徑配置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Spring?Data?JPA命名約定查詢實(shí)現(xiàn)方法

    Spring?Data?JPA命名約定查詢實(shí)現(xiàn)方法

    這篇文章主要為大家介紹了Spring?Data?JPA命名約定查詢實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 如何在IDEA中查看依賴關(guān)系的方法步驟

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

    這篇文章主要介紹了如何在IDEA中查看依賴關(guān)系的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java編譯錯(cuò)誤信息提示java.lang.ExceptionInInitializer解決

    Java編譯錯(cuò)誤信息提示java.lang.ExceptionInInitializer解決

    這篇文章主要介紹了Java編譯錯(cuò)誤信息提示java.lang.ExceptionInInitializer的分析講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 淺談Java異常的Exception e中的egetMessage()和toString()方法的區(qū)別

    淺談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-07
  • Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例

    Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例

    本文詳細(xì)講解了Java攔截器Interceptor實(shí)現(xiàn)原理及代碼示例,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • java使用URLDecoder和URLEncoder對(duì)中文字符進(jìn)行編碼和解碼

    java使用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

最新評(píng)論