在Java中,final是可與字段類和方法一起使用的access修飾符。當一個方法為final時,它不能被覆蓋。
當變量為最終變量時,其值無法進一步修改。
當類結束時,不能擴展。
無需初始化即可聲明最終變量
如果稍后聲明了最終變量,則無法修改或為其分配值。此外,像實例變量一樣,最終變量將不會使用默認值初始化。
因此,必須在聲明最終變量后初始化它們。
不過,如果您嘗試聲明未初始化的最終變量,則會產生編譯錯誤,提示“變量variable_name未在默認構造函數中初始化”
示例
在下面的Java程序中,Student類包含兩個最終變量name和age,并且它們尚未初始化。public?class?Student?{
public?final?String?name;
public?final?int?age;
public?void?display(){
System.out.println("Name?of?the?Student:?"+this.name);
System.out.println("Age?of?the?Student:?"+this.age);
}
public?static?void?main(String?args[])?{
new?Student().display();
}
}
編譯時錯誤
在編譯時,該程序會產生以下錯誤。
輸出結果Student.java:3:?error:?variable?name?not?initialized?in?the?default?constructor
private?final?String?name;
^
Student.java:4:?error:?variable?age?not?initialized?in?the?default?constructor
private?final?int?age;
^
2?errors
要解決此問題,您需要將聲明的最終變量初始化為-
示例public?class?Student?{
public?final?String?name;
public?final?int?age;
public?Student(){
this.name?=?"Raju";
this.age?=?20;
}
public?void?display(){
System.out.println("Name?of?the?Student:?"+this.name?);
System.out.println("Age?of?the?Student:?"+this.age?);
}
public?static?void?main(String?args[])?{
new?Student().display();
}
}
輸出結果Name?of?the?Student:?Raju
Age?of?the?Student:?20