摘要:今天刷題的時候遇到了一題關于內(nèi)部類的訪問的問題,發(fā)現(xiàn)自己忘了許多,現(xiàn)在來復習一下。首先,內(nèi)部類的類字節(jié)碼文件名字為。記住一下訪問原則內(nèi)部類相當于外部類的一個成員變量,因此內(nèi)部類可以直接訪問外部類的成員。
今天刷題的時候遇到了一題關于內(nèi)部類的訪問的問題,發(fā)現(xiàn)自己忘了許多,現(xiàn)在來復習一下。
首先,內(nèi)部類的類字節(jié)碼文件名字為Outer$Inner.class。
記住一下訪問原則:
1.內(nèi)部類相當于外部類的一個成員變量,因此內(nèi)部類可以直接訪問外部類的成員。但是注意內(nèi)部類靜態(tài)方法不能訪問外部類非靜態(tài)成員
2.但是外部類如果要訪問內(nèi)部類中的成員,要么內(nèi)部類是靜態(tài)的,跟著外部類一起被加載;要么創(chuàng)建內(nèi)部類的對象,通過對象訪問(想讓外部類進內(nèi)部類里面,總得有內(nèi)部類的“實體”吧,這個“實體”要么是跟外部類一起加載的靜態(tài)內(nèi)部類,要么是新建的內(nèi)部類的對象,無論是哪種,都會在堆中為內(nèi)部類開辟空間,然后才可以訪問到)
例子:
a.外部類訪問靜態(tài)內(nèi)部類的靜態(tài)成員(一路暢通無阻) Outer.Inner.func(); b.外部類訪問靜態(tài)內(nèi)部類的非靜態(tài)成員(一路暢通到內(nèi)部類門口, 發(fā)現(xiàn)里面還沒東西,怎么辦?創(chuàng)建對象?。?//一般方式 Outer.Inner in = new Outer.Inner(); in.func(); //匿名方式 new Outer.Inner().func();//new Outer.Inner()創(chuàng)建出對象,然后調(diào)用對象的func c.外部類訪問非靜態(tài)內(nèi)部類的非靜態(tài)成員(沒對象,內(nèi)部類的門都找不到!乖乖一步步創(chuàng)建對象吧) //一般方式 Outer.Inner in = new Outer().new Inner(); in.func(); //匿名方式 new Outer().new Inner().func();
3.內(nèi)部類如果有靜態(tài)成員,則內(nèi)部類也必須是靜態(tài)的(否則內(nèi)部類成員要隨著外部類加載,發(fā)現(xiàn)內(nèi)部類自己都還沒加載,那這個成員是哪兒跑出來的呢?)
4.內(nèi)部類訪問局部變量時,局部變量必須加final修飾符。(隨著方法運行完畢,局部變量會被釋放,如果此時一個內(nèi)部類還引用該變量則會報錯。說到底就是變量的生命周期比內(nèi)部類實例要短。而final保證這個變量始終指向一個對象,內(nèi)部類就可以放心大膽地引用了。其實犯了和C++一樣的毛?。悍祷亓司植孔兞康囊茫?br>注意:在JDK8版本之中,方法內(nèi)部類中調(diào)用方法中的局部變量,可以不需要修飾為 final,匿名內(nèi)部類也是一樣的,主要是JDK8之后增加了 Effectively final 功能
class Outer{ public static void main(String[] args){ Object obj = new Outer().method(); } Object method(){ int locvar = 1; class Inner{ void displayLocvar(){ System.out.println("locvar = " + locvar); } } Object in = new Inner(); return in;//返回了內(nèi)部類對象,但是該對象依然引用著局部變量 }
}
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/71003.html
面向對象的語言有一個標志,即擁有類的概念,抽象實例對象的公共屬性與方法,基于類可以創(chuàng)建任意多個實例對象,一般具有封裝、繼承、多態(tài)的特性!但JS中對象與純面向對象語言中的對象是不同的,ECMA標準定義JS中對象:無序屬性的集合,其屬性可以包含基本值、對象或者函數(shù)。 我們首選要了解封裝、繼承、多態(tài)又有如何特點 封裝:顧名思義來封裝變量和函數(shù)封裝->特點:高度復用,降低冗余度,更有利于模塊化編程,能夠為...
摘要:前言是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。面對對象基本概述概述是基于面向過程的變成思想,是對面向過程的一種封裝。面對對象開發(fā)就是不斷的創(chuàng)建對象,使用對象,指揮對象做事情。面對對象設計其實就是在管理和維護對象之間的關系。 前言 java是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。 面對對象,主要包括:面向對象思想,類與對象及其使用,對象的內(nèi)存圖,成...
摘要:內(nèi)部類一概述把類定義在另一個類的內(nèi)部,該類就被稱為內(nèi)部類。為什么局部內(nèi)部類訪問局部變量必須加修飾呢因為局部變量是隨著方法的調(diào)用而調(diào)用,使用完畢就消失,而堆內(nèi)存的數(shù)據(jù)并不會立即消失。 內(nèi)部類 (一) 概述 把類定義在另一個類的內(nèi)部,該類就被稱為內(nèi)部類。 舉例:把類Inner定義在類Outer中,類Inner就被稱為內(nèi)部類。 class Outer { class Inner { ...
摘要:可以直接用接口名訪問。其他類也稱為外部類。汽車外部類發(fā)動機內(nèi)部類內(nèi)部類的分類內(nèi)部類分為成員內(nèi)部類與局部內(nèi)部類。我們定義內(nèi)部類時,就是一個正常定義類的過程,同樣包含各種修飾符繼承與實現(xiàn)關系等。并且日常項目的分工也是以包作為邊界。 01final關鍵字概念 * A: 概述 繼承的出現(xiàn)提高了代碼的復用性,并方便開發(fā)。但隨之也有問題,有些類在描述完之后,不想被繼承, ...
閱讀 2877·2021-11-16 11:55
閱讀 2628·2021-09-29 09:34
閱讀 3446·2021-09-01 14:21
閱讀 3781·2019-08-29 12:36
閱讀 706·2019-08-26 10:55
閱讀 3998·2019-08-26 10:20
閱讀 1039·2019-08-23 18:19
閱讀 1205·2019-08-23 17:56