《疯狂Java讲义》7
?
昨天介紹了枚舉類的相關(guān)知識,并沒有講完,我們繼續(xù)!
枚舉類的成員變量、方法和構(gòu)造器
先定義一個枚舉類,代碼如下:
下面通過一個程序講述對這個類的使用:
結(jié)果如下:
????上面的程序使用Gender枚舉類的時候與普通類沒有什么很大的差別,差別只是產(chǎn)生Gender對象的方式不同,枚舉類的實例只能是枚舉值,而不是通過new隨意的創(chuàng)建對象。
? ??之前提到過,枚舉類比較特殊,無論是寫法上還是含義上。所以,對枚舉類里的實例變量 也應(yīng)該有一定的要求。舉個栗子:如果沒什么要求,那么上面的程序中我也可以把name實例變量賦值成“男”,但是這個顯然是有問題的。所以理論上枚舉類里的實例變量應(yīng)該是封裝好的,也就是說要通過private進行修飾。此外,在枚舉類中還應(yīng)該對實例變量的值進行一些限定。其實說白了,枚舉類就是我們描述集合所用到的列舉法,它的情況應(yīng)該是有限且可知的。
看下面代碼:
上面框出來的就是解決的兩點。這樣子就不會發(fā)生與實際相悖的混亂。
結(jié)果如下:
????上述代碼看起來已經(jīng)天衣無縫了,但是仍然不是最好的。枚舉類通常被設(shè)計成不可變類,也就是說,它的成員變量不應(yīng)該改變,這樣更安全,而且代碼更加簡潔。因此建議將枚舉類的成員變量都用private final修飾。如果用final修飾,那么必須在構(gòu)造器里為這些成員變量指定初始值。因此應(yīng)該為枚舉類顯式定義帶參數(shù)的構(gòu)造器。
代碼如下:
可能大家很不熟悉第42行的寫法。
這兩行相當于:
對象與垃圾回收
1. 垃圾回收機制特征:
(1)垃圾回收機制只負責回收內(nèi)存中的對象,不會回收任何物理資源(例如數(shù)據(jù)庫連接,網(wǎng)絡(luò)ID等資源)
(2)程序無法精確控制垃圾回收的運行,垃圾回收會在合適的時候進行。當對象永久性的失去引用后,系統(tǒng)就會在合適的時候回收它。
(3)在垃圾回收機制回收任何對象之前,總會先調(diào)用它的finalize()方法,該方法可能使該對象重新復活(讓一個引用變量重新引用該對象),從而導致垃圾回收機制取消回收。
2. 對象在內(nèi)存中的狀態(tài):
(1)可達狀態(tài):當一個對象被創(chuàng)建后,有引用變量引用它,則這個對象在程序中處于可達狀態(tài);
(2)可恢復狀態(tài):如果程序中某個對象不再有任何引用變量引用它,它就進入了可恢復狀態(tài)。在這種狀態(tài)下,垃圾回收機制就準備對它進行回收。但是在回收之前會調(diào)用finalize()方法進行資源清理,如果該對象被重新引用,就不回收,否則就回收。
(3)不可達狀態(tài):系統(tǒng)調(diào)用finalize()方法之后該對象還是沒有被調(diào)用,該對象就到了不可達狀態(tài),就進行回收。
?3. finalize方法
-
finalize()方法用來清理對象的資源;
-
方法原型為:
????????protected void finalize() throws Throwable
-
當finalize()方法返回后,對象消失,垃圾回收機制開始執(zhí)行,方法原型中的throwsThrowable表示它可以拋出任何形式的異常。
-
垃圾回收機制何時調(diào)用對象的finalize()方法是完全透明的,只有當程序認為需要更多的額外內(nèi)存時,垃圾回收機制才會進行垃圾回收。因此,完全有可能出現(xiàn)這樣一種情形:某個對象失去了引用,但是只占用了少量內(nèi)存,而且系統(tǒng)沒有產(chǎn)生嚴重的內(nèi)存需求,因此垃圾回收機制并沒有試圖回收該對象所占用的資源,所以該對象的finalize()方法不會得到調(diào)用。
-
finalize()方法有4個特點:
(1)永遠不要調(diào)用某個對象的finalize()方法,該方法應(yīng)該交給垃圾回收機制調(diào)用。
(2)finalize()方法何時被調(diào)用,是否被調(diào)用具有不確定性,不要把finalize()方法當作一定會執(zhí)行的方法。
(3)當JVM執(zhí)行可恢復對象的finalize()方法時,可能使該對象或系統(tǒng)中其他對象重新變成可達狀態(tài)。
(4)當JVM執(zhí)行finalize()方法時出現(xiàn)異常時,垃圾回收機制不會報告異常,程序繼續(xù)執(zhí)行。
使用JAR文件
?1. JAR文件的全稱是JavaArchiveFile,意思就是Java檔案文件。通常JAR文件是一個壓縮文件,與常見的ZIP壓縮文件兼容,通常也被稱為JAR包。JAR文件與ZIP壓縮文件的區(qū)別是:JAR文件中默認包含了一個名為META-INF/MANIFEST.MF的清單文件,這個清單文件是生成JAR文件時由系統(tǒng)自動創(chuàng)建的。
2. JAR文件的作用:
????當開發(fā)了一個應(yīng)用程序之后,這個應(yīng)用程序包含了很多類,如果需要把這個應(yīng)用程序提供給別人使用,通常會把這些類文件打包成一個JAR文件,把這個JAR文件給別人使用。只要別人在自己的系統(tǒng)里面的CLASSPATH環(huán)境變量中添加這個JAR文件,則Java虛擬機就可以自動在內(nèi)存中解壓這個JAR包,然后進行使用。
3. JAR文件的好處:
(1)安全:能夠?qū)AR文件進行數(shù)字簽名,只讓能夠識別數(shù)字簽名的用戶使用里面的東西;
(2)加快下載速度:在網(wǎng)上使用Applet時,如果存在多個文件而不打包,為了能夠把每個文件都下載到客戶端,需要為每個文件單獨建立一個HTTP連接,這是非常耗時的工作。但是打包以后,只需要建立一個HTTP連接即可;
(3)壓縮
(4)包封裝
(5)可移植性
?
【2017.07】
好了,今天java就到這里吧,下面本來是JAR包的使用,可是我怎么就這么不想看呢。明天學習第七章吧——Java基礎(chǔ)類庫。感覺現(xiàn)在看起來學的都是些理論上的東西,但是還是有很大幫助的,知道了很多機理以后,無論是看代碼還是寫代碼都會考慮更多,讓程序更加健壯,所以還是有必要的。不希望自己一直紙上談兵,所以我把書上的程序都敲過一遍,會不會再說,首先混個手熟。加油吧,今天應(yīng)該可以敲敲代碼,弄弄競賽題。對了,說個有意思的事情,我今天打開公眾號,發(fā)現(xiàn)老爸給了我個消息,是一個表情,頭暈眼花的那個,頓時覺得好好玩啊爸爸,太有意思了。不過這個可能在提醒我,只發(fā)專業(yè)東西不是太好的,可以多面性!get it!
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的《疯狂Java讲义》7的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《疯狂java讲义》6
- 下一篇: 《疯狂Java讲义》8