国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于 final 的奇怪問題

2019-11-18 11:33:34
字體:
來源:轉載
供稿:網友

[問題]
我們知道: 在java 中,若內部類需要引用外部類的變量,則外部類的變量必須定義為final類型的.但在編碼中,偶
爾發現在方法中的匿名內部類里就是可以訪問外部類的非 final 變量,并且改變其值.

[代碼分析]
讓我們看看代碼,代碼中注重外部類CounterTimer 中的非final類型 int  times,可以在CounterTimer類的方
法 toStart()中,直接引用并改變其值.

代碼功能:間隔2秒輸出一個累次減小的數字,待到數字減為0,程序退出。

import java.util.Timer;
import java.util.TimerTask;

public class CounterTimer {
    //減少次數
    PRivate int times;
    private Timer timer;
    public CounterTimer(int times) {
         this.times = times;
         timer = new Timer();
   }

   public void toStart() {
        //匿名內部類
       timer.schedule(new TimerTask(){
         public void run() {
            if(times > 0)
             System.out.println(times — );
            else
              toStop();
         }
      },0,2000);
   }

   public void toStop() {
       timer.cancel();
   }

    public static void main(String args[]){
         CounterTimer ct = newCounterTimer(5);
         ct.toStart();
     }
}

請再看一例:
定義了方法huhu()
public class TestFinal {
    //注重不是static final int var
    static int var = 10;
    public static void huhu() {
       (new A() {
           public voidtoPrint() {
               System.out.println( Integer.toString(++var));
           }
        }).toPrint();
     }

   public static void main(String[] args) {
       huhu();
   }
}

class A {
    public void toPrint() {
    }
}
輸出結果:11

[結論]
呵呵,寫到這里 可以有個小結了:在外部類的方法中創建的匿名內部類,可以引用外部類的非final 變量,并修改:)

[其他]
至于,是不是非得是匿名內部類才可以引用或者,對非primitive 類型的數據可否引用,沒有深究.



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛南县| 正蓝旗| 广元市| 嘉黎县| 密云县| 南昌县| 襄垣县| 武功县| 扬州市| 晋宁县| 汾西县| 从化市| 蕉岭县| 延长县| 柳州市| 清镇市| 东安县| 射阳县| 扬州市| 玛沁县| 平乐县| 牟定县| 涟水县| 林西县| 永丰县| 西昌市| 清徐县| 尤溪县| 武冈市| 时尚| 黑山县| 北碚区| 和龙市| 南京市| 马鞍山市| 乡宁县| 淮滨县| 十堰市| 娄烦县| 从化市| 汨罗市|