java中的final
關(guān)鍵字用于限制用戶修改變量或重寫一個(gè)類或方法。 java final
關(guān)鍵字可以在許多上下文中使用。 final
可以是:
final
關(guān)鍵字可以應(yīng)用于變量,沒有值的final
變量稱為空白變量或未初始化的最終變量。 它只能在構(gòu)造函數(shù)中初始化。 空白最終變量也可以是靜態(tài)的,它將僅在靜態(tài)塊中初始化。 在之后的文章中我們將詳細(xì)學(xué)習(xí)這些。 下面先學(xué)習(xí)final
關(guān)鍵字的基礎(chǔ)知識(shí)。
如果將變量設(shè)置為final
,則不能更改final
變量的值(它將是常量)。final關(guān)鍵字應(yīng)用有以下幾點(diǎn)需要注意:
final變量的示例
要改變final
變量的值,這是不可能的,因?yàn)橐粋€(gè)final
變量一次分配一個(gè)值永遠(yuǎn)不能更改。如下試圖修改 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
上面代碼執(zhí)行后生成以下結(jié)果 -
[編譯錯(cuò)誤]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();
}
}
上面代碼執(zhí)行后生成以下結(jié)果 -
[編譯錯(cuò)誤]Compile Time Error
如果把任何一個(gè)類聲明為final
,則不能擴(kuò)展它。final
類的示例
final class Bike {
}
class Honda1 extends Bike { // 不可以擴(kuò)展 final 類
void run() {
System.out.println("running safely with 100kmph");
}
public static void main(String args[]) {
Honda1 honda = new Honda();
honda.run();
}
}
上面代碼執(zhí)行后生成以下結(jié)果 -
[編譯錯(cuò)誤]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();
}
}
上面代碼執(zhí)行后生成以下結(jié)果 -
Output:running...
問題:什么是空白或未初始化的final變量?
在聲明時(shí)未初始化的final
變量稱為空白final
變量。
如果要在創(chuàng)建一個(gè)對(duì)象時(shí)初始化變量,并且變量在初始化后就不會(huì)被改變, 這是非常有用的。 例如員工的PAN CARD
號(hào)碼。它只能在構(gòu)造函數(shù)中初始化。
空白final
變量的示例
class Student{
int id;
String name;
final String PAN_CARD_NUMBER;
...
}
問題:可以初始化空白的final變量嗎?
答: 是的,但只能在構(gòu)造函數(shù)中。 例如:
class Bike10 {
final int speedlimit;// blank final variable
Bike10() { // 在構(gòu)造函數(shù)中初始化
speedlimit = 70;
System.out.println(speedlimit);
}
public static void main(String args[]) {
new Bike10();
}
}
上面代碼執(zhí)行后生成以下結(jié)果 -
70
在聲明時(shí)未初始化的靜態(tài)final
變量稱為靜態(tài)空白final
變量。 它只能在靜態(tài)塊中初始化。
靜態(tài)空白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參數(shù)?
如果將任何參數(shù)聲明為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);
}
}
上面代碼執(zhí)行后生成以下結(jié)果 -
[編譯錯(cuò)誤]Compile Time Error