java中对象清空值_对象的引用和清除_Java语言程
對象的引用和清除_Java語言程
4.3.3 對象的引用和清除
在創建了類的對象后,就可以使用對象。即對象使用的原則是“先創建后使用”。
使用對象的方法是:通過運算符“.”訪問對象的各個成員變量和成員方法,進行各種處理。引用成員變量的格式為:
對象變量名.成員變量名
例如,利用在例4-1中定義了Humankind類,可創建Humankind類的對象zhangSan,然后引用對象zhangSan的成員變量,給這些成員變量賦值或取出這些成員變量的值。
或者
引用成員方法的格式為:
對象變量名.成員方法名([參數表]);
例如,利用在例4-1中定義了Humankind類,可創建Humankind類的對象zhangSan,然后引用對象zhangSan的成員方法。
zhangSan.walk();
對象的清除是當不存在對某一對象的引用時,就釋放該對象所占用的內存空間。對象清除的基本方法是:
(1)依靠垃圾回收機制回收內存。它周期性地回收不用對象所占用的內存;
(2)調用System.gc(),請求垃圾回收器釋放不用對象所占內存;
(3)Java系統開始時,自動調用Java.lang.Object.finalize()釋放對象所占內存;
(4)在程序中調用重寫的finalize()釋放對象所占內存。
在Java語言中,當一個對象不被任何引用變量所引用時,它就變成了垃圾。而垃圾回收工作(對象清除)是由垃圾回收器自動完成的,程序員不需要做任何工作。不被引用的對象就如同不被居民使用的物品一樣被放到指定的垃圾箱,垃圾回收器釋放不用對象所占用的內存空間如同清潔工人收走垃圾。然而,是否、何時收走垃圾,這是由清潔工人決定,不由居民決定。同樣,垃圾回收器是否、何時回收垃圾,不由程序員決定,程序員也無法控制垃圾回收器。
當垃圾回收器要釋放不用對象所占內存時,先調用該對象的finalize()方法。然而,垃圾回收器是否執行垃圾回收操作,或者何時執行垃圾回收操作,都是不確定的。因此,不用對象的finalize()方法是否執行、何時執行也是不確定的。
總之,無論是System.gc()方法還是finalize()方法都不能保證垃圾回收器何時執行垃圾回收操作,甚至不能保證垃圾回收器一定執行垃圾回收操作。但有一點是明確的:對象清除是由垃圾回收器自動完成的,一般來說,程序員不需要做任何工作。
一個對象失去一個變量對其的引用,通常有下面3種情況:
(1)一個變量由引用某個對象變成引用另一個對象,這樣原先那個對象就有可能成為垃圾對象;
(2)一個引用某個對象的變量被顯式設置為null;(www.guayunfan.com)
(3)一個引用某個對象的變量超出了其作用域的范圍而釋放。
【例4-4】 編寫一個程序,創建一個半徑為10的圓對象,計算其周長和面積,測試例4-1 的Circle類。
程序運行結果:
Area=314.1592653589793
Perimeter=62.83185307179586
分析與思考:這種程序設計方法體現了分而治之的思想。Circle類定義圓類型,而Ex4_4類的main()方法使用Circle類,即創造并使用Circle類的對象。
模仿例4-4:創建具體的矩形類對象、三角形類對象、梯形類對象等。
【例4-5】 編寫一個程序,創建張三、李四對象,測試例4-2的Humankind類。
編程思路:Humankind類只規定了每個具體人包含的變量及其類型,但沒有包含任何實際值。它是創建具體人對象的模板,根據此模板可創建張三、李四等多個實例,并引用這些實例的成員變量和成員方法。
程序運行結果:
【例4-6】 編寫一個程序,創建丁一、倪二、張三對象,測試例4-3的Employee類。
程序運行結果:
調整崗位和月薪后:
總之,在Java語言中,一個對象是有生命周期的,它包括創建、使用(引用)和清除3個階段。創建階段主要包括對象的聲明、實例化和初始化。使用階段應遵循“先創建后使用”的原則;清除階段是釋放對象所占的內存。
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的java中对象清空值_对象的引用和清除_Java语言程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: baseapp01: [S_ERROR]
- 下一篇: addall php,ThinkPHP3