public class OuterClass {
public InnerClass getInnerClass(final int num,String str2){
return new InnerClass(){
int number = num + 3;
public int getNumber(){
return number;
}
}; /* 注意:分號不能省 */
}
public static void main(String[] args) {
OuterClass out = new OuterClass();
InnerClass inner = out.getInnerClass(2, "chenssy");
System.out.println(inner.getNumber());
}
}
interface InnerClass {
int getNumber();
}
方法中匿名類使用到的局部變量只能用final關鍵字修飾:這是方法和匿名類生命週期的結果--當執行方法getInnerClass後,獲得匿名類對象inner,
這是,方法已經執行完畢,方法的局部變量(num、str2)應該會被jvm銷燬,但是,匿名類對象inner還會存在,還被繼續使用(inner.getNumber()),
這個時候,一個解決的途徑是使用final來修飾,java對於被final修飾的變量,會進行復制,複製品直接作爲局部內部中的數據成員,這樣:當局部內部類訪問局部變量 時,其實真正訪問的是這個局部變量的"複製品"(即:複製了變量棧內存,這個複製品就代表了那個局部變量).因此:當運行棧中的真正的局部變量死亡時,局部內部類對象仍可以 訪問局部變量(其實訪問的是"複製品"),給人的感覺:好像是局部變量的"生命期"延長了.