1. 程式人生 > >轉載《Java 開發手冊》今日釋出,向全球開發者致敬!

轉載《Java 開發手冊》今日釋出,向全球開發者致敬!

致全球Java開發者:

 

程式碼是二進位制世界的交流方式,極致的程式碼是我們的榮耀。

 

2017年春天,《阿里巴巴Java開發手冊》釋出,我們希望在涵蓋程式設計規約、異常日誌、單元測試、安全規約、MySQL資料庫、工程規約、設計規約等7個維度上為開發工作提供一點幫助。

 

目前已有超過260萬位工程師下載及查閱手冊,在數以千計的企業應用,手冊成為受業界認可的開發規範。我們也有幸為全行業的研發效能、人才培養、系統穩定性作出力所能及的一點貢獻。

 

兩年來,Java開發者們熱心參與,以幫助這本不夠完美的手冊日臻完善。曾有開發者追蹤問題長達半年之久,反覆探討、論證其正確性。這樣的開發者難以計數,也許相隔重洋,可能相逢不識,我們用程式碼確認一致的熱愛,也讓這本手冊的價值超越了單一公司。

 

因此,我們決定將手冊正式更名為《Java開發手冊》,它屬於所有參與其中的貢獻者,也以此聊表我們對全球Java開發者的感謝。

 

 

同時在今天,時隔一年,《Java開發手冊》正式推出更新版,涵蓋史無前例的三大升級:

 

1.新增21條新規約。比如,switch的空指標問題、浮點數的比較、無泛型限制引起的型別混亂、加鎖與解鎖的注意事項、YYYY的日期格式問題等;

 

2.修改描述112處。比如,IFNULL的判斷方式、集合的toArray的陣列長度、日誌佔位符的處理等;

 

3.完善若干處示例。比如,變數命名示例、衛語句示例、列舉示例、finally的return示例等。

 

如何免費下載?

 

掃描上方二維碼

免費下載《Java開發手冊》最新版

 

新版手冊有哪些值得關注的亮點?

 

首先是關於新增的21條故障相關的規範,全部源於業界經典事實故障,經過廣大開發者深度討論提煉而成。表面看似簡單,實質是直擊程式碼靈魂的考究,唯有內功深厚之人方能看透底層。隨手列舉其中三條,一起來感受下:

 

1.Lock 鎖的使用往往稍微不注意,可能導致死鎖的問題。

 

在使用阻塞等待獲取鎖的方式中,必須在 try 程式碼塊之外,並且在加鎖方法與 try 程式碼塊之間沒有任何可能丟擲異常的方法呼叫,避免加鎖成功後,在 finally 中無法解鎖。

 

如果在 lock 方法與 try 程式碼塊之間的方法呼叫丟擲異常,那麼無法解鎖,造成其它執行緒無法成功獲取鎖。如果 lock 方法在 try 程式碼塊之內,可能由於其它方法丟擲異常,導致在 finally程式碼塊中,unlock 對未加鎖的物件解鎖,它會呼叫 AQS 的 tryRelease 方法(取決於具體實現類),丟擲 IllegalMonitorStateException 異常。在 Lock 物件的 lock方法實現中可能丟擲 unchecked 異常。而在使用嘗試機制來獲取鎖的方式中,比如 tryLock(),在進入業務程式碼塊之前,必須先判斷當前執行緒是否持有鎖。

 

鎖的釋放規則與鎖的阻塞等待方式相同。Lock 物件的 unlock 方法在執行時,它會呼叫 AQS 的 tryRelease 方法(取決於具體實現類),如果當前執行緒不持有鎖,則丟擲 IllegalMonitorStateException 異常。

 

2.switch 的 NPE 問題。

 

