![240](https://upload.jianshu.io/users/upload_avatars/23410504/d2023fff-4348-4e06-8989-8298ab30a1ce.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240)
第85條 其他序列化優(yōu)先于 Java 序列化 避免序列化漏洞被利用的最佳方法是永遠(yuǎn)不要反序列化任何東西 任何新系統(tǒng)中都沒有理由使用 Java 序列化 永遠(yuǎn)不會反序列化不受信任...
第83條 慎用延遲初始化 延遲初始化降低了初始化類或者創(chuàng)建實(shí)例的開銷画髓,卻增加了訪問被延遲初始化的域的開銷 在大多數(shù)情況下炭庙,正常的初始化要優(yōu)先于延遲初始化 如果出于性能的考慮而...
第82條 線程安全性的文檔化 一個(gè)方法中出現(xiàn) synchronized 修飾符陪毡,這是個(gè)實(shí)現(xiàn)的細(xì)節(jié)雏掠,并不是 API 的一部分 類為了可以被多個(gè)線程安全地使用术健,必須在文檔中清楚地...
第81條 并發(fā)工具優(yōu)先于 wait 和 notify 比較常見的同步器:CountDownLatch、Semaphore裁替、CyclicBarrier鸠窗、Exchanger、Ph...
第80條 executor稍计、task 和 stream 優(yōu)先于線程 等待一個(gè)任務(wù)集合中的任何任務(wù)或者所有任務(wù)完成-> invokeAny或invokeAll 可以等待 exe...
第78條 同步訪問共享的可變數(shù)據(jù) 同步不僅可以阻止一個(gè)線程看到對象處于不一致的狀態(tài)之中,它還可以保證進(jìn)入同步方法或者同步代碼塊的每個(gè)線程裕循,都看到由同一個(gè)鎖保護(hù)的之前所有的修改...
第79條 避免過度同步 在一個(gè)被同步的區(qū)域內(nèi)部臣嚣,不要調(diào)用設(shè)計(jì)成要被覆蓋的方法,或者是由客戶端以函數(shù)對象的形式提供的方法 死鎖的例子:public class Observab...
第76條 努力使失敗保持原子性 通常來講剥哑,調(diào)用方法失敗了硅则,應(yīng)該使對象保持在被調(diào)用之前的狀態(tài) 實(shí)現(xiàn)失敗原子性的方法:設(shè)計(jì)一個(gè)不可變的對象。如果對象是不可變的株婴,失敗原子性就是顯然...
第75條 在詳細(xì)信息中包含捕獲的失敗信息 異常類型的toString方法應(yīng)該盡可能多地返回有關(guān)失敗原因的信息 為了捕獲失敗怎虫,異常的詳細(xì)信息應(yīng)該包含所有方便查詢異常原因的參數(shù)和...
第73條 拋出與抽象對應(yīng)的異常 更高層的實(shí)現(xiàn)應(yīng)該捕獲底層的異常,同時(shí)拋出可以按照高層抽象進(jìn)行解釋的異常困介。這種做法稱為*異常轉(zhuǎn)義// 來自AbstractSequentialL...
第71條 避免不必要地使用受檢異常 拋出受檢異常的方法無法直接在流中使用 消除受檢異常的最簡單方法是返回所需結(jié)果類型的Optional 可以使用判斷的方式消除異常try { ...
第70條 對可恢復(fù)的情況使用受檢異常,對編程錯誤使用運(yùn)行時(shí)異常 如果期望調(diào)用者能夠適當(dāng)?shù)鼗謴?fù)座哩,對于這種情況就應(yīng)該使用受檢異常 用運(yùn)行時(shí)異常來表明編程錯誤 實(shí)現(xiàn)的所有未受檢的可...
第69條 只針對異常的情況才使用異常 異常應(yīng)該只用于異常的情況下徒扶,它們永遠(yuǎn)不應(yīng)該用于控制正常的代碼執(zhí)行流程 如果類具狀態(tài)依賴(state-dependent)的方法,即只有在...
第68條 遵守普遍接受的命名慣例 包名稱通常不超過8個(gè)字符根穷。鼓勵使用有意義的縮寫形式姜骡,例如使用util而不是utilities。 類名稱除了首字母縮略詞和某些常用縮寫(如ma...
第67條 謹(jǐn)慎地進(jìn)行優(yōu)化 不要因?yàn)樾阅芏鵂奚侠淼慕Y(jié)構(gòu)屿良,要努力編寫好的程序而不是快的程序 對于API的設(shè)計(jì)要在設(shè)計(jì)時(shí)候就考慮性能圈澈,這些API在后續(xù)很難甚至不可以改變 要考慮A...
第65條 接口優(yōu)先于反射機(jī)制 使用反射的代價(jià):喪失了編譯時(shí)類型檢查的好處執(zhí)行反射訪問所需要的代碼非常笨拙和冗長性能損失 如果只是以非常有限的形式使用反射機(jī)制,雖然也要付出少許...
第63條 注意字符串拼接的性能 重復(fù)地使用字符串拼接操作符來拼接n個(gè)字符串尘惧,需要n的平方級的時(shí)間 為了獲得可以接受的性能康栈,請使用StringBuilder代替String 思...
第61條 基本類型優(yōu)先于裝箱基本類型 不要對裝箱基本類型使用"==" 當(dāng)在一項(xiàng)操作中混合使用基本類型和裝箱基本類型時(shí)褥伴,裝箱基本類型就會自動拆箱谅将,如果裝箱類型是null,會拋出...
第59條 了解和使用類庫 通過使用標(biāo)準(zhǔn)類庫重慢,可以充分利用這些編寫標(biāo)準(zhǔn)類庫的專家的知識饥臂,以及在你之前的其他人的使用經(jīng)驗(yàn) 選擇的隨機(jī)數(shù)生成器現(xiàn)在是ThreadLocalRando...