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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

final的用法

發(fā)布時間:2023/12/19 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 final的用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

final?

根據(jù)程序上下文環(huán)境,Java關(guān)鍵字final這是無法改變的或者終態(tài)的含義,它可以修飾非抽象類、非抽象類成員方法和變量。你可能出于兩種理解而需要阻止改變:設(shè)計或效率。

final類不能被繼承,沒有子類,final類中的方法默認是final的。

final方法不能被子類的方法覆蓋,但可以被繼承。

final成員變量表示常量,只能被賦值一次,賦值后值不再改變。

final不能用于修飾構(gòu)造方法。

注意:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法默認是final類型的。

?

1final? 

final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,默認都是final的。在設(shè)計類時候,如果這個類不需要有子類,類的實現(xiàn)細節(jié)不允許改變,并且確信這個類不會載被擴展,那么就設(shè)計為final類。

?

2final方法?

如果一個類不允許其子類覆蓋某個方法,則可以把這個方法聲明為final方法。

使用final方法的原因有二:

第一、把方法鎖定,防止任何繼承類修改它的意義和實現(xiàn)。

第二、高效。編譯器在遇到調(diào)用final方法時候會轉(zhuǎn)入內(nèi)嵌機制,大大提高執(zhí)行

例如:

public?class?TestFinal {

public?void?f1() {

System.out.println("f1");

}

?

// 無法被子類覆蓋的方法

public?final?void?f2() {

System.out.println("f2");

}

?

public?void?f3() {

System.out.println("f3");

}

?

private?void?f4() {

System.out.println("f4");

}

}

public?class?TestFinal2 extends?TestFinal {

public?void?f1() {

System.out.println("Test1父類方法f1被覆蓋!");

}

?

public?static?void?main(String[] args) {

TestFinal2 t = new?TestFinal2();

t.f1();

t.f2(); // 調(diào)用從父類繼承過來的final方法

t.f3(); // 調(diào)用從父類繼承過來的方法

// t.f4(); // 調(diào)用失敗,無法從父類繼承獲

}

}

?

3final變量(常量)

final修飾的成員變量表示常量,值一旦給定就無法改變!  

final修飾的變量有三種:靜態(tài)變量、實例變量和局部變量,分別表示三種類型的常量。  

從下面的例子中可以看出,一旦給final變量初值后,值就不能再改變了。  另外,final變量定義的時候,可以先聲明,而不給初值,這中變量也稱為final空白,無論什么情況,編譯器都確保空白final在使用之前必須被初始化。但是,final空白在final關(guān)鍵字final的使用上提供了更大的靈活性,為此,一個類中的final數(shù)據(jù)成員就可以實現(xiàn)依對象而有所不同,卻有保持其恒定不變的特征。

package?testfinal;

?

