finalfinal 對於常量來說意味著值不能改變例如 final int i=這個i的值永遠都是但是對於變量來說又不一樣只是標識這個引用不可被改變例如 final File f=new File(c:\\testtxt)那麼這個f一定是不能被改變的如果f本身有方法修改其中的成員變量例如是否可讀是允許修改的形象的比喻一個女子定義了一個final的老公這個老公的職業和收入都是允許改變的只是這個女人不會換老公而已
實例解釋********
)final變量在內部類中的使用
程序需要在匿名內部類中使用局部變量則局部變量必須聲明為final類型否則會編譯錯誤為什麼必須聲明為final類型呢?這是應為
對於普通變量而言它的作用域是停留在該方法內當方法執行結束該局部變量也就隨之消失但內部類則可能產生隱式的閉包
閉包使得局部變量脫離它所在的方法繼續存在
看下面的例子
public class ClosureTest {
public static void main(String[] args) {
final String str = java ;//定義局部變量
new Thread(new Runnable(){
public void run(){
for(int i= ;i< ; i ){
Systemoutprintln(str i)
try {
Threadsleep() ;
} catch (InterruptedException e) {
eprintStackTrace()
}
}
}
})start() ;
}
}
程序首先定義了一個局部變量str當程序main方法執行完成後str的生命周期就結束了但是子線程還沒有執行結束而且子線程要
使用main中的局部變量str這個時候就擴大了str的作用范圍這個時候如果str沒有被修飾為final類型而可以隨便改變則會引起
極大的混亂因此java編譯器要求所有的內部類訪問的局部變量必須使用final修飾符修飾
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26464.html