Java 8中你可能沒用過的10個(gè)特性_第1頁
Java 8中你可能沒用過的10個(gè)特性_第2頁
Java 8中你可能沒用過的10個(gè)特性_第3頁
Java 8中你可能沒用過的10個(gè)特性_第4頁
Java 8中你可能沒用過的10個(gè)特性_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——Java8中你可能沒用過的10個(gè)特性Java8中你可能沒用過的10個(gè)特性

lambda表達(dá)式,lambda表達(dá)式,還是lambda表達(dá)式。一提到Java8就只能聽到這個(gè),但這不過是其中的一個(gè)新功能而已,Java8還有大量新的特性——有一些功能強(qiáng)大的新類或者新的用法,還有一些功能那么是早就理應(yīng)加到Java里了。

這里我打定介紹它的10個(gè)分外值得了解的新特性??倳幸豢钸m合你的,開頭來看下吧。

Java8中你可能沒用過的10個(gè)特性

default方法

這是Java語言的一個(gè)新特性,現(xiàn)在接口類里可以包含方法體(這就是default方法)了。這些方法會隱式的添加到實(shí)現(xiàn)這個(gè)接口的每個(gè)子類中。

這使得你可以在不破壞代碼的前提下擴(kuò)展原有庫的功能。它十足是個(gè)利器。但從另一個(gè)方面來說,這使得接口作為協(xié)議,類作為概括實(shí)現(xiàn)的界限開頭變得有點(diǎn)模糊。但好處就是,它通過一個(gè)很優(yōu)雅的方式使得接口變得更智能,同時(shí)還制止了代碼冗余,并且擴(kuò)展類庫。不好的地方就是,我估計(jì)很快就會看到有在接口方法里獲取this引用然后強(qiáng)制轉(zhuǎn)化成某個(gè)概括類型的寫法了。

終止進(jìn)程

一旦啟動外部進(jìn)程的話,當(dāng)這個(gè)進(jìn)程崩潰,掛起,或者CPU到達(dá)100%的時(shí)候,你就得回來擦屁股了。Process類現(xiàn)在增加了兩個(gè)新的方法,可以來教訓(xùn)下那些不聽話的進(jìn)程了。

第一個(gè)是isAlive方法,有了它你可以判斷進(jìn)程是否還活著。其次個(gè)方法那么更加強(qiáng)大,它叫destroyForcibly,你可以用它來強(qiáng)制的殺掉一個(gè)已經(jīng)超時(shí)或者不再需要的進(jìn)程。

StampedLock

提到這個(gè)不禁有點(diǎn)小沖動。沒有人會熱愛在代碼中使用同步。用了它斷定會降低程序的吞吐量,更糟糕的話還會導(dǎo)致進(jìn)程掛起。盡管這樣,有時(shí)候你卻不得不選擇它。

當(dāng)多個(gè)進(jìn)程訪問一個(gè)資源的時(shí)候,有多種方法可以舉行同步。其中用得最多的一種是ReadWriteLock以及基于它的幾種實(shí)現(xiàn)。它通過阻塞寫線程的方式來允大量個(gè)線程并發(fā)的讀,這樣裁減了線程之間的競爭。聽起來還不錯(cuò),但實(shí)際上這個(gè)鎖實(shí)在是太太太慢了,尤其是當(dāng)有大量寫線程的時(shí)候。

因此Java8引入了一個(gè)新的讀寫鎖,叫做StampedLock。它不僅更快,同時(shí)還供給了一系列強(qiáng)大的API來實(shí)現(xiàn)樂觀鎖,這樣假設(shè)沒有寫操作在訪問臨界區(qū)域的話,你只需很低的開銷就能獲取到一個(gè)讀鎖。訪問終止后你可以查詢鎖來判斷這期間是否發(fā)生了寫操作,假設(shè)有的話再選擇舉行重試,升級鎖,或者放棄這個(gè)操作。

這確實(shí)是一個(gè)分外強(qiáng)大的工具,它本身就值得特意花一篇文章來介紹。這個(gè)新玩意兒讓我感到分外沖動和興奮,它真的'是太棒了。

并發(fā)計(jì)數(shù)器

