jdk-1.8新特性學習筆記

dav2100發表於2021-09-09

問:區域性內部類在訪問他所在的方法中區域性變數必須用final修飾為什麼?
答:因為當呼叫這個方法時,區域性變數如果沒有用final修飾,他的生命週期和方法的生命週期是一樣的,這個區域性變數也會消失,那麼如果區域性類物件還沒有馬上消失想用這個區域性變數,就沒有了。如果用final修飾會在類載入的時候進入常量池,即使方法彈棧,常量池的常量還在,也可以繼續使用。

@Test    public void jdk18(){        Demo d = new Demo();        System.out.println("-------1.8-新特新-------");        d.print();        Inter.method();//        Demo d = new Demo();          d.run();    }}interface Inter {    public default void print() {        System.out.println("Hello World");    }    public static void method() {        System.out.println("static method");    }}class Demo implements Inter {    public void run() {        int num = 10;                           //JDK8,前面的final可以省略        class Inner {            public void fun() {                System.out.println(num);            }        }        Inner i = new Inner();        i.fun();    }}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4479/viewspace-2817716/,如需轉載,請註明出處,否則將追究法律責任。

相關文章