當 switch 括號內的變數型別為 String 並且此變數為外部引數時,必須先進行 null 判斷。如下的程式碼輸出是什麼?

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
     publicclass SwitchString {         publicstaticvoidmain(String[] args){             method(null);         }          publicstaticvoidmethod(String param){             switch(param){                 // 肯定不是進入這裡                 case"sth":                     System.out.println("it's sth");                     break;                 // 也不是進入這裡                 case"null":                     System.out.println("it's null");                     break;                 // 也不是進入這裡                 default:                     System.out.println("default");             }         }     }

 

3.浮點數的比較問題。

 

1-0.9=0.1是天經地義的,但在計算機的世界裡,0.1恰恰是無法精確表示的一個小數,只有2的冪次倍小數才能夠精確表示,如:0.5、0.25、0.125等。由於0.1是近似表達,在各種情形中的計算存在數位的取捨精度不一樣,所以1-0.9未必等於0.9-0.8,所以浮點數之間的等值判斷,基本資料型別不能用==來比較,包裝資料型別不能用equals來判斷。

 

說明:浮點數採用“尾數+階碼”的編碼方式,類似於科學計數法的“有效數字+指數”的表示方式。二進位制無法精確表示大部分的十進位制小數,具體原理參考《碼出高效》。示例如下:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
    float a = 1.0f - 0.9f;    float b = 0.9f - 0.8f;     if (a == b) {        // 預期進入此程式碼塊,執行其它業務邏輯        // 但是 a==b 的結果為false    }     Float x = Float.valueOf(a);    Float y = Float.valueOf(b);    if (x.equals(y)) {        // 預期進入此程式碼塊,執行其它業務邏輯        // 但是 x.equals(y) 的結果為false    }  

 

《Java開發手冊》自始至終不是最完美的,但是有了業界所有開發者的關注與支援,我們相信它在一步步走向完美。在廣大開發者的建議下,此次“華山版”修正了過往歷史版本的兩個錯誤。

 

1.集合轉陣列時的傳入陣列的空間設定。有讀者追蹤這個問題長達半年之久,大家可以到P3C的ISSUE裡找到關於這段論戰的歷史軌跡。他指出,toArray 的陣列長度必須設定為0。後來我們發現在高併發情況下,他的說法是對的。

 

2.關於 ScheduleService 的刪除。關於這個方法建立執行緒池,雖然可以模仿出來它的 OOM 情況,但是找遍 JDK 沒有任何替代的方式。所以我們回到它的原點問題上,深入地思考會不會有人使用 ScheduleService 的方式,不斷地加入佇列中呢?它是一個定時執行的執行緒池,這種操作方式是不是過於暴力、為賦新詞強說愁?權衡之下,最後新版手冊去掉這條規約的檢測。

 

為了讓更多基礎入門的開發者能更快、準確理解規約背後的思路,此次新版也對部分略顯艱澀的示例做了更生動的解釋。以貼合實際生活場景的視角,幫助讀者理解程式碼世界中的邏輯原理。

 

比如,關於衛語句的說明,原來的例子理解起來是有難度的,修正為從女孩子相親的視角來看待。在巢狀語句的要求中,如果非得使用 if()…else if()…else…方式表達邏輯,請勿超過3層,超過請使用狀態設計模式。超過3層的 if-else 的邏輯判斷程式碼可以使用衛語句、策略模式、狀態模式等來實現,其中衛語句示例如下:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
public class GuardSatementsDemo{             public void findBoyfriend(Man man) {if(man.isBadTemper()) {                     System.out.println(“月球有多遠,你就給我滾多遠.”);                     return;                 }                  if (man.isShort()) {                     System.out.println(“我不需要武大郎一樣的男友.”);                     return;                 }                  if (man.isPoor()) {                     System.out.println(“貧賤夫妻百事哀.”);                     return;                 }                  System.out.println(“可以先交往一段時間看看.”);             }         }

 

特別感謝過去兩年中為《Java開發手冊》提供過寶貴意見與建議的所有開發者,你們是讀者,更是作者,這份榮譽屬於你們!

 


 

One more thing,週一Java測試題的正確答案為“BBBCB”,大家可以在手冊新版中找到解題思路。此外,6月27日,我們誠摯地邀請你與作者孤盡暢聊新版背後的故事,詳解題目深意,並有多本Java好書相贈。

 

歡迎點選“閱讀原文”,訪問阿里雲開發者社群,預約直播,下週三我們不見不散~

 

小彩蛋來啦!

 

對於時隔一年釋出的《Java開發手冊》最新版,你有哪些感想或建議?歡迎在留言區討論分享,我們將挑選5位最用心的同學送出《碼出高效》技術好書。

下載地址:

https://alitech-private.oss-cn-beijing.aliyuncs.com/1560932768000/Java%20huashan.pdf?Expires=1560944937&OSSAccessKeyId=LTAIqKGWQyF6Vd3W&Signature=Hsau8EUtCfJn5i8bpkPK1ClSJVQ%3D&nsukey=ljkSvnAz%2FB4VbPL0IPdtKfQjclvQJSkzq3O29dEKOjPd%2BJxMO5DyGERhQu4RBU7TWCzz10aCV1IvPJWOz8gAuFLkffaoueu650FXQDgiMzqTxmfUy1h0UBq7ciga91a%2BugXn8zdJhhKOS0BQOp%2BuASIcLw3H7%2Fw%2FZZCunaGTJdsaiYCbk%2FDTwct4Lk36xVKEYKxxOD6CsFyrTpBGyKM0Dw%3D%3D

相關推薦

轉載Java 開發手冊今日釋出全球開發者致敬

致全球Java開發者:   程式碼是二進位制世界的交流方式,極致的程式碼是我們的榮耀。   2017年

碼出高效碼出質量:雲棲大會的阿里Java開發手冊最新版正式釋出

"這是凝聚了阿里眾多Java開發人員多年經驗的Java開發手冊,強烈推薦Java程式設計師們看看,裡面的很多規則甚至是多次慘痛的故障經驗才形成的,另外在規則上諸如空格,命名等規範,很容易形成爭論,但對於一家公司而言,最重要的是要有統一規範(所以有些時候沒必要太糾結),對於程

《阿里巴巴Android開發手冊》正式釋出安卓開發者的福音

先上核心內容: 認證考試地址請點選 阿里巴巴Android開發手冊-點選下載 春節餘味尚未消,我們為移動開發者準備了一份遲到的新年禮物——《阿里巴巴Android開發手冊》,繼《阿里巴巴Java開發手冊》之後,阿里巴巴開發規範家族又添一丁,「阿里巴巴Android開發規範」

千呼萬喚始出來—阿里正式釋出Java開發手冊》終極版

摘要: 本文講的是阿里正式釋出《Java開發手冊》終極版!,別人都說我們是碼農,但我們知道,自己是個藝術家。也許我們不過多在意自己的外表和穿著,但我們不羈的外表下,骨子裡追求著程式碼的美、質量的美。而程式碼規約其實就是一個對美的定義。 經過阿里開發工程師的不斷完善,改進。《JA

阿里巴巴Java開發手冊建議建立HashMap時設定初始化容量但是多少合適呢?

集合是Java開發日常開發中經常會使用到的,而作為一種典型的K-V結構的資料結構,HashMap對於Java開發者一定不陌生。 關於HashMap,很多人都對他有一些基本的瞭解,比如他和hashtable之間的區別、他和concurrentHashMap之間的區別等。這些都是比較常見的,關於HashMap的一

阿里出品的最新版 Java 開發手冊嵩山版掃地僧

說起嵩山,我就想起喬峰,想起慕容復,以及他們兩位老爹在少林寺大戰的場景。當然了,最令我印象深刻的就是那位默默無聞,卻一鳴驚人的掃地僧啊。這次,阿里出品的嵩山版 Java 開發手冊的封面就有一個掃地僧,唉,這就厲害了呀! 嵩山少林寺位於河南省登封市,始建於北魏太和十九年,號稱“天下第一名剎”。這意味著什麼?

alibaba-Java開發手冊心得-一編程規約-1命名風格

tor abs 形容詞 通用 架構設計 test arc 單詞 快速 1.【強制】不能以 _ $開始 或結束 2.【強制】嚴禁使用 拼音和英文混合,或中文。即使是純拼音也要避免使用。除非是國際通用的例如taobao youku 等。 3.【強制】類名 必須遵從駝峰形式Upp

alibaba-Java開發手冊心得-一編程規約-6並發處理

工廠 com 線程資源 資源 以及 指定 導致 java java開發 1. 【強制】獲取單例對象需要保證線程安全,其中的方法也要保證線程安全。 說明:資源驅動類、工具類、單例工廠類都需要註意。 2. 【強制】創建線程或線程池時請指定有意義的線程名稱,方便出錯時回溯。 3

阿裏巴巴Java 開發手冊編程規約之OOP規約

final 可變參 區間 成員變量 hello ide 數據 通過 查詢 1. 【強制】避免通過一個類的對象引用訪問此類的靜態變量或靜態方法,無謂增加編譯器解析成本,直接用類名來訪問即可。2. 【強制】所有的覆寫方法,[email protected]/* */

阿裏巴巴Java 開發手冊編程規約之MySQL 數據庫

影響 含義 delayed 建表 decimal 冗余字段 ger 無法 font (一)建表規約1. 【強制】表達是與否概念的字段,必須使用 is_xxx 的方式命名,數據類型是 unsigned tinyint(1 表示是, 0 表示否) 。說明: 任何字段如果為非負數

阿裏巴巴Java開發手冊上常規的編程命名總結

toa 打印 cond 大於 version 適配 false sta ash 阿裏巴巴Java開發手冊上常規的編程命名總結:1.類名必須駝峰.例子:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 2.方

阿裏巴巴Java開發手冊

阿裏巴巴java開發手冊一,命名風格1,(強制)類的命名使用駝峰命名,DO(表名的數據對象),DTO(頁面數據傳輸對象),VO(展示對象),可以以上的結尾,可以不遵守駝峰規則。(POJO是以上的統稱)2,(強制)抽象類使用Abstract開頭,異常類使用Exception結尾,測試類使用Test結尾,枚舉類使

阿裏正式發布《Java開發手冊》終極版

定義 沒有 系統 設計文檔 cor bsp tomat cal table 摘要: 本文講的是阿裏正式發布《Java開發手冊》終極版!,別人都說我們是碼農,但我們知道,自己是個藝術家。也許我們不過多在意自己的外表和穿著,但我們不羈的外表下,骨子裏追求著代碼的美、質量的美。而

Java代碼規範_插件_阿裏java開發手冊

阿裏 git 列表 jdk1.8 osi pos sta 問題 check 給大家分享一個阿裏巴巴的java開發規範,在日常自動化工作中我們可以參考一下,特別是用java進行coding的同學。 而且還可以利用相應的插件進行代碼掃描檢測,感興趣的們可以馬上應用到自動化中來。

命名規範及部分書寫規範----參照阿裏巴巴java開發手冊

實現類 toc tcpudp size 全部 sla 工具類 apr alibaba 只列一些我能看懂的.... 1類名使用 UpperCamelCase 風格,必須遵從駝峰形式,但以下情形例外:DO / BO / DTO / VO / AO   正例:MarcoPolo

阿裏巴巴java開發手冊pdf

集合 sql 沒有 大學生 之間 現實 換行 求職者 -c 下載地址:網盤下載 編輯推薦規範了Java開發準則與代碼編寫習慣將直接影響Java從業者、求職者和在校相關專業大學生等逾百萬的計算機相關人群以阿裏的技術底蘊,以一個獨特的視角地成為影響到世界的經典計

IntelliJ IDEA 插件 阿裏巴巴Java開發手冊(Alibaba Java Coding Guidelines)

修改 rdquo 點擊 就會 mic 綠色 ips 異常 pan 以前看到過個:Java開發手冊(阿裏巴巴-公開版),這是個pdf文檔,裏面描述了一些Java開發的規約,裏面確實有很多好用的規約,要是在學校就有機會看看的話,那麽,在畢業之後,實際工作中就會少很多坑。現在,阿

阿裏巴巴java開發手冊 註釋規約

ima png src mage log 手冊 技術分享 分享圖片 java開發手冊 阿裏巴巴java開發手冊 註釋規約

Java開發速度神器LombokEclipse端安裝使用教程

eight equals reflect 其它 代碼生成器 blog 原理 只需要 string 一、Lombok簡介 Lombok是一個代碼生成器,可以通過簡單的註解形式來幫助我們簡化消除一些必須有但顯得很臃腫的Java代碼的工具,通過使用對應的註解,可以在編譯源碼的

在北京三年java開發經驗月薪16k如何在四年經驗時要到20k?

sql 任務 mongodb 語言 都是 阿裏 中間 python soa 3年JAVA程序員的自評 半道出家的程序員,從不偽造簡歷,起點低,三年時才16k月薪*14在北京,認為混的比較差。 當然補充一句,不要拿應屆生的所謂待遇來比,不是你比不起,而是這麽比沒意義,應屆生接