這是多線程程序會用到的另一個(gè)小工具。它供給了簡樸高效的新接口來實(shí)現(xiàn)多線程的并發(fā)讀寫計(jì)數(shù)器的功能,和AtomicInteger比起來,它要更快一些。相當(dāng)贊的工具。

Optional

不好,又有空指針了,這是全體Java開發(fā)人員的痛處。這估計(jì)是有史以來最常見的奇怪了,至少是1965年以來。

Java8借鑒了Scala和Haskell,供給了一個(gè)新的Optional模板,可以用它來封裝可能為空的引用。這絕不是終結(jié)空指針的銀彈,更多只是使API的設(shè)計(jì)者可以在代碼層面聲明一個(gè)方法可能會返回空值,調(diào)用方理應(yīng)留神這種處境。正由于這個(gè),這只對新的API有效,前提是調(diào)用方不要讓引用逃逸出封裝類,否那么的話引用可能會在外面被擔(dān)心全的廢棄掉。

我對這個(gè)新的特性真的是又愛又恨。一方面,空指針是一個(gè)大問題,只要能解決這個(gè)問題的東西我都接待。但另一方面,我對它是否能擔(dān)此重任執(zhí)質(zhì)疑的態(tài)度。這是由于使用它的話需要全公司的集體努力,短期內(nèi)很難會有見效。除非大力地推廣,否那么很可能會功虧一簣。

萬物皆可注解

還有一個(gè)小的提升就是現(xiàn)在Java注解可以支持任意類型了。之前只有像類和方法聲明之類的才能使用注解。在Java8里面,當(dāng)類型轉(zhuǎn)化甚至調(diào)配新對象的時(shí)候,都可以在聲明變量或者參數(shù)的時(shí)候使用注解。這是Java為了更好地支持靜態(tài)分析及檢測工具(譬如FireBug而做的工作中的一片面。這是個(gè)很不錯(cuò)的特性,但是和Java7的invokeDynamic一樣,它的真正價(jià)值取決于社區(qū)以后如何去使用它。

數(shù)值溢出

這些方法早就該展現(xiàn)在Java的核心類庫里了。我有個(gè)癖好就是去測試整型超出2^32時(shí)溢出的處境,搞出一些惡心的隨機(jī)BUG來(怎么會得到這么古怪的一個(gè)值?)。

同樣的,這也不是什么銀彈,只不過是供給了一組函數(shù),這樣你在使用+/*操作符舉行數(shù)值操作的時(shí)候,假設(shè)展現(xiàn)了溢出,會拋一個(gè)奇怪。假設(shè)我可以抉擇的話,我會把它作為JVM的默認(rèn)模式,顯式的標(biāo)明函數(shù)會展現(xiàn)數(shù)值溢出。

目次遍歷

遍歷目次樹這種事通常都得上Google搜下怎么實(shí)現(xiàn)(你很可能用的是Apache.FileUtils)。Java8給Files類做了一次整容手術(shù),增加了十個(gè)新的方法。我最熱愛的一個(gè)是walk方法,它遍歷目次后會創(chuàng)造出一個(gè)惰性的流(文件系統(tǒng)很大的處境下分外有用)。

鞏固的隨機(jī)數(shù)生成

現(xiàn)在經(jīng)常都在議論密碼或者密鑰輕易遭遇攻擊的事。程序的安好性是項(xiàng)很繁雜的工程,并且很輕易出錯(cuò)。這就是我為什么熱愛這個(gè)新的SecureRandom.getinstanceStrong方法的理由,它能自動選擇出當(dāng)前JVM可用的最正確的隨機(jī)數(shù)生成器。這樣裁減了獲取失敗的機(jī)率,同時(shí)也制止了默認(rèn)的弱隨機(jī)數(shù)生成器可能會導(dǎo)致密鑰或者加密值輕易被黑客攻破的問題。

Date.toInstant

Java8引入了一個(gè)新的日期API。這不難理解,由于現(xiàn)有的這個(gè)實(shí)在是太難用了。實(shí)際上Joda一向以來都是Java日期API的首選。不過盡管有了新的API,但仍有一個(gè)嚴(yán)重的問題——大量的舊代碼和庫依舊在使用老的API。

并且我們還知道這種現(xiàn)狀仍將持續(xù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論