成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

內(nèi)部類的訪問特點

jzman / 827人閱讀

摘要:今天刷題的時候遇到了一題關于內(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

相關文章

  • Java 面向對象

    摘要:自從轉到前段,差不多有一年時間沒有動了,今天老弟問我關于的面向對象,自己不敢直接回答了,也許自己真的應該去做相關的考究了。要有父類引用指向子類對象。外部類要訪問內(nèi)部類的成員,必須要建立內(nèi)部類的對象。 自從轉到前段,差不多有一年時間沒有動Java了,今天老弟問我關于Java的面向對象,自己不敢直接回答了,也許自己真的應該去做相關的考究了。然后在告訴他吧,記在這里當做一個筆記吧。  什么...

    cncoder 評論0 收藏0
  • 解釋JS中的靜態(tài)方法、公有方法、私有方法和特權方法

    面向對象的語言有一個標志,即擁有類的概念,抽象實例對象的公共屬性與方法,基于類可以創(chuàng)建任意多個實例對象,一般具有封裝、繼承、多態(tài)的特性!但JS中對象與純面向對象語言中的對象是不同的,ECMA標準定義JS中對象:無序屬性的集合,其屬性可以包含基本值、對象或者函數(shù)。 我們首選要了解封裝、繼承、多態(tài)又有如何特點 封裝:顧名思義來封裝變量和函數(shù)封裝->特點:高度復用,降低冗余度,更有利于模塊化編程,能夠為...

    wizChen 評論0 收藏0
  • java學習(三) —— 面對對象

    摘要:前言是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。面對對象基本概述概述是基于面向過程的變成思想,是對面向過程的一種封裝。面對對象開發(fā)就是不斷的創(chuàng)建對象,使用對象,指揮對象做事情。面對對象設計其實就是在管理和維護對象之間的關系。 前言 java是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。 面對對象,主要包括:面向對象思想,類與對象及其使用,對象的內(nèi)存圖,成...

    褰辯話 評論0 收藏0
  • 什么是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 { ...

    Drummor 評論0 收藏0
  • 1、final 關鍵字 2、static 關鍵字 3、匿名對象 4、內(nèi)部類 5、包的聲明與訪問 6、

    摘要:可以直接用接口名訪問。其他類也稱為外部類。汽車外部類發(fā)動機內(nèi)部類內(nèi)部類的分類內(nèi)部類分為成員內(nèi)部類與局部內(nèi)部類。我們定義內(nèi)部類時,就是一個正常定義類的過程,同樣包含各種修飾符繼承與實現(xiàn)關系等。并且日常項目的分工也是以包作為邊界。 01final關鍵字概念 * A: 概述 繼承的出現(xiàn)提高了代碼的復用性,并方便開發(fā)。但隨之也有問題,有些類在描述完之后,不想被繼承, ...

    鄒立鵬 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<