文章目錄
- 面試官問: final 在java中有什么作用
- 面試者回答:
- 1. final修飾變量
- 基本數據類型:
- 示例:
- 對象引用:
- 示例:
- 2. final修飾方法
- 示例:
- 3. final修飾類
- 示例:
- 4. final局部變量和參數
- 示例:
- 總結
面試官問: final 在java中有什么作用
面試者回答:
在Java中,final
關鍵字是一個非常重要的修飾符,它用于指定某個變量的值一旦初始化之后就不能被改變(對于基本數據類型)或者某個對象的引用一旦指向某個對象之后就不能再指向其他對象(對于對象引用)。final
還可以用來修飾類和方法,但其在這些場景下的作用與修飾變量時有所不同。下面詳細解釋 final
在Java中的幾種用途:
1. final修飾變量
基本數據類型:
- 當
final
修飾一個基本數據類型的變量時,這個變量的值一旦被初始化之后就不能被改變。
示例:
final int MAX_VALUE = 100;
// MAX_VALUE = 200; // 這行代碼會編譯錯誤,因為MAX_VALUE是final的
對象引用:
當 final
修飾一個對象引用時,這個引用一旦指向某個對象之后就不能再指向其他對象,但是該對象本身是可以被修改的(如果對象是可變的)。
示例:
final List<String> list = new ArrayList<>();
// list = new ArrayList<>(); // 這行代碼會編譯錯誤,因為list是final的
list.add("Hello"); // 這是允許的,因為list對象本身是可變的
2. final修飾方法
當 final
修飾一個方法時,這個方法不能在子類中被覆蓋(重寫)。這通常用于確保方法的行為在整個繼承鏈中保持不變。
示例:
public class Parent {public final void show() {System.out.println("This is final method");}
}public class Child extends Parent {// @Override // 這行代碼會導致編譯錯誤,因為show()在Parent類中是final的public void show() {System.out.println("This will not override show()");}
}
3. final修飾類
當final
用于修飾一個類時,這個類不能被繼承。這通常用于防止類的繼承,確保類的完整性和封裝性。
示例:
public final class FinalClass {// 類實現
}
在這個例子中,FinalClass
不能被其他類繼承。
4. final局部變量和參數
在方法內部,final
可以用于修飾局部變量和方法參數,這意味著這些變量的引用不能改變。但是,如果局部變量是對象類型,那么final
只保證了引用不變,對象的內容仍然可以修改。
示例:
public void test(final List<Integer> list) {// list = new ArrayList<>(); // 錯誤,不能重新賦值list.add(10); // 正確,改變了list的內容而不是引用
}
在這個例子中,list
的引用不能改變,但是可以改變list
的內容。
總結
final
關鍵字在Java中用于指定某些內容是不可變的,包括變量的值、方法的覆蓋以及類的繼承。- 對于基本數據類型的變量,
final
確保其值不變;對于對象引用,final
確保引用不變但對象本身的狀態可以改變(如果對象是可變的)。 final
方法不能被覆蓋,final
類不能被繼承。- 使用
final
可以提高程序的穩定性和安全性,但也可能導致代碼的靈活性降低。因此,在使用時需要權衡利弊。