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

Java為什么匿名內(nèi)部類參數(shù)引用需要用final進(jìn)行修飾?

 更新時(shí)間:2019年04月10日 11:59:26   作者:yangyongUestc  
今天小編就為大家分享一篇關(guān)于Java為什么匿名內(nèi)部類參數(shù)引用需要用final進(jìn)行修飾?,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

事實(shí)上,除了匿名內(nèi)部類參數(shù),方法和作用域內(nèi)的內(nèi)部類內(nèi)部使用的外部變量也必須是final 的。原因大致總結(jié)一下:

簡(jiǎn)單解釋就是:

方法中的局部變量的生命周期很短,方法結(jié)束后變量就要被銷毀,加上final是為了延長(zhǎng)變量的生命周期。

進(jìn)一步解釋:

內(nèi)部類通常都含有回調(diào),引用那個(gè)匿名內(nèi)部類的函數(shù)執(zhí)行完了就沒了,所以內(nèi)部類中引用外面的局部變量需要是final的,這樣在回調(diào)的時(shí)候才能找到那個(gè)變量,而如果是外圍類的成員變量就不需要是final的,因?yàn)閮?nèi)部類本身都會(huì)含有一個(gè)外圍了的引用(外圍類.this),所以回調(diào)的時(shí)候一定可以訪問(wèn)到。

程序示例:

private Animator createAnimatorView(final View view, final int position) {
    MyAnimator animator = new MyAnimator();
    animator.addListener(new AnimatorListener() {
      @Override
      public void onAnimationEnd(Animator arg0) {
        Log.d(TAG, "position=" + position); 
      }
    });
    return animator;
  }

匿名內(nèi)部類回調(diào)里訪問(wèn)position的時(shí)候createAnimatorView()早就執(zhí)行完了,position如果不是final的,回調(diào)的時(shí)候肯定就無(wú)法獲取它的值了,因?yàn)榫植孔兞吭诤瘮?shù)執(zhí)行完了以后就被回收了。所以java干脆把這樣的變量設(shè)計(jì)成final,一旦初始化,就必須不能改變!這樣保證任何時(shí)候進(jìn)行回調(diào)都能得到所需的值。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

最新評(píng)論

吴江市| 武清区| 平顺县| 竹山县| 武安市| 南安市| 闸北区| 东乌珠穆沁旗| 河池市| 夏河县| 榆社县| 本溪| 叶城县| 磴口县| 红河县| 沂源县| 青铜峡市| 汉沽区| 屏山县| 建始县| 安国市| 郸城县| 鄂尔多斯市| 喀喇沁旗| 榆林市| 逊克县| 新乡县| 抚顺县| 海阳市| 宝兴县| 宁强县| 秦皇岛市| 明光市| 商南县| 蒙自县| 长白| 平定县| 溧阳市| 淮阳县| 永平县| 军事|