java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例
可能使用到final的情況有3種:數(shù)據(jù)、方法和類。
一、final數(shù)據(jù)
對于基本類型,final使數(shù)值恒定不變;而對于對象引用,final使引用恒定不變。一旦引用被初始化指向一個對象,就無法把它改為指向另一個對象。然而,對象本身卻是可以被修改的。
class Value{
int i;
public Value(int i){this.i=i;}
}
public class FinalData{
private final int valueOne=1;
private int valueTwo=2;
private final Value v1=new Value(11);
private Value v2=new Value(22);
public static void main(String[] args){
//! valueOne=3; 錯誤,靜態(tài)不能更改
valueTwo=3; //可以更改
//! v1=new Value(33); 不可更改引用
v1.i+=1; //可以更改內(nèi)容
v2=new Value(33); //非final,可以更改引用
}
}
注:帶有恒定初始值(即,編譯器常量)的final static 基本類型全用大寫字母命名,并且字與字之間用下劃線隔開。
public static final int VALUE_ONE=3;
必須在域的定義處或者每個構(gòu)造器中用表達式對final進行賦值,這正是final域在使用前總是被初始化的原因所在。
二、final方法
使用final方法的原因是:把方法鎖住,以防任何繼承類修改它的含義,這是出于設(shè)計的考慮:想要確保在繼承中使方法行為保持一致,并且不會被覆蓋。
類中所有的private方法都隱式地指定為是final的。由于無法取用final方法,所以也就無法覆蓋它。
class WithFinals{
private final void f(){print("Hello World");}
private void g(){ print("WithFinals.g()");}
}
class OverridingPrivate extends WithFinals{
private final void f(){ print("OverridingPrivate.f()");}
private void g(){ print("OverridingPrivate.g()")}
}
class OverridingPrivate2 extends OverridingPrivate{
public final void f(){ print("OverrindingPrivate2.f()")}
public void g(){ print("OverridingPrivate2.g()")}
}
public class FinalOverriding{
public static void main(String[] args){
OverridingPrivate2 op2=new OverridingPrivate2();
op2.f();
op2.g();
//向上轉(zhuǎn)型
OverridingPrivate op1=op2;
//但是你不能調(diào)用下面的方法
//! op1.f();
//! op1.g();
//向上轉(zhuǎn)型
WithFinals wf=op2;
//同樣不能調(diào)用下面的方法
//!wf.f();
//!wf.g();
}
}
/* OverridingPrivate2.f() OverridingPrivate2.g() */
“覆蓋”只有在某方法是基類的接口的一部分時才會出現(xiàn)。即,必須能將一個對象向上轉(zhuǎn)型為它的基本類型并調(diào)用相同的方法。如果某方法為private,它就不是基類的接口的一部分。它僅是一些隱藏于類中的程序代碼,只不過是具有相同的名字。如果在導(dǎo)出類中以相同的名稱生成一個public、protected或包訪問權(quán)限方法,那么該方法并沒有覆蓋基類的方法,僅是生成了一個新的方法。
三、final類
當(dāng)某個類的整體定義為final時,就表明了你不打算繼承該類,而且也不允許別人這樣做。
final class Demo{
int i=1;
final int j=2;
void f(){}
}
final類不能被繼承。final類的域可以根據(jù)個人意愿選擇是或者不是final,然而,由于final類禁止繼承,所以final類中的所有方法都隱式指定為final的,因為無法覆蓋它們。在final類中可以給個方法添加final修飾詞,但這不會增添任何意義。
PS:總結(jié)自《Thinking in Java Fourth Edition》
總結(jié)
以上是生活随笔為你收集整理的java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符串对齐_Python -
- 下一篇: python中setup函数的用法_py