final、finally、finalize的詳細(xì)分析-創(chuàng)新互聯(lián)

  java語(yǔ)言有有很多看起來(lái)相似,但用途卻完全不同的要素,那么final,finally,finalize又有哪些不同之處呢?

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)衡陽(yáng),十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):028-86922220

  final

  final可以用來(lái)修飾類(lèi)、方法、變量,分別有不同的意義,

  final修飾的class表示不可以繼承擴(kuò)展

  final修飾的變量是不可以修改的

  final修飾的方法是不可以重寫(xiě)的

  final執(zhí)行去修飾某個(gè)引用,

  finally

  finally是保證java重點(diǎn)代碼執(zhí)行的一種機(jī)制,他可以配合我們的異常機(jī)制一起使用,我們可以使用try{}finally{}或者try{}catch(){}finally{}來(lái)關(guān)閉類(lèi)似jdbc的連接,保證unlock鎖等動(dòng)作.

  finalize

  finalize是java的一個(gè)方法,它的設(shè)計(jì)目的是java對(duì)象在被垃圾回收器回收之前,完成特定資源的回收,finalize機(jī)制現(xiàn)在已經(jīng)不推薦使用,

  在一般情況下不能指望finalize來(lái)進(jìn)行回收資源,為什么呢?簡(jiǎn)單來(lái)說(shuō),無(wú)法保證finallize什么時(shí)候執(zhí)行,執(zhí)行是否符合預(yù)期,使用不當(dāng)會(huì)影響性能,導(dǎo)致程序死鎖,掛掉等。通常來(lái)說(shuō)上面提到的try{}finally{}機(jī)制是回收資源的辦法,如果特別需要額外處理的話(huà),可以考慮java提供的cleaner機(jī)制(垃圾回收機(jī)制)或者其他替代方法.

  finalize是和垃圾收集相關(guān)聯(lián)的,一但調(diào)用finalize方法,就會(huì)導(dǎo)致相應(yīng)的對(duì)象回收呈現(xiàn)數(shù)量集上的變慢,有人專(zhuān)門(mén)做過(guò)研究,實(shí)現(xiàn)該方法速度大概是40-50倍的下降,因?yàn)閒inallize被設(shè)計(jì)成在對(duì)象本身垃圾回收之前調(diào)用,這就意味者實(shí)現(xiàn)finalize方法的對(duì)象是個(gè)特殊供應(yīng)。cdn要對(duì)他進(jìn)行額外處理,finalize本質(zhì)上成為快速回收的阻礙,可能導(dǎo)致你的對(duì)象經(jīng)過(guò)多個(gè)垃圾經(jīng)期,才能被回收.如果我們告知jvm來(lái)回收也是不痛不癢的.就向我們用過(guò)的jdbc連接池,其中有一個(gè)close方法,他是釋放資源的,清空某個(gè)池子,以供下回使用,如果我們指望finalize進(jìn)行回收的話(huà),有可能造成內(nèi)存溢出.那么只能讓他作為程序的守門(mén)員.其中finalize也會(huì)掩蓋一些出錯(cuò)信息.

  java用cleaner來(lái)替換調(diào)finalize的所有實(shí)現(xiàn).利用了幻象引用。這是一個(gè)清理機(jī)制.利用幻象引用或者隊(duì)列可以保證資源被釋放,他有自己的線(xiàn)程,避免了死鎖的情況。

  mysqljdbc就用了幻象引用機(jī)制。

  隱藏的問(wèn)題

  性能,并發(fā),對(duì)象生命周期,垃圾回收等過(guò)程方面的問(wèn)題。

  推薦使用final關(guān)鍵字來(lái)表示我們代碼的語(yǔ)義和邏輯密度,這已經(jīng)被證明在很多場(chǎng)景下的實(shí)現(xiàn),比如我們可以將方法或類(lèi)聲明為final,這樣就可以明確告訴別人,這些類(lèi)和方法是不可以修改的.如果你關(guān)心過(guò)java的核心類(lèi)庫(kù)和源碼的話(huà),你就會(huì)發(fā)現(xiàn)java下的很多類(lèi)都被聲明為final class,這可以防止api使用者改變基礎(chǔ)功能,某種情況這是保證平臺(tái)安全的必要手段,使用final修飾方法或者變量,可以避免意外布局導(dǎo)致的編程錯(cuò)誤,甚至有人明確推薦將所有方法參數(shù)、本地變量、成員變量聲明為final,final在一定程度上產(chǎn)生不可變的效果,所以可以用于保護(hù)只讀數(shù)據(jù),尤其是在并發(fā)編程中,因?yàn)槊鞔_的不能再賦值final變量,有利于減少額外的同步開(kāi)銷(xiāo),也可以省略防御性拷貝的必要,fianl在很多場(chǎng)景中可以提高性能,利用fianl可能將cdn方法進(jìn)行內(nèi)連,可以改善編譯器進(jìn)行編譯的能力等等,坦白說(shuō)很多類(lèi)似的結(jié)果都是基于假設(shè)得出的,比如現(xiàn)代高性能cdn判斷內(nèi)斂,未必依賴(lài)final的提示,fianl關(guān)鍵字對(duì)性能的影響,沒(méi)有考慮的必要,如果在開(kāi)發(fā)中要想以這樣的方式來(lái)提高性能,那真的是沒(méi)有必要.

  finally基礎(chǔ)筆試題

  public class finally_demo{

  public static char Label;

  public static void main(String[] args){

  System.out.println(test_finally());

  System.out.println(Label);

  } 鄭州引產(chǎn)手術(shù)費(fèi)用多少錢(qián) https://yiyuan.120ask.com/art/307587.html

  public static char test_finally(){

  try{

  System.out.println('A');

  return Label= 'A';

  }finally{

  System.out.println('B');

  Label= 'B';

  }

  )

  }

  輸出結(jié)果:

  ABAB

  結(jié)構(gòu)分析:

  1.這道題考察的點(diǎn)是:return和finally的執(zhí)行順序是什么;

  執(zhí)行過(guò)程:

  前面輸出AB,大部分人是沒(méi)有疑惑的,這是因?yàn)門(mén)est1方法里面的兩個(gè)輸出語(yǔ)句。

  之后,

  先將label='A’進(jìn)行賦值,

  后會(huì)檢測(cè)是否存在finally的語(yǔ)句,

  有,則執(zhí)行finally的語(yǔ)句,Label=‘B’,故最終結(jié)果Label的值是B!;

  最終將return語(yǔ)句返回(此時(shí)并不進(jìn)行賦值操作,Label雖然等于B,但是返回的仍然是剛才尚未執(zhí)行finally語(yǔ)句前的值)。

  創(chuàng)建自定義不可變類(lèi)需要遵守的規(guī)則:

  1、使用private和final修飾成員變量。

  2、提供帶參構(gòu)造方法,用于初始化成員變量。

  3、不要為成員變量提供setter方法。

  4、如果成員變量中有可變類(lèi)時(shí)需要重寫(xiě)Object中的hashCode方法和equals方法

本文名稱(chēng):final、finally、finalize的詳細(xì)分析-創(chuàng)新互聯(lián)
文章起源:http://muchs.cn/article0/pcoio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航、建站公司軟件開(kāi)發(fā)、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司