Java是一門靜態編譯語言,在程序運行前需要經過編譯、鏈接等過程。在編譯器優化方面,final關鍵字被廣泛應用。本文將從變量、方法、類等角度詳細闡述final關鍵字在Java中的作用。
一、final變量
在Java中,使用final修飾變量表示該變量的值是不可變的,即常量。final關鍵字修飾變量有以下三個特點:
1、final變量必須被賦初始值
public class Demo{
final int num;
public Demo(){
num = 10;
}
}
若未對final變量進行初始化,編譯器會報錯。
2、final變量一旦被賦值,其值無法更改
public static void main(String[] args){
final int num = 10;
num = 20;//編譯器會報錯
}
若試圖對final變量進行修改,編譯器會報錯。
3、final變量用於常量的定義
public class Constants{
public static final double PI = 3.1415926;
}
使用final關鍵字定義一個常量,常量的值在程序運行期間不會發生改變,且使用final定義的常量命名應該按照大寫字母和下劃線的格式,便於閱讀、理解和編寫。
二、final方法
在Java中,使用final關鍵字修飾一個方法表示該方法無法被子類進行重寫。使用final修飾方法,可以保證該方法的行為不被修改。下面是一個使用final修飾的方法:
public class Animal{
public final void eat(){
System.out.println("Animal eats...");
}
}
public class Cat extends Animal{
public void eat(){//編譯器會報錯
System.out.println("Cat eats...");
}
}
使用final修飾的eat方法無法在子類中進行重寫,若編譯器發現在子類中重寫了使用final修飾的方法,會給出編譯錯誤。
三、final類
使用final關鍵字修飾一個類,表示該類無法被繼承。
public final class Animal{
// ...
}
public class Cat extends Animal{//編譯器會報錯
// ...
}
使用final修飾的Animal類無法被繼承,若編譯器發現有子類繼承該類,會給出編譯錯誤。
四、final引用
使用final修飾的引用表示該引用本身無法在指向其他對象,但是對象本身並不是不可變的。
public class Person{
private final Date bornDate;//出生日期
public Person(Date date){
this.bornDate = date;
}
}
public static void main(String[] args){
Date date = new Date();
Person p1 = new Person(date);
date.setTime(System.currentTimeMillis());
Person p2 = new Person(date);
}
在上面代碼中,雖然bornDate使用了final關鍵字修飾,但是對於bornDate指向的對象date而言,從System.currentTimeMillis()
獲取的時間是不同的,因此p1和p2的出生日期是不同的。
五、final和static的結合使用
在Java中,可以結合使用final和static關鍵字定義一個靜態常量。使用static修飾的成員屬於類本身,而不是某個具體的對象,即可以被多個對象共享;使用final修飾的成員在初始化之後,其值不再改變。
public class Constants{
public static final double PI = 3.1415926;
}
在使用類的常量時,不需要創建類的實例,直接使用類名進行調用即可:
public static void main(String[] args){
double circleLength = Constants.PI * 2;
}
六、final的優化作用
在Java中,final關鍵字的使用可以幫助編譯器進行一些優化工作。final修飾的變量在編譯時會被直接替換成具體的值;final修飾的方法在執行時會被直接調用而不進行虛擬調用。這樣做可以提高程序的執行效率。
七、總結
本文從變量、方法、類等角度詳細闡述了final關鍵字在Java中的作用。final修飾的變量表示該變量的值為常量;final修飾的方法表示該方法無法被子類重寫;final修飾的類無法被子類繼承;final修飾的引用本身不可被修改,但是對象本身是可變的;結合使用final和static可以定義靜態常量;使用final關鍵字在編譯器優化方面具有重要作用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/192690.html