一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java中final關鍵字的用法總結

Java中final關鍵字的用法總結

2020-05-17 12:23M_JCs JAVA教程

在Java中,final可以別用來修飾類、修飾方法、修飾變量和修飾參數等,這里就來簡單作一個Java中final關鍵字的用法總結:

1、final修飾類
被final修飾的類不能被繼承,因此final類的成員方法也不能被覆寫,被final關鍵字修飾的類沒有子類,因此類的實現細節也無法改變,無法被擴展。final類中的所有成員方法都會被隱式地指定為final方法,final類中的成員變量可以根據需要設為final。

2、final修飾方法
一個類中的方法如果被final關鍵字修飾,則其子類無法覆寫該方法,只能被子類繼承。如果父類中的某個方法不想被其子類所覆寫,可將該方法定義為final類型,另外,父類中的私有方法(即被private關鍵字修飾的方法)也不允許被子類所覆寫,所以父類中被private關鍵字修飾的方法默認為final類型,被final關鍵字修飾的方法有如下特質:

該方法被鎖定,可以防止任何繼承類修改它的意義和實現;
高效。編譯器在遇到調用final方法時候會轉入內嵌機制,大大提高執行效率;
另外,使用final修飾的靜態方法在其所屬類的子類中不能被隱藏(hide);

3、final修飾變量
final這個關鍵字的含義是“這是無法改變的”或者“終態的”;
那么為什么要阻止改變呢?
java語言的發明者可能由于兩個目的而阻止改變:
A.效率問題:
jdk中的某些類的某些方法,是不允許被用戶覆蓋的,設計者可能認為,所用方法已經是最好的方法,
 用戶私自覆蓋,或是由于疏忽而覆蓋,就會影響JVM或是系統的系能;
B.設計所需:
眾所周知,有些情況必須使用final關鍵字,比如方法中的匿名內部類的參數傳遞。
有人說final變量在賦值后就不可變,
那么這個不變到底指的是什么呢?
這個不變指的是引用,是地址,而所引用的對象的內容仍然是可變的。
就是說,這個final變量永遠指向某個對象,是一個常量指針,而不是指向常量的指針。
(1)被final關鍵字修飾的基本數據類型,則其數值一旦在初始化之后便不能更改;
(2)如果是引用類型的變量,則在對其初始化之后便不能再讓其指向另一個對象,但該引用所指向的對象的內容是可以發生變化的。原因為:引用數據類型存儲的引用對象在堆內存中的地址,final修飾引用類型之后,要求該引用指向的堆內存空間(或者說該引用存儲的堆內存地址)不能改變。
當用final修飾類的非靜態成員變量時,成員變量的初始化有兩種方式:
(3)在聲明時進行初始化
(4)在聲明變量時可以不進行初始化,該變量被稱為blank final,即final空白,但是要在這個變量所在的類的所有的構造方法中對這個變量賦初值。
當用final修飾類的靜態成員變量時,靜態成員變量的初始化方式也有兩種:
(5)在聲明時進行初始化
(6)在靜態初始化塊中進行初始化
當用final修飾接口的靜態變量時,其初始化方式只有一種:
(7)在聲明時進行初始化
當用final修飾局部成員變量時,只需要保證在使用之前被初始化賦值即可。
總之,被final關鍵字修飾的變量在聲明時可以不進行初始化,但必須保證該變量在使用之前被初始化,一旦被初始化賦值之后,就不能再被重新賦值了。試分析一下程序的輸出結果:

?
1
2
3
4
5
6
7
8
9
10
11
public class Test {
 public static void main(String[] args) {
   String a = "hello2";
   final String b = "hello";
   String d = "hello";
   String c = b + 2;
   String e = d + 2;
   System.out.println((a == c));
   System.out.println((a == e));
 }
}

4、final修飾參數
當方法參數為final類型時,你可以讀取使用該參數,但是無法改變該參數的值。該變量在方法調用時被創建,同時初始化為對應實參值,在方法體(body)執行結束前,其值不能改變。用final關鍵字修飾的基本數據類型的參數,其參數值無法改變,用final關鍵字修飾的引用數據類型,無法是該引用指向其他對象或再次賦值為null,但可以使用該引用改變引用對象的內容。final用于修飾參數的目的并非防止在調用的方法內部對參數的操作改變方法外部對應變量的值,只是防止在該方法內對該參數進行重新賦值操作,影響該參數傳遞時的初始值。而且將方法中的參數用final關鍵字修飾并不能防止從方法外部所傳遞的參數的值的內容不被改變。具體可參考final修飾引用數據類型的解釋。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产欧美日韩图片一区二区 | 91国语精品自产拍在线观看一 | 青青草国产精品免费 | 邪恶肉肉全彩色无遮琉璃神社 | 日韩欧美综合在线二区三区 | 日本色女| 国产123区在线视频观看 | 久久精品麻豆国产天美传媒果冻 | 我要看免费毛片 | 午夜爽喷水无码成人18禁三级 | 农村老妇1乱69系列小说 | tube8老师| 亚洲精品久久中文字幕 | 欧美性黑人巨大gaysex | 国产免费小视频 | 国产99在线| 双性肉文h | 亚洲成人精品久久 | 欧美精品国产一区二区三区 | 午夜在线观看免费完整直播网 | 高清在线免费 | 我的漂亮朋友在线观看全集免费 | 日本视频免费在线 | yjsp妖精视频在线观看免费 | 国产在线精品99一卡2卡 | 沉香如屑西瓜视频免费观看完整版 | 2021日本三级理论影院 | 精品国产欧美一区二区五十路 | 亚洲精品中文字幕在线 | 天堂网在线网站成人午夜网站 | 亚洲香蕉伊在人在线观看9 亚洲系列国产系列 | 人人最怕九月羊 | 亚洲国产午夜看片 | 黄动漫车车好快的车车双女主 | 婷婷色婷婷 | 香蕉久久一区二区三区 | 丝瓜香蕉视频 | 91久久线看在观草草青青 | 欧式午夜理伦三级在线观看 | 成人中文字幕在线高清 | 精品卡1卡2卡三卡免费网站 |