Java final關鍵字
java中的final
關鍵字用於限制用戶修改變量或重寫一個類或方法。 java final
關鍵字可以在許多上下文中使用。 final
可以是:
- 變量
- 方法
- 類
final
關鍵字可以應用於變量,沒有值的final
變量稱爲空白變量或未初始化的最終變量。 它只能在構造函數中初始化。 空白最終變量也可以是靜態的,它將僅在靜態塊中初始化。 在之後的文章中我們將詳細學習這些。 下面先學習final
關鍵字的基礎知識。
1. Java 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
2. Java final方法
如果任何方法聲明爲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
3. Java final類
如果把任何一個類聲明爲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
變量。 它只能在靜態塊中初始化。
靜態空白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