溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java初始化與清除的方法是什么

發(fā)布時間:2022-01-05 17:53:33 來源:億速云 閱讀:93 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“Java初始化與清除的方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

1、對象的創(chuàng)建與初始化是同一個概念,不能分離
2、構(gòu)造函數(shù)名必須與類名完全相同,某種意義上講,構(gòu)造函數(shù)可以看成靜態(tài)方法,它對于同一個類的每個對象都是一樣的,且執(zhí)行它的時候?qū)ο筮€未創(chuàng)建好
3、默認構(gòu)造函數(shù)(default constructor)是無參數(shù)的,編譯器將無參構(gòu)造函數(shù)(可能是自己定義的)視為默認構(gòu)造函數(shù)

[@more@]

4、構(gòu)造函數(shù)可以有參數(shù),一定沒有返回值(與void型方法不是同樣概念,void是編寫者自行確定不返回任何值)
5、可以重載(overloading)構(gòu)造函數(shù)
6、重載規(guī)則(適用于全部重載):每一個經(jīng)過重載的方法都必須有唯一的參數(shù)類型的列表
7、new一個對象的時候,new表達式返回這個新創(chuàng)建對象的引用(reference)


8、創(chuàng)建對象是給一段內(nèi)存空間起名字,方法是一個動作的名字,這都屬于名字管理的范疇

9、實參,調(diào)用方法時賦予的參數(shù);形參,方法定義時所聲明的參數(shù)

10、this關(guān)鍵字只能用于非static方法內(nèi)部,注意是方法內(nèi)部,不是類定義內(nèi)部,this是對象引用的標識符,它指的是一個對象,用在類定義范圍內(nèi)是沒有意義的,常被用于return語句以返回當前對象的reference

11、可以用this在一個構(gòu)造函數(shù)中調(diào)用另一個構(gòu)造函數(shù),但只能調(diào)一個,稍微想想就明白了,一個對象不能被初始化兩次,那構(gòu)造函數(shù)顯然也不能順序執(zhí)行兩次

12、在非構(gòu)造函數(shù)的方法中,不能調(diào)用任何構(gòu)造函數(shù)


13、Java的垃圾回收機制只能回收用new分配的內(nèi)存


14、finalize()方法,垃圾回收機制在釋放對象索占用的內(nèi)存的時候,會先調(diào)用finalize()方法,進行一下“臨終關(guān)懷”,比如在此方法中釋放非new分配的內(nèi)存


15、C++中,對象總是會調(diào)用析構(gòu)函數(shù)(destructor)來清理自身,但Java對象不總是會被回收,垃圾回收也不是析構(gòu)(destruction)


16、垃圾回收器會不會啟動,什么時候啟動,都是無法確定的事,所以finalize()什么時候執(zhí)行也無法確定,它們是靠不住的

17、System.gc()可以強制進行垃圾回收,也就是強制執(zhí)行finalize()

18、finalize()還可以被用來檢查對象的中止條件(termination condition),比如對象是一個打開的文件,則可以用finalize()檢查它是否已經(jīng)被關(guān)閉


19、finalize()是在非常特殊的場合才會用到的,比如:內(nèi)存是以創(chuàng)建對象以外的形式被分配給對象的,即Java程序調(diào)用非Java程序,以native method來分配的內(nèi)存,比如調(diào)用C或C++的malloc(),如果不在finalize()里調(diào)用free(),內(nèi)存就不會被釋放,會發(fā)生泄漏


20、C++對象如果以本地(local)形式創(chuàng)建(不用new),是創(chuàng)建在棧里的(delete對象時會調(diào)用析構(gòu)函數(shù)來釋放);Java不允許創(chuàng)建本地對象(local objects),必須用new,分配在堆里(堆比棧慢)

21、垃圾回收不僅僅是回收空間,還將對象重新排列緊湊,使得堆指針指向大塊的未使用空間,提高分配新內(nèi)存的速度

22、不同JVM對垃圾回收可能有不同實現(xiàn)機制,常見的有:停止——復(fù)制(stop-and-copy)、標記——清掃(mark-and-sweep)、以及在兩種之間進行“自適應(yīng)”

23、為某個類創(chuàng)建第一個對象時,裝載器才裝載該類,一般如此

24、裝載一般采用lazy evaluation(惰性編譯),編譯器只在必要的時候才編譯代碼,這是現(xiàn)在JDK中Java HotSpot技術(shù)采用的方法,代碼執(zhí)行的次數(shù)越多,速度就越快

25、方法內(nèi)定義的變量如果使用前未初始化,將會有編譯時錯誤,類的成員變量或?qū)ο蟮囊萌绻闯跏蓟?,Java會給予默認初值,其中引用的默認初值為null,此時如果要使用這個引用,將會出現(xiàn)運行時錯誤,即NullPointException

26、編譯器對類成員變量的賦初值是在構(gòu)造函數(shù)之前執(zhí)行的,無論成員變量在類定義體的什么位置,在類內(nèi)部,變量定義的順序決定了初始化的順序

27、某類的第一個對象創(chuàng)建時的完整順序是:
->分配空間
->存儲空間清零(使用java默認值來初始化全部成員變量,對象中的所有基本類型數(shù)據(jù)被設(shè)置成默認值,引用設(shè)置成null)
->初始化靜態(tài)成員變量(使用自定義的默認值)
->初始化非靜態(tài)成員變量(使用自定義的默認值)
->執(zhí)行構(gòu)造函數(shù)

28、靜態(tài)成員變量只有在第一次被訪問或該類的第一個對象被創(chuàng)建時才被初始化,即,只在必要時刻(類被初次加載時)才被初始化,初始化后就不能更改了

29、可將對靜態(tài)/非靜態(tài)成員變量初始化的語句分別用{}圍起來組成一個塊(或叫做子句)

30、建議采用int[] a1;的形式來定義數(shù)組,但int a1[];也是合法的,java不允許指定數(shù)組大小

31、數(shù)組是對象序列,也可以看作是一種特殊對象,即使里面的元素是基本類型,數(shù)組也是對象,可以用int[] a = new int[20]來分配存儲空間,也可以直接用a1 = a2;來賦值,注意用=賦值的時候只復(fù)制了引用

32、如果數(shù)組里的元素不是基本類型,則必須對每一個都new一次,才算每個元素都真正有了空間,否則還只是個引用數(shù)組

33、如果數(shù)組越界,編譯不會有問題,但會產(chǎn)生運行時錯誤,即Exception

“Java初始化與清除的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI