java在寫方法時,為什麼有的方法參數用final修飾?
還有就是內部類存在的意義是什麼?
也就是說方法中的內部類和類中的內部類各有什麼應用場景(請有實戰經驗的大神各自舉個例子)?
//問題補充(關於方法中的內部類)
我的意思是:
pubic class TestClass{
public void fun(){
public class Test1{
//........
}
}
}
為了實現一些內容,常常需要這麼玩:
public void test() {
Comparable c = new Comparable(){
@Override
public int compareTo(Object o) {
return 0;
}
};
}
你所看到的是實現了一個接口(用Comparable為例)的匿名類,現在,提出了一個需求:方法中有一個局部變量a,這個匿名類需要實現將別的值和這個方法中的局部變量值作比較。
這樣的方法使用存在著固有問題:
public void test() {
String str = new String("進行比較");
Comparable<String> c = new Comparable<String>(){
public Object comparing;
@Override
public int compareTo(String o) {
return str.compareTo(o);
}
};
str = new String("值改變了");
c.compareTo("進行比較");
}
//警告:這是一段錯誤的代碼
這其中的邏輯漏洞在於:方法中的局部變量已經改變了指向,調用方法時的那個str是該指向"進行比較"還是"值改變了"呢?
c語言的指針用法可以很明確的傳達這些信息,但Java拋棄了指針,這個問題就必須用另一種方式進行明確。
final 修飾符的含義是,這個變量所指向的信息是不可修改的。也就是說
final String str = new String("進行比較");
str = new String("值改變了");
//警告:這是一段錯誤的代碼
這兩條語句本身就是矛盾的,編譯器會直接阻止這種賦值語法。
這樣,匿名內部類的方法中取用的變量就一定是定義時的那個值,也就不再害怕因為變量改變指向導致語法邏輯不清晰。
同樣的,final修飾符也可以掛在參數上,意義和局部變量是一樣的。
簡單地說,final修飾符是為了在匿名對象的方法中使用此變量