999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

深入研究Java內部類的實現原理

2014-04-06 11:57:40
山東工業技術 2014年17期
關鍵詞:定義方法

魏 鋼

(錦州師范高等專科學校,遼寧 錦州 121000)

深入研究Java內部類的實現原理

魏 鋼

(錦州師范高等專科學校,遼寧 錦州 121000)

內部類按照使用方式的不同可以分為常規內部類、靜態內部類、局部內部類和匿名內部類。通過對這四種內部類的定義方式、使用約束和引用方式的分析,應用反編譯技術對內部類和外部類進行反編譯,分析編譯器生成的額外代碼,闡述內部類的實現原理。

內部類;靜態內部類;局部內部類;匿名內部類;外部類

通常情況下Java中類的定義包括屬性和方法,特殊用途下,類中還可以定義類,被包含的類叫做內部類[1]。相對于內部類而言,包含內部類的類叫做外部類。根據內部類在外部類中使用方式不同,又可以分為常規內部類、靜態內部類、局部內部類和匿名內部類四種。以下論述中外部類命名為Outer,內部類命名為Inner。

1 常規內部類

1.1 常規內部類的定義

在外部類中直接定義無static修飾的類,稱為常規內部類。例如:

public class Outer {;private int i=10;;private class Inner{;public void print(){;System.out.println(i); }};public void fun(){;Inner in=new Inner();;in.print();}}。

1.2 常規內部類的使用約束

第一,定義時可以加訪問控制符,public、protected、默認和private均可。第二,不能定義靜態屬性和靜態方法。第三,可以訪問外部類的屬性和方法。第四,外部類可以訪問內部類的所有屬性和方法。

1.3 常規內部類的引用方式

私有的常規內部類只能在外部類內引用,格式為Inner in=new Inner()。對于非私有的常規內部類可以在外部類之外進行引用,格式為:Outer.Inner in=new Outer().new Inner()。

1.4 常規內部類的實現原理

Java編譯器對內部類和外部類是分別進行編譯的,編譯后產生Outer.class和Outer$1Inner.class兩個字節碼文件,外部類能實例化私有常規內部類的根本原因在于編譯器在編譯私有常規內部類時生成了部分附加代碼,通過反編譯技術對Outer$1Inner.class進行反編譯可以查到附加代碼如下:

final Outer this$0;;private Outer$1Inner(){this$0=Outer.this;super();};Outer$1Inner(Outer$1Inner outer$1inner){this();}。

反編譯Outer.class時發現實例化私有常規內部類時的代碼被改為1Inner in=new 1Inner(null),實際上調用的是包可見構造器,包可見構造器內部又調用了私有構造器,因此外部類可以實例化私有常規內部類。因為私有常規內部類通過構造器初始化了外部類引用變量,所以私有常規內部類能夠訪問外部類的屬性和方法,對于能夠訪問外部類私有屬性的原因在于編譯器對外部類私有屬性生成了專門的靜態方法static int access$0(Outer),代碼隱藏不可見,通過在內部類中使用靜態的access$0方法引用外部類中的私有屬性[2]。

2 靜態內部類

2.1 靜態內部類的定義

在外部類中直接定義有static修飾的類,稱為靜態內部類,例如:

public class Outer {;private static int i=10;;private static class Inner{;public void print(){;System.out.println(i); }}};

2.2 靜態內部類的使用約束

只能訪問外部類的靜態屬性和靜態方法,其它約束與常規內部類使用約束基本相同。

2.3 靜態內部類的引用方式

靜態內部類的引用方式同常規內部類的引用方式相同。

2.4 靜態內部類的實現原理

反編譯Outer$1Inner.class時發現編譯器對靜態內部類并不產生外部類引用變量,因此靜態內部類無法得到外部類的引用,所以靜態內部類只能訪問外部類的靜態屬性和靜態方法。

3 局部內部類

3.1 局部內部類的定義

在方法中定義的類,稱為局部內部類,例如:

3.2 局部內部類的使用約束

第一,局部內部類定義時不能加訪問控制符,只能在方法內部使用。第二,局部內部類能訪問外部類的屬性和方法。第三,局部內部類只能訪問包含方法中fnal修飾的變量。

3.3 局部內部類的引用方式

局部內部類只能在方法內部進行引用,使用方式同基本類。

3.4 局部內部類的實現原理

