1 volatile是什么? 它是Java提供的一種輕量級(jí)的同步機(jī)制。與synchronized修飾方法,代碼塊不同,volatile只用來修飾變量。并且與synchroni...
1 volatile是什么? 它是Java提供的一種輕量級(jí)的同步機(jī)制。與synchronized修飾方法,代碼塊不同,volatile只用來修飾變量。并且與synchroni...
可變參數(shù)方法可以接收0個(gè)或多個(gè)指定類型的參數(shù),被應(yīng)用于需要一個(gè)方法帶有n個(gè)入?yún)⒌膱?chǎng)景。如下面這個(gè)求和方法: 使用可變參數(shù)可能遇到的問題 對(duì)于入?yún)⑿r?yàn)不夠優(yōu)雅,且要到運(yùn)行時(shí)才能...
重載是實(shí)現(xiàn)多態(tài)非常重要的手段之一,但是在使用重載時(shí),往往也容易出現(xiàn)預(yù)料之外的結(jié)果,因此在使用重載,尤其是方法的重載時(shí)要尤其的謹(jǐn)慎。 使用方法重載可能帶來的問題 方法的重載和繼...
謹(jǐn)慎地選擇方法的名稱。方法的名稱應(yīng)遵照標(biāo)準(zhǔn)命名習(xí)慣,應(yīng)當(dāng)是易于理解、風(fēng)格一致的。這一點(diǎn)我目前的習(xí)慣是對(duì)于方法使用動(dòng)賓短語,對(duì)于變量使用形容詞+名詞。當(dāng)然選詞時(shí)應(yīng)該盡量貼近業(yè)務(wù)...
當(dāng)我們?cè)谠O(shè)計(jì)一個(gè)不可變類,要注意保證它的組件也是不可變的,因此要進(jìn)行保護(hù)性拷貝。尤其是類的可變組件是來自于客戶端時(shí),盡管我們可以跟客戶端約定不會(huì)修改這些組件,但是都不如保護(hù)性...
這部分內(nèi)容跟《程序員修煉之道》中契約式編程的前置校驗(yàn)的思想很是相像。在方法的入口處添加校驗(yàn)可以實(shí)現(xiàn)fail early, 避免一些報(bào)錯(cuò)或計(jì)算出錯(cuò)誤的結(jié)果。同時(shí),主動(dòng)的檢驗(yàn)參數(shù)...
Stream提供了parallel 方法,可以簡(jiǎn)單的實(shí)現(xiàn)并行處理。但是想要真的利用stream 寫出出正確快速的實(shí)現(xiàn),還是有很多地方要注意的。 安全問題:當(dāng)我們?cè)谑褂胹tre...
在編寫返回元素的序列的方法時(shí),客戶端有時(shí)會(huì)希望將返回結(jié)果當(dāng)做Stream 處理,有時(shí)希望將它用于迭代,為了盡量兼顧兩者,在返回元素序列的方法時(shí)應(yīng)該優(yōu)先返回Collection...
我深怕自己本非美玉,故而不敢加以刻苦琢磨,卻又半信自己是塊美玉,故又不肯庸庸碌碌,與瓦礫為伍。于是我漸漸地脫離凡塵,疏遠(yuǎn)世人,結(jié)果便是一任憤懣與羞恨日益助長(zhǎng)內(nèi)心那怯弱的自尊心...
感覺這節(jié)的內(nèi)容主要是在講“在stream中避免使用forEach來執(zhí)行計(jì)算,應(yīng)該使用無副作用的函數(shù)對(duì)象”。stream是把處理數(shù)據(jù)的函數(shù)構(gòu)造成一系列的變形,每一級(jí)結(jié)果都盡可能...
本章節(jié)介紹了stream 特性。stream 也是java8的新特性,可以簡(jiǎn)化串行或并發(fā)的大批量操作。 書中提到,過度使用stream或使用不當(dāng)會(huì)造成可讀性,不過可能因?yàn)閟t...
Java8在提供了lambda 的同時(shí)也提供了標(biāo)準(zhǔn)的函數(shù)接口,在java.util.function 中提供了大量的標(biāo)準(zhǔn)函數(shù)接口。只要標(biāo)準(zhǔn)的函數(shù)接口能夠滿足需求,通常應(yīng)該優(yōu)先...
lambda 是java 把針對(duì)函數(shù)式方法提供的語法糖,而方法引用則是在lambda的基礎(chǔ)上進(jìn)一步簡(jiǎn)化了函數(shù)式方法的引用。使用方法引用得到的代碼更加簡(jiǎn)潔,在方法命名恰當(dāng)?shù)那疤?..
本節(jié)作者主要是介紹了lambda 的來歷、優(yōu)勢(shì)以及使用時(shí)的一些注意事項(xiàng)。 來歷:在java8之前,創(chuàng)建函數(shù)對(duì)象都是通過匿名類。但是匿名類的代碼太過繁瑣,從編寫和可讀性上都不便...
定義類型有兩種方式:一種是注解,這個(gè)之前已經(jīng)提到過。另一種是標(biāo)記接口(不含方法聲明的接口)如Serializable: 將其作為標(biāo)記來使用的好處是,可以在方法簽名中要求類包含...
@Override 是java中提供的僅僅作用于方法的注解,其意為該方法復(fù)寫了父類或?qū)崿F(xiàn)了接口中的方法。 對(duì)于子類中的方法,如果不使用@Override 注解,在方法簽名和入...
這部分內(nèi)容利用JUNIT 中的測(cè)試方法來說明注解優(yōu)于命名模式。命名模式是依賴于對(duì)于方法的命名在實(shí)現(xiàn)約定,如在JUNIT4之前對(duì)于測(cè)試方法的約定是以test 結(jié)尾的方法。命名模...