Java中final,finally,finalize三個(gè)關(guān)鍵字的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
final
當(dāng)這個(gè)關(guān)鍵字修飾一個(gè)類(lèi)時(shí),意味著他不能派生出新的子類(lèi),也就是說(shuō)不能被繼承,因此一個(gè)類(lèi)不能被同時(shí)聲明為abstract和final。當(dāng)final修飾變量或者方法時(shí),可以保證他們?cè)谑褂弥胁粫?huì)被改變。被聲明為final的變量必須在初始化時(shí)給定初值,以后在使用時(shí)只能被引用而不能被修改。同樣,當(dāng)final修飾一個(gè)方法時(shí),這個(gè)方法不能被重載。
finally
異常處理時(shí)提供finally來(lái)執(zhí)行任何清楚操作。如果拋出一個(gè)異常,那么相匹配的catch子句就會(huì)被執(zhí)行,然后控制就會(huì)轉(zhuǎn)入finally塊。
finalize
方法名。finalize方法在垃圾回收器執(zhí)行內(nèi)存對(duì)象清理時(shí)會(huì)調(diào)用finalize()方法進(jìn)行前期的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類(lèi)中定義的,因此所有的類(lèi)都繼承了它。子類(lèi)覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。
Java中所有類(lèi)都從Object類(lèi)中繼承finalize()方法。當(dāng)垃圾回收器(garbage colector)決定回收某對(duì)象時(shí),就會(huì)運(yùn)行該對(duì)象的finalize()方法。值得C++程序員注意的是,finalize()方法并不能等同與析構(gòu)函數(shù)。Java中是沒(méi)有析構(gòu)函數(shù)的。C++的析構(gòu)函數(shù)是在對(duì)象消亡時(shí)運(yùn)行的。由于C++沒(méi)有垃圾回收,對(duì)象空間手動(dòng)回收,所以一旦對(duì)象用不到時(shí),程序員就應(yīng)當(dāng)把它delete()掉。所以析構(gòu)函數(shù)中經(jīng)常做一些文件保存之類(lèi)的收尾工作。但是在Java中很不幸,如果內(nèi)存總是充足的,那么垃圾回收可能永遠(yuǎn)不會(huì)進(jìn)行,也就是說(shuō)filalize()可能永遠(yuǎn)不被執(zhí)行,顯然指望它做收尾工作是靠不住的。
那么finalize()究竟是做什么的呢?它最主要的用途是回收特殊渠道申請(qǐng)的內(nèi)存。Java程序有垃圾回收器,所以一般情況下內(nèi)存問(wèn)題不用程序員操心。但有一種JNI(Java Native Interface)調(diào)用non-Java程序(C或C++),finalize()的工作就是回收這部分的內(nèi)存。
以上所述是小編給大家介紹的Java中final,finally,finalize三個(gè)關(guān)鍵字的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Spring Bean Scope 有狀態(tài)的Bean與無(wú)狀態(tài)的Bean
這篇文章主要介紹了Spring Bean Scope 有狀態(tài)的Bean與無(wú)狀態(tài)的Bean,每個(gè)用戶有自己特有的一個(gè)實(shí)例,在用戶的生存期內(nèi),bean保持了用戶的信息,下面來(lái)了解有狀態(tài)和無(wú)狀態(tài)的區(qū)別吧2022-01-01java微信企業(yè)號(hào)開(kāi)發(fā)之發(fā)送消息(文本、圖片、語(yǔ)音)
這篇文章主要為大家詳細(xì)介紹了java微信企業(yè)號(hào)開(kāi)發(fā)之發(fā)送消息,發(fā)送類(lèi)型包括文本、圖片、語(yǔ)音,感興趣的小伙伴們可以參考一下2016-06-06Java實(shí)戰(zhàn)之火車(chē)票預(yù)訂系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了利用Java實(shí)現(xiàn)的火車(chē)票預(yù)訂系統(tǒng),文中用到了JSP?、Servlert、JQuery、Ajax?等技術(shù),文中示例代碼講解詳細(xì),需要的可以參考一下2022-02-02詳解APP微信支付(java后臺(tái)_統(tǒng)一下單和回調(diào))
這篇文章主要介紹了APP微信支付(java后臺(tái)_統(tǒng)一下單和回調(diào)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05SpringCloud zuul 網(wǎng)關(guān)如何解決跨域問(wèn)題
這篇文章主要介紹了SpringCloud zuul網(wǎng)關(guān)解決跨域問(wèn)題的具體實(shí)現(xiàn)方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06如何用Netty實(shí)現(xiàn)高效的HTTP服務(wù)器
這篇文章主要介紹了如何用Netty實(shí)現(xiàn)高效的HTTP服務(wù)器,對(duì)HTTP感興趣的同學(xué)可以參考一下2021-04-04Java獲取時(shí)間如何將當(dāng)前時(shí)間減一天、一月、一年、并格式化
這篇文章主要介紹了Java獲取時(shí)間,將當(dāng)前時(shí)間減一天、一月、一年,并加以格式化,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09Java中對(duì)AtomicInteger和int值在多線程下遞增操作的測(cè)試
這篇文章主要介紹了Java中對(duì)AtomicInteger和int值在多線程下遞增操作的測(cè)試,本文得出AtomicInteger操作 與 int操作的效率大致相差在50-80倍上下的結(jié)論,需要的朋友可以參考下2014-09-09