反編譯Outer$1Inner.class時發現編譯器對局部內部類生成“fnal Outer this$0”和“private fnal int val$j”。局部內部類通過外部類引用變量可實現訪問外部類的屬性和方法,val$j是fnal修飾的形參j的一個備份,目的在于方法運行結束時,避免Java垃圾回收器對方法內的資源進行垃圾回收時導致局部內部類在訪問內部資源時查找失敗[3]。

4 匿名內部類

4.1 匿名內部類的定義

只創建一個對象且不用命名的局部內部類,稱為匿名內部類,例如:

4.2 匿名內部類的使用約束

匿名內部類由于沒有類名,因此不能定義構造器,其它使用約束同局部內部類。

4.3 匿名內部類的引用方式

匿名內部類通常以方法的參數形式出現,分為繼承式匿名內部類和接口式匿名內部類兩種。引用方式為new 父類名(){//重寫父類方法}或new 接口名(){//實現接口方法}。

4.4 匿名內部類的實現原理

編譯產生匿名內部類名稱為Outer$1,反編譯后發現生成fnal Outer this$0,證明匿名內部類可以訪問外部類的屬性和方法。

5 結束語

通過反編譯技術的使用,深入研究了Java內部類的實現原理,加深了對內部類定義方式、使用約束和引用方式的認識,提高了對Java技術的應用水平。

[1]張孝祥.Java就業培訓教程[M].北京:清華大學出版社,2003.

[2]郭廣軍,陳代武,王劍波.Java內部類的研究及應用[J].湖南人文科技學院學報,2007(06):32-38.

[3]劉文杰,鄭玉,劉志昊.Java 7實用教程[M].北京:清華大學出版社,2013.

魏鋼(1978-),男,遼寧盤錦人,碩士,講師,主要從事Java Web開發研究。

猜你喜歡
定義方法
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風格”
學習方法
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
山的定義
公務員文萃(2013年5期)2013-03-11 16:08:37
主站蜘蛛池模板: 国产一区二区三区在线观看免费| 日韩av手机在线| 亚洲成人在线免费| 亚洲精品自拍区在线观看| 日韩经典精品无码一区二区| 欧美日韩精品一区二区视频| 一级黄色片网| 亚洲欧美在线综合一区二区三区| 国产亚洲视频免费播放| 国产精品部在线观看| 一区二区三区精品视频在线观看| 国产欧美另类| 女人18毛片久久| 中文字幕 91| 国产精品久久久久久搜索| 亚洲品质国产精品无码| 中文字幕在线看| 天堂网亚洲综合在线| 亚洲天堂免费观看| 免费国产一级 片内射老| 国产一区二区三区在线观看视频| 亚洲资源在线视频| 99久久精品国产综合婷婷| 成人午夜久久| 欧美视频免费一区二区三区| 91无码视频在线观看| 日韩无码视频专区| 国产精品亚欧美一区二区三区 | 尤物成AV人片在线观看| 亚洲av无码人妻| 四虎国产永久在线观看| 色妞www精品视频一级下载| 成人综合在线观看| 黄色网页在线播放| 免费黄色国产视频| 国产成人调教在线视频| 午夜福利亚洲精品| 99re这里只有国产中文精品国产精品| 好吊妞欧美视频免费| 免费观看男人免费桶女人视频| 国产婬乱a一级毛片多女| 久久99蜜桃精品久久久久小说| 欧美日韩国产在线人| 国产91视频免费观看| 日本高清有码人妻| 日韩A级毛片一区二区三区| 国产成人夜色91| 中国一级特黄视频| 久久婷婷五月综合97色| 亚洲最新网址| 国产女人18水真多毛片18精品 | 亚洲aaa视频| 亚洲欧美一区在线| 日韩资源站| 992tv国产人成在线观看| 免费AV在线播放观看18禁强制| 久久久久亚洲精品成人网| 欧美中文字幕一区| 亚洲精品无码日韩国产不卡| 亚洲精品无码高潮喷水A| 国产成人1024精品下载| 中文字幕无码制服中字| 色老二精品视频在线观看| 国产精品免费电影| 91色综合综合热五月激情| 亚洲成年人网| 动漫精品中文字幕无码| 亚洲精品自拍区在线观看| 国产丝袜丝视频在线观看| 伊人久久青草青青综合| www.精品视频| 全部免费毛片免费播放| 澳门av无码| 欧美一级在线看| 精品综合久久久久久97超人该| 一级片免费网站| 色哟哟精品无码网站在线播放视频| 欧美成人综合视频| 一本大道香蕉高清久久| 午夜爽爽视频| 久久青草免费91观看| 日韩不卡免费视频|