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

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

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

本文實(shí)例講述了Java內(nèi)部類(lèi)對(duì)象的創(chuàng)建及hook機(jī)制。分享給大家供大家參考,具體如下:

Java中的內(nèi)部類(lèi)雖然在狀態(tài)信息上與其外圍類(lèi)在狀態(tài)信息是完全獨(dú)立的(可直接通過(guò)內(nèi)部類(lèi)實(shí)例執(zhí)行其功能),但是外圍類(lèi)對(duì)象卻是內(nèi)部類(lèi)對(duì)象得以存在的基礎(chǔ)。

內(nèi)部類(lèi)對(duì)象生成的時(shí)候,必須要保證其能夠有外圍類(lèi)對(duì)象進(jìn)行掛靠(hook),從而java提供了嚴(yán)格的內(nèi)部類(lèi)對(duì)象生成的語(yǔ)法。

一般慣用兩種方法,生成內(nèi)部類(lèi)對(duì)象。

Method1: 使用  外圍類(lèi)實(shí)例.new  內(nèi)部類(lèi)名稱(chēng)() 的標(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)部類(lèi)實(shí)例產(chǎn)生的方法,new 外圍類(lèi)實(shí)例.內(nèi)部類(lèi)名() ,這樣做的目的是為了保證內(nèi)部類(lèi)實(shí)例一定有外圍類(lèi)實(shí)例hook.
InterfaceA interfaceB=instanceA.new Outer();//又生成了一個(gè)內(nèi)部類(lèi)的實(shí)例,且也掛靠在了實(shí)例instanceA上。
}

Method2: 使用工廠方法,直接返回實(shí)現(xiàn)了某一接口的對(duì)象(該對(duì)象一般為內(nèi)部類(lè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)部類(lèi)實(shí)例產(chǎn)生的方法,直接調(diào)用了一個(gè)工廠方法,返回一個(gè)實(shí)現(xiàn)InterfaceA接口的對(duì)象。
InterfaceA interfaceB=instanceA.createInnerInstance();//又生成了一個(gè)內(nèi)部類(lèi)的實(shí)例,且也掛靠在了實(shí)例instanceA上。
}

與使用實(shí)例名.new 類(lèi)名()的方式相比,工廠方法顯得更為優(yōu)雅和清晰。

!注意內(nèi)部類(lèi)的使用場(chǎng)景,一般是返回一個(gè)實(shí)現(xiàn)了某接口功能的內(nèi)部類(lèi)對(duì)象到外部,然后進(jìn)行相應(yīng)的操作。(由于外圍類(lèi)的成員對(duì)內(nèi)部類(lèi)全可見(jiàn),其方便性和優(yōu)勢(shì)十分的明顯)

由于內(nèi)部類(lèi)對(duì)象在生成的時(shí)候,編譯器就自動(dòng)的對(duì)創(chuàng)建其的外圍類(lèi)實(shí)例信息進(jìn)行了捕獲,所以java還提供了.this方式回調(diào)外圍類(lèi)實(shí)例(此方法有時(shí)候十分的重要)。

Example:

public class Outer
{
  class inner
  {
    public Outer callback(){return Outer.this}//callback()方法返回了內(nèi)部類(lèi)對(duì)象hook的外圍類(lèi)對(duì)象的引用,使用語(yǔ)法 外圍類(lèi)名.this, 注意函數(shù)的返回類(lèi)型!
  }
}

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 淺析java創(chuàng)建文件和目錄

    淺析java創(chuàng)建文件和目錄

    這篇文章主要介紹了淺析java創(chuàng)建文件和目錄的關(guān)鍵技術(shù)點(diǎn)以及演示示例,是篇非常不錯(cuò)的文章,有需要的朋友可以參考下
    2014-09-09
  • 如何設(shè)計(jì)一個(gè)秒殺系統(tǒng)

    如何設(shè)計(jì)一個(gè)秒殺系統(tǒng)

    本文主要介紹了如何設(shè)計(jì)一個(gè)秒殺系統(tǒng)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • IDEA去除掉代碼中虛線、波浪線和下劃線實(shí)線的方法

    IDEA去除掉代碼中虛線、波浪線和下劃線實(shí)線的方法

    初次安裝使用IDEA,總是能看到導(dǎo)入代碼后,出現(xiàn)很多的波浪線,下劃線和虛線,這是IDEA給我們的一些提示和警告,但是有時(shí)候我們并不需要,反而會(huì)讓人看著很不爽,這里簡(jiǎn)單記錄一下自己的調(diào)整方法,供其他的小伙伴在使用的時(shí)候參考
    2024-09-09
  • java學(xué)習(xí)教程之常量折疊詳解

    java學(xué)習(xí)教程之常量折疊詳解

    這篇文章主要給大家介紹了關(guān)于java學(xué)習(xí)教程之常量折疊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 詳解Java快速上手用戶后臺(tái)管理系統(tǒng)

    詳解Java快速上手用戶后臺(tái)管理系統(tǒng)

    只有在實(shí)戰(zhàn)中練習(xí)才能真正獲得能力的提升,本篇文章手把手帶你用Java快速上手實(shí)現(xiàn)一個(gè)用戶后臺(tái)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • 解決HashMap多線程操作導(dǎo)致死循環(huán)問(wèn)題

    解決HashMap多線程操作導(dǎo)致死循環(huán)問(wèn)題

    文章主要講述了在多線程環(huán)境下,HashMap的并發(fā)操作可能導(dǎo)致的死循環(huán)問(wèn)題,包括鏈表/紅黑樹(shù)結(jié)構(gòu)破壞、擴(kuò)容過(guò)程中的混亂以及讀寫(xiě)不一致等,為了解決這些問(wèn)題,文章建議使用線程安全的ConcurrentHashMap替代HashMap,并介紹了其分段鎖機(jī)制和優(yōu)化方案
    2025-01-01
  • Java實(shí)現(xiàn)List去重的方法詳解

    Java實(shí)現(xiàn)List去重的方法詳解

    本文用示例介紹Java的List(ArrayList、LinkedList等)的去重的方法。List去重的常用方法一般是:JDK8的stream的distinct、轉(zhuǎn)為HashSet、轉(zhuǎn)為T(mén)reeSet等,感興趣的可以了解一下
    2022-05-05
  • springmvc path請(qǐng)求映射到bean 方法的流程

    springmvc path請(qǐng)求映射到bean 方法的流程

    這篇文章主要介紹了springmvc path請(qǐng)求映射到bean 方法的流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Java String 對(duì)象(你真的了解了嗎)

    Java String 對(duì)象(你真的了解了嗎)

    這篇文章主要介紹了Java String 對(duì)象(你真的了解了嗎),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • protobuf與json轉(zhuǎn)換小結(jié)

    protobuf與json轉(zhuǎn)換小結(jié)

    protobuf對(duì)象不能直接使用jsonlib去轉(zhuǎn),因?yàn)閜rotobuf生成的對(duì)象的get方法返回的類(lèi)型有byte[],而只有String類(lèi)型可以作為json的key,protobuf提供方法進(jìn)行轉(zhuǎn)換
    2017-07-07

最新評(píng)論

合川市| 长子县| 淳安县| 密云县| 辽阳县| 淮北市| 潢川县| 绥化市| 南开区| 安丘市| 克山县| 南和县| 台安县| 华池县| 昭通市| 萍乡市| 黎城县| 郎溪县| 新晃| 陇川县| 山东省| 岑溪市| 富阳市| 南昌县| 米易县| 五寨县| 通化县| 遵义县| 双辽市| 神池县| 兴和县| 华蓥市| 友谊县| 东丰县| 绥化市| 西丰县| 本溪市| 门源| 铜陵市| 讷河市| 棋牌|