日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例

發(fā)布時間:2024/7/23 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

可能使用到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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。