亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中final關(guān)鍵字的用法總結(jié)

 更新時(shí)間:2016年06月15日 10:12:17   作者:M_JCs  
在Java中,final可以別用來(lái)修飾類、修飾方法、修飾變量和修飾參數(shù)等,這里就來(lái)簡(jiǎn)單作一個(gè)Java中final關(guān)鍵字的用法總結(jié):

1、final修飾類
被final修飾的類不能被繼承,因此final類的成員方法也不能被覆寫(xiě),被final關(guān)鍵字修飾的類沒(méi)有子類,因此類的實(shí)現(xiàn)細(xì)節(jié)也無(wú)法改變,無(wú)法被擴(kuò)展。final類中的所有成員方法都會(huì)被隱式地指定為final方法,final類中的成員變量可以根據(jù)需要設(shè)為final。

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

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

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

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修飾參數(shù)
當(dāng)方法參數(shù)為final類型時(shí),你可以讀取使用該參數(shù),但是無(wú)法改變?cè)搮?shù)的值。該變量在方法調(diào)用時(shí)被創(chuàng)建,同時(shí)初始化為對(duì)應(yīng)實(shí)參值,在方法體(body)執(zhí)行結(jié)束前,其值不能改變。用final關(guān)鍵字修飾的基本數(shù)據(jù)類型的參數(shù),其參數(shù)值無(wú)法改變,用final關(guān)鍵字修飾的引用數(shù)據(jù)類型,無(wú)法是該引用指向其他對(duì)象或再次賦值為null,但可以使用該引用改變引用對(duì)象的內(nèi)容。final用于修飾參數(shù)的目的并非防止在調(diào)用的方法內(nèi)部對(duì)參數(shù)的操作改變方法外部對(duì)應(yīng)變量的值,只是防止在該方法內(nèi)對(duì)該參數(shù)進(jìn)行重新賦值操作,影響該參數(shù)傳遞時(shí)的初始值。而且將方法中的參數(shù)用final關(guān)鍵字修飾并不能防止從方法外部所傳遞的參數(shù)的值的內(nèi)容不被改變。具體可參考final修飾引用數(shù)據(jù)類型的解釋。

相關(guān)文章

  • Maven scala和java混合打包方式

    Maven scala和java混合打包方式

    這篇文章主要介紹了Maven scala和java混合打包方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • hutool?工具類基本使用教程

    hutool?工具類基本使用教程

    Hutool?是一個(gè)?Java?工具包,也只是一個(gè)工具包,它幫助我們簡(jiǎn)化每一行代碼,減少每一個(gè)方法,讓?Java?語(yǔ)言也可以?“甜甜的”,下面通過(guò)本文學(xué)習(xí)下hutool?工具類基本使用教程,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • 基于JVM 中常見(jiàn)垃圾收集算法介紹

    基于JVM 中常見(jiàn)垃圾收集算法介紹

    下面小編就為大家分享一篇基于JVM 中常見(jiàn)垃圾收集算法介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 解決springboot 連接 mysql 時(shí)報(bào)錯(cuò) using password: NO的方案

    解決springboot 連接 mysql 時(shí)報(bào)錯(cuò) using password: NO的方案

    在本篇文章里小編給大家整理了關(guān)于解決springboot 連接 mysql 時(shí)報(bào)錯(cuò) using password: NO的方案,有需要的朋友們可以學(xué)習(xí)下。
    2020-01-01
  • Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解

    Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解

    這篇文章主要通過(guò)幾個(gè)例題為大家詳細(xì)介紹一些Java動(dòng)態(tài)規(guī)劃中的線性DP,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-11-11
  • Java批量修改文件名的實(shí)例代碼

    Java批量修改文件名的實(shí)例代碼

    幾天前在163公開(kāi)課上下了一些mp4視頻文件。發(fā)現(xiàn)課程名和文件名不對(duì)應(yīng),想到編個(gè)程序批量修改。先分析網(wǎng)頁(yè)源代碼將課程名和文件名一一對(duì)應(yīng),存儲(chǔ)在一個(gè)文件里,然后使用Java讀取該文件進(jìn)而修改文件名。
    2013-04-04
  • java類的定義與使用舉例詳解

    java類的定義與使用舉例詳解

    這篇文章主要給大家介紹了關(guān)于java類的定義與使用的相關(guān)資料,類的方法是用來(lái)定義類的行為,在方法中通過(guò)操作類的成員變量、編寫(xiě)業(yè)務(wù)邏輯、返回 結(jié)果等實(shí)現(xiàn)類的業(yè)務(wù)行為,需要的朋友可以參考下
    2023-11-11
  • java8 stream 操作map根據(jù)key或者value排序的實(shí)現(xiàn)

    java8 stream 操作map根據(jù)key或者value排序的實(shí)現(xiàn)

    這篇文章主要介紹了java8 stream 操作map根據(jù)key或者value排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用Java注解模擬spring ioc容器過(guò)程解析

    使用Java注解模擬spring ioc容器過(guò)程解析

    這篇文章主要介紹了使用Java注解模擬spring ioc容器過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Seata AT模式TransactionHook被刪除探究

    Seata AT模式TransactionHook被刪除探究

    這篇文章主要為大家介紹了Seata AT模式TransactionHook被刪除探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評(píng)論