public?class?TestFinal4 {

private?final?String S?= "final實例變量S";

private?final?int?A?= 100;

public?final?int?B?= 90;

public?static?final?int?C?= 80;

private?static?final?int?D?= 70;

public?final?int?E; // final空白,必須在初始化對象的時候賦初值

?

public?TestFinal4(int?x) {

E?= x;

}

?

private?void?test() {

System.out.println(new?TestFinal4(1).A);

System.out.println(TestFinal4.C);

System.out.println(TestFinal4.D);

}

?

public?void?test2() {

final?int?a; // final空白,在需要的時候才賦值

final?int?b = 4; // 局部常量--final用于局部變量的情形

final?int?c; // final空白,一直沒有給賦值.

a = 3;

// a=4; 出錯,已經(jīng)給賦過值了.

// b=2; 出錯,已經(jīng)給賦過值了. } }?

}

?

public?static?void?main(String[] args) {

TestFinal4 t = new?TestFinal4(2);

// t.A = 101; // 出錯,final變量的值一旦給定就無法改變

// t.B = 91; // 出錯,final變量的值一旦給定就無法改變

// t.C = 81; // 出錯,final變量的值一旦給定就無法改變

// t.D = 71; // 出錯,final變量的值一旦給定就無法改變

System.out.println(t.A);

System.out.println(t.B);

System.out.println(t.C); // 不推薦用對象方式訪問靜態(tài)字段

System.out.println(t.D); // 不推薦用對象方式訪問靜態(tài)字段

System.out.println(TestFinal4.C);

System.out.println(TestFinal4.D);

// System.out.println(TestFianl3.E); // 出錯,因為E為final空白,依據(jù)不同對象值有所不同.

System.out.println(t.E);

TestFinal4 t1 = new TestFinal4(3);

????System.out.println(t1.E); // final空白變量E依據(jù)對象的不同而不同 }

}

4final參數(shù)

當函數(shù)參數(shù)為final類型時,你可以讀取使用該參數(shù),但是無法改變該參數(shù)的值。

package?testfinal;

?

public?class?TestFinal3 {

public?static?void?main(String[] args) {

new?TestFinal3().f1(2);

}

?

public?void?f1(final?int?i) {

// i++;

//i是final類型的,值不允許改變的.

System.out.print(i);

}

}

?

?

final?

根據(jù)程序上下文環(huán)境,Java關(guān)鍵字final這是無法改變的或者終態(tài)的含義,它可以修飾非抽象類、非抽象類成員方法和變量。你可能出于兩種理解而需要阻止改變:設(shè)計或效率。

final類不能被繼承,沒有子類,final類中的方法默認是final的。

final方法不能被子類的方法覆蓋,但可以被繼承。

final成員變量表示常量,只能被賦值一次,賦值后值不再改變。

final不能用于修飾構(gòu)造方法。

注意:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法默認是final類型的。

?

1final? 

final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,默認都是final的。在設(shè)計類時候,如果這個類不需要有子類,類的實現(xiàn)細節(jié)不允許改變,并且確信這個類不會載被擴展,那么就設(shè)計為final類。

?

2final方法?

如果一個類不允許其子類覆蓋某個方法,則可以把這個方法聲明為final方法。

使用final方法的原因有二:

第一、把方法鎖定,防止任何繼承類修改它的意義和實現(xiàn)。

第二、高效。編譯器在遇到調(diào)用final方法時候會轉(zhuǎn)入內(nèi)嵌機制,大大提高執(zhí)行

例如:

public?class?TestFinal {

public?void?f1() {

System.out.println("f1");

}

?

// 無法被子類覆蓋的方法

public?final?void?f2() {

System.out.println("f2");

}

?

public?void?f3() {

System.out.println("f3");

}

?

private?void?f4() {

System.out.println("f4");

}

}

public?class?TestFinal2 extends?TestFinal {

public?void?f1() {

System.out.println("Test1父類方法f1被覆蓋!");

}

?

public?static?void?main(String[] args) {

TestFinal2 t = new?TestFinal2();

t.f1();

t.f2(); // 調(diào)用從父類繼承過來的final方法

t.f3(); // 調(diào)用從父類繼承過來的方法

// t.f4(); // 調(diào)用失敗,無法從父類繼承獲

}

}

?

3final變量(常量)

final修飾的成員變量表示常量,值一旦給定就無法改變!  

final修飾的變量有三種:靜態(tài)變量、實例變量和局部變量,分別表示三種類型的常量。  

從下面的例子中可以看出,一旦給final變量初值后,值就不能再改變了。  另外,final變量定義的時候,可以先聲明,而不給初值,這中變量也稱為final空白,無論什么情況,編譯器都確保空白final在使用之前必須被初始化。但是,final空白在final關(guān)鍵字final的使用上提供了更大的靈活性,為此,一個類中的final數(shù)據(jù)成員就可以實現(xiàn)依對象而有所不同,卻有保持其恒定不變的特征。

package?testfinal;

?

public?class?TestFinal4 {

private?final?String S?= "final實例變量S";

private?final?int?A?= 100;

public?final?int?B?= 90;

public?static?final?int?C?= 80;

private?static?final?int?D?= 70;

public?final?int?E; // final空白,必須在初始化對象的時候賦初值

?

public?TestFinal4(int?x) {

E?= x;

}

?

private?void?test() {

System.out.println(new?TestFinal4(1).A);

System.out.println(TestFinal4.C);

System.out.println(TestFinal4.D);

}

?

public?void?test2() {

final?int?a; // final空白,在需要的時候才賦值

final?int?b = 4; // 局部常量--final用于局部變量的情形

final?int?c; // final空白,一直沒有給賦值.

a = 3;

// a=4; 出錯,已經(jīng)給賦過值了.

// b=2; 出錯,已經(jīng)給賦過值了. } }?

}

?

public?static?void?main(String[] args) {

TestFinal4 t = new?TestFinal4(2);

// t.A = 101; // 出錯,final變量的值一旦給定就無法改變

// t.B = 91; // 出錯,final變量的值一旦給定就無法改變

// t.C = 81; // 出錯,final變量的值一旦給定就無法改變

// t.D = 71; // 出錯,final變量的值一旦給定就無法改變

System.out.println(t.A);

System.out.println(t.B);

System.out.println(t.C); // 不推薦用對象方式訪問靜態(tài)字段

System.out.println(t.D); // 不推薦用對象方式訪問靜態(tài)字段

System.out.println(TestFinal4.C);

System.out.println(TestFinal4.D);

// System.out.println(TestFianl3.E); // 出錯,因為E為final空白,依據(jù)不同對象值有所不同.

System.out.println(t.E);

TestFinal4 t1 = new TestFinal4(3);

????System.out.println(t1.E); // final空白變量E依據(jù)對象的不同而不同 }

}

4final參數(shù)

當函數(shù)參數(shù)為final類型時,你可以讀取使用該參數(shù),但是無法改變該參數(shù)的值。

package?testfinal;

?

public?class?TestFinal3 {

public?static?void?main(String[] args) {

new?TestFinal3().f1(2);

}

?

public?void?f1(final?int?i) {

// i++;

//i是final類型的,值不允許改變的.

System.out.print(i);

}

}

?

?


總結(jié)

以上是生活随笔為你收集整理的final的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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