摘要:析構(gòu)函數(shù)對象也有類似析構(gòu)函數(shù)的功能,如果想要在垃圾回收的時候?qū)δ硞€對象進行一些收尾工作,可以重寫類的方法。示例對象構(gòu)造函數(shù)對象析構(gòu)函數(shù)會產(chǎn)生垃圾手工處理垃圾收集輸出結(jié)果對象構(gòu)造函數(shù)對象析構(gòu)函數(shù)可以看到異常信息并未輸出。
關(guān)于類和對象的詳解可以參考:https://blog.csdn.net/wei_zhi...
本文主要記錄下類對象的初始化順序、finalize函數(shù)以及對象克隆。
類對象初始化順序父類靜態(tài)屬性變量初始化
父類靜態(tài)代碼塊
子類靜態(tài)屬性變量初始化
子類靜態(tài)代碼塊
父類普通屬性變量初始化
父類構(gòu)造代碼塊
父類構(gòu)造函數(shù)
子類普通屬性變量初始化
子類構(gòu)造代碼塊
子類構(gòu)造函數(shù)
通過結(jié)論我們可以很明顯的看出:static字段、代碼塊的執(zhí)行順序優(yōu)先于非static字段、代碼塊。這是因為在靜態(tài)域是屬于類的,在類加載后就一直存在;而普通域需要創(chuàng)建對象才能訪問。而在創(chuàng)建對象時,需要先加載父類,然后再加載子類,因此父類的靜態(tài)字段初始化和靜態(tài)代碼塊執(zhí)行先于子類。
finalize 析構(gòu)函數(shù)java對象也有類似析構(gòu)函數(shù)的功能,如果想要在垃圾回收的時候?qū)δ硞€對象進行一些收尾工作,可以重寫Object類的finalize()方法。
定義如下:
protected void finalize() throws Throwable
在對象回收時,即使拋出了異常,也不會影響程序的正常運行。
示例:
class Demo { public Demo(){ System.out.println("對象構(gòu)造函數(shù)"); } @Override protected void finalize() throws Throwable{ System.out.println("對象析構(gòu)函數(shù)"); } } public class testDemo { public static void main(String[] args) throws Exception { Demo demo = new Demo(); demo = null; //會產(chǎn)生垃圾 System.gc(); //手工處理垃圾收集 } } 輸出結(jié)果: 對象構(gòu)造函數(shù) 對象析構(gòu)函數(shù)
可以看到異常信息并未輸出。
final、finally、finalize的區(qū)別final:關(guān)鍵字,其修飾的類不能被繼承,方法不能被重寫、常量;
finally: 關(guān)鍵字,異常的統(tǒng)一出口;
finalize:Object類的方法,析構(gòu)函數(shù);
對象克隆對象克隆指的是對象的復制操作,在Object類里提供有一個專門的克隆方法:
protected Object clone() throws CloneNotSupportedException
如果要使用的對象不支持Cloneable接口,調(diào)用該方法就會拋出異常。
示例:
class Book implements Cloneable { //此類的對象可以被克隆 private String title; private double price; public Book(String title, double price){ this.title = title; this.price = price; } @Override public String toString(){ return "書名:" + this.title + "價格:" + this.price; } //由于此類需要對象克隆操作,需要進行對象方法的重寫 @Override public Object clone() throws CloneNotSupportedException{ return super.clone(); } } public class testDemo { public static void main(String[] args) throws Exception { Book bookA = new Book("java開發(fā)", 79.8); Book bookB = (Book)bookA.clone(); System.out.println(bookA); System.out.println(bookB); System.out.println(System.identityHashCode(bookA)); System.out.println(System.identityHashCode(bookB)); } } 輸出結(jié)果: 書名:java開發(fā)價格:79.8 書名:java開發(fā)價格:79.8 ***** 366712642 1829164700
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/73443.html
摘要:中類的概念及類與對象的關(guān)系什么是類從語義上理解,類就是用于創(chuàng)建對象的模版,是一個抽象的概念從語法上理解,類就是我們指定的一種數(shù)據(jù)類型類和對象的關(guān)系語義上,類是創(chuàng)建對象的模版,對象是類的實例語法上,類是自定義數(shù)據(jù)類型,對象是這種類型的變量創(chuàng)建 1、Java中類的概念及類與對象的關(guān)系 什么是類? 從語義上理解,類就是用于創(chuàng)建對象的模版,是一個抽象的概念;從語法上理解,類就是我們指定的一...
摘要:目錄介紹問題匯總具體問題好消息博客筆記大匯總年月到至今,包括基礎(chǔ)及深入知識點,技術(shù)博客,學習筆記等等,還包括平時開發(fā)中遇到的匯總,當然也在工作之余收集了大量的面試題,長期更新維護并且修正,持續(xù)完善開源的文件是格式的同時也開源了生活博客,從年 目錄介紹 00.Java問題匯總 01.具體問題 好消息 博客筆記大匯總【16年3月到至今】,包括Java基礎(chǔ)及深入知識點,Android技...
摘要:又是金三銀四的時候,我希望這份面試題能夠祝你一臂之力自我和項目相關(guān)自我介紹你覺得自己的優(yōu)點是你覺得自己有啥缺點你有哪些你為什么要離開上家公司你上家公司在,我們公司在,離這么遠為什么要選擇我們這里上家公司的同事和領(lǐng)導是怎么評價你的介紹下你的上 又是金三銀四的時候,我希望這份面試題能夠祝你一臂之力! 自我和項目相關(guān) 1、自我介紹 2、你覺得自己的優(yōu)點是?你覺得自己有啥缺點? 3、你有哪些 ...
摘要:抽象工廠模式是為了處理對象具有等級結(jié)構(gòu)以及對象族的問題。單例設(shè)計模式單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例,這個類成為單例類。 導語:設(shè)計模式是無數(shù)碼農(nóng)前人在實際的生產(chǎn)項目中經(jīng)過不斷的踩坑、爬坑、修坑的經(jīng)歷總結(jié)出來的經(jīng)驗教訓,經(jīng)過抽象之后表達成的概念。能夠幫助后來的設(shè)計者避免重復同樣的錯誤或者彎路。我也抽空整理了一下設(shè)計模式,用自己的話總結(jié)了一下,自認...
摘要:文件組織一個文件由應以空行分隔的部分和標識每個部分的可選注釋組成。一個文件超過行的代碼會顯得很麻煩,應該避免出現(xiàn)這樣情況。源代碼文件每個源文件包含一個單獨的公開類或者接口。構(gòu)造函數(shù)方法這些方法應該按照功能而不是范圍或可訪問性進行分組。 3-文件組織 一個文件由應以空行分隔的部分和標識每個部分的可選注釋組成。 一個文件超過2000行的代碼會顯得很麻煩,應該避免出現(xiàn)這樣情況。 3.1 ja...
閱讀 1685·2019-08-29 13:53
閱讀 3275·2019-08-29 13:50
閱讀 923·2019-08-27 10:51
閱讀 652·2019-08-26 18:36
閱讀 1956·2019-08-26 11:00
閱讀 682·2019-08-26 10:36
閱讀 3290·2019-08-23 17:58
閱讀 2089·2019-08-23 15:17