java中的final
關鍵字用於限制使用者修改變數或重寫一個類或方法。 java final
關鍵字可以在許多上下文中使用。 final
可以是:
final
關鍵字可以應用於變數,沒有值的final
變數稱為空白變數或未初始化的最終變數。 它只能在建構函式中初始化。 空白最終變數也可以是靜態的,它將僅在靜態塊中初始化。 在之後的文章中我們將詳細學習這些。 下面先學習final
關鍵字的基礎知識。
如果將變數設定為final
,則不能更改final
變數的值(它將是常數)。final關鍵字應用有以下幾點需要注意:
final變數的範例
要改變final
變數的值,這是不可能的,因為一個final
變數一次分配一個值永遠不能更改。如下試圖修改 speedlimit 變數的值為 400,這是不允許的。
class Bike9 {
final int speedlimit = 90;// final variable
void run() {
speedlimit = 400; // 不可以修改 final 變數的值
}
public static void main(String args[]) {
Bike9 obj = new Bike9();
obj.run();
}
}// end of class
上面程式碼執行後生成以下結果 -
[編譯錯誤]Compile Time Error
如果任何方法宣告為final
,則不能覆蓋它。
final
方法的範例,下面方法是不能覆蓋的 -
class Bike {
final void run() {
System.out.println("running");
}
}
class Honda extends Bike {
void run() { // final方法,不可以重寫
System.out.println("running safely with 100kmph");
}
public static void main(String args[]) {
Honda honda = new Honda();
honda.run();
}
}
上面程式碼執行後生成以下結果 -
[編譯錯誤]Compile Time Error
如果把任何一個類宣告為final
,則不能擴充套件它。final
類的範例
final class Bike {
}
class Honda1 extends Bike { // 不可以擴充套件 final 類
void run() {
System.out.println("running safely with 100kmph");
}
public static void main(String args[]) {
Honda1 honda = new Honda();
honda.run();
}
}
上面程式碼執行後生成以下結果 -
[編譯錯誤]Compile Time Error
問題:是否可繼承final方法?
答: 是的,final
方法是繼承的,但是不能覆蓋它。 例如:
class Bike {
final void run() {
System.out.println("running...");
}
}
class Honda2 extends Bike {
public static void main(String args[]) {
new Honda2().run();
}
}
上面程式碼執行後生成以下結果 -
Output:running...
問題:什麼是空白或未初始化的final變數?
在宣告時未初始化的final
變數稱為空白final
變數。
如果要在建立一個物件時初始化變數,並且變數在初始化後就不會被改變, 這是非常有用的。 例如員工的PAN CARD
號碼。它只能在建構函式中初始化。
空白final
變數的範例
class Student{
int id;
String name;
final String PAN_CARD_NUMBER;
...
}
問題:可以初始化空白的final變數嗎?
答: 是的,但只能在建構函式中。 例如:
class Bike10 {
final int speedlimit;// blank final variable
Bike10() { // 在建構函式中初始化
speedlimit = 70;
System.out.println(speedlimit);
}
public static void main(String args[]) {
new Bike10();
}
}
上面程式碼執行後生成以下結果 -
70
在宣告時未初始化的靜態final
變數稱為靜態空白final
變數。 它只能在靜態塊中初始化。
靜態空白final變數的範例
class A {
static final int data;// static blank final variable
static {
data = 50;
}
public static void main(String args[]) {
System.out.println(A.data);
}
}
問題:什麼是final引數?
如果將任何引數宣告為final
,則不能更改它的值。
class Bike11 {
int cube(final int n) {
n = n + 2;// can't be changed as n is final
// n*n*n; // 不能修改 n 的值
return n;
}
public static void main(String args[]) {
Bike11 b = new Bike11();
b.cube(5);
}
}
上面程式碼執行後生成以下結果 -
[編譯錯誤]Compile Time Error