亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

內(nèi)部類訪問局部變量的時(shí)候,為什么變量必須加上final修飾

馬永翠 / 2781人閱讀

摘要:局部內(nèi)部類訪問局部變量的機(jī)制在中,類是封裝的,內(nèi)部類也不例外。我們看到的內(nèi)部類訪問局部變量實(shí)際上只是訪問了自己的成員屬性而已,這和類的封裝性是一致的。

這里的局部變量就是在類方法中的變量,能訪問方法中變量的類當(dāng)然也是局部內(nèi)部類了。
我們都知道,局部變量在所處的函數(shù)執(zhí)行完之后就釋放了,但是內(nèi)部類對象如果還有引用指向的話它是還存在的。例如下面的代碼:

class Outer{                                                                       
        public static void main(String[] args){
                Outer out = new Outer();
                Object obj = out.method();
        }   
            
        Object method(){
                int locvar = 1;
                class Inner{
                        void displayLocvar(){
                                System.out.println("locvar = " + locvar);
                        }
                }
                Object in = new Inner();
                return in; 
        }
}

當(dāng)out.method()方法執(zhí)行結(jié)束后,局部變量 locvar 就消失了,但是在method()方法中 obj in = new Inner() 產(chǎn)生的 in 對象還存在引用obj,這樣對象就訪問了一個(gè)不存在的變量,是不允許的。這種矛盾是由局部內(nèi)部類可以訪問局部變量但是局部內(nèi)部類對象和局部變量的生命周期不同而引起的。

局部內(nèi)部類訪問局部變量的機(jī)制

在java中,類是封裝的,內(nèi)部類也不例外。我們知道,非靜態(tài)內(nèi)部類能夠訪問外部類成員是因?yàn)樗钟型獠款悓ο蟮囊?Outer.this, 就像子類對像能夠訪問父類成員是持有父類對象引用super一樣。局部內(nèi)部類也和一般內(nèi)部類一樣,只持有了Outer.this,能夠訪問外部類成員,但是它又是如何訪問到局部變量的呢?

實(shí)際上java是將局部變量作為參數(shù)傳給了局部內(nèi)部類的構(gòu)造函數(shù),而將其作為內(nèi)部類的成員屬性封裝在了類中。我們看到的內(nèi)部類訪問局部變量實(shí)際上只是訪問了自己的成員屬性而已,這和類的封裝性是一致的。那么上面的代碼實(shí)際上是這樣:
Object method(){
                int locvar = 1;
                class Inner{
                    private int obj;
                    public Inner(int obj){
                        this.obj = obj;
                    }
                        void displayLocvar(){
                                System.out.println("locvar = " + locvar);
                        }
                }
                Object in = new Inner(locvar);  //將locvar作為參數(shù)傳給構(gòu)造,以初始話成員
                return in; 
        }

那么問題又來了,我們寫代碼的目的是在內(nèi)部類中直接控制局部變量和引用,但是java這么整我們就不高興了,我在內(nèi)部類中整半天想著是在操作外部變量,結(jié)果你給整個(gè)副本給我,我搞半天丫是整我自己的東西???要是java不這么整吧,由破壞了封裝性--------你個(gè)局部內(nèi)部類牛啊,啥都沒有還能看局部變量呢。這不是java風(fēng)格,肯定不能這么干。這咋整呢?
想想,類的封裝性咱們一定是要遵守的,不能破壞大局啊。但又要保證兩個(gè)東西是一模一樣的,包括對象和普通變量,那就使用final嘛,當(dāng)傳遞普通變量的之前我把它變成一個(gè)常量給你,當(dāng)傳遞引用對象的時(shí)候加上final就聲明了這個(gè)引用就只能指著這一個(gè)對象了。這樣就保證了內(nèi)外統(tǒng)一。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/65306.html

相關(guān)文章

  • 探究final在java中作用

    摘要:關(guān)鍵字的字面意思是最終的不可修改的這似乎是一個(gè)看見名字就大概能知道怎么用的語法但你是否有深究過在各個(gè)場景中的具體使用方法注意事項(xiàng)以及背后涉及的設(shè)計(jì)思想呢一修飾變量基礎(chǔ)修飾基本數(shù)據(jù)類型變量和引用數(shù)據(jù)類型變量相信大家都具備基本的常識被修飾的變量 final關(guān)鍵字的字面意思是最終的, 不可修改的. 這似乎是一個(gè)看見名字就大概能知道怎么用的語法, 但你是否有深究過final在各個(gè)場景中的具體使用方法...

    Baaaan 評論0 收藏0
  • 探究final在java中作用

    摘要:關(guān)鍵字的字面意思是最終的不可修改的這似乎是一個(gè)看見名字就大概能知道怎么用的語法但你是否有深究過在各個(gè)場景中的具體使用方法注意事項(xiàng)以及背后涉及的設(shè)計(jì)思想呢一修飾變量基礎(chǔ)修飾基本數(shù)據(jù)類型變量和引用數(shù)據(jù)類型變量相信大家都具備基本的常識被修飾的變量 final關(guān)鍵字的字面意思是最終的, 不可修改的. 這似乎是一個(gè)看見名字就大概能知道怎么用的語法, 但你是否有深究過final在各個(gè)場景中的具體使用方法...

    番茄西紅柿 評論0 收藏0
  • 探究final在java中作用

    摘要:關(guān)鍵字的字面意思是最終的不可修改的這似乎是一個(gè)看見名字就大概能知道怎么用的語法但你是否有深究過在各個(gè)場景中的具體使用方法注意事項(xiàng)以及背后涉及的設(shè)計(jì)思想呢一修飾變量基礎(chǔ)修飾基本數(shù)據(jù)類型變量和引用數(shù)據(jù)類型變量相信大家都具備基本的常識被修飾的變量 final關(guān)鍵字的字面意思是最終的, 不可修改的. 這似乎是一個(gè)看見名字就大概能知道怎么用的語法, 但你是否有深究過final在各個(gè)場景中的具體使用方法...

    番茄西紅柿 評論0 收藏0
  • 1、final 關(guān)鍵字 2、static 關(guān)鍵字 3、匿名對象 4、內(nèi)部 5、包聲明與訪問 6、

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

    鄒立鵬 評論0 收藏0
  • java面向?qū)ο?下)

    內(nèi)部類 內(nèi)部類主要作用 內(nèi)部類提供了更好的封裝,可以吧內(nèi)部類隱藏在外部類之內(nèi),不允許同一個(gè)包中的其他類訪問該類。 內(nèi)部類成員可以直接訪問外部類的私有數(shù)據(jù),因?yàn)閮?nèi)部類被當(dāng)成其外部類成員,同一個(gè)類的成員之間可以互相訪問,但外部類不能訪問內(nèi)部類的實(shí)現(xiàn)細(xì)節(jié)。 匿名內(nèi)部類適合用于創(chuàng)建那些僅需要使用一次的類。 定義內(nèi)部類與外部類的語法大致相同,內(nèi)部類除需要定義在其他類里面之外,還有兩點(diǎn)區(qū)別: 內(nèi)...

    awesome23 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<