上篇轉帖的blog裏面提到了Go的特性,做爲編寫Java時也能夠給本身點編程風格的參考。java
下面是提到的改進編程
下面簡單學習和分析一下重點的風格提示,領會Ken和Pike的編程思想:數組
規範的語法(不須要符號表來解析) 垃圾回收(獨有) 無頭文件 明確的依賴 無循環依賴 常量只能是數字 int和int32是兩種類型 字母大小寫設置可見性(letter case sets visibility) 任何類型(type)都有方法(不是類型) 沒有子類型繼承(不是子類) 包級別初始化以及明確的初始化順序 文件被編譯到一個包裏 包package-level globals presented in any order 沒有數值類型轉換(常量起輔助做用) 接口隱式實現(沒有「implement」聲明) 嵌入(不會提高到超類) 方法按照函數聲明(沒有特別的位置要求) 方法即函數 接口只有方法(沒有數據) 方法經過名字匹配(而非類型) 沒有構造函數和析構函數 postincrement(如++i)是狀態,不是表達式 沒有preincrement(i++)和predecrement 賦值不是表達式 明確賦值和函數調用中的計算順序(沒有「sequence point」) 沒有指針運算 內存一直以零值初始化 局部變量取值合法 方法中沒有「this」 分段的堆棧 沒有靜態和其它類型的註釋 沒有模板 沒有異常 內建string、slice和map 數組邊界檢查
常量只能是數字函數
能夠學習。在jdbc編程的時候,咱們把SQL語句提成配置文件。工具
沒有子類型繼承(不是子類)post
少用繼承學習
包級別初始化以及明確的初始化順序this
注意靜態變量和構造函數裏面的初始化順序,Java裏面的順序是和靜態變量的在類裏面聲明的出現順序有關係的。spa
文件被編譯到一個包裏指針
少用別人的Jar包,減小DLL噩夢和Jar噩夢。
接口隱式實現(沒有「implement」聲明)
適當使用Object類型,JFinal就這麼作的。效率很高。
嵌入(不會提高到超類)
多聚合,多組合,少繼承
方法按照函數聲明(沒有特別的位置要求)
能靜態的方法就都靜態化,提升效率。還有能夠將靜態方法放到一個工具類裏面,不初始化此類,直接調用。FastJson就是這樣作的。極大提升效率。
方法即函數
同上
接口只有方法(沒有數據)
interface裏面不聲明數據。Java社區以前爭論過不少的問題,go給出一個參考答案。
方法經過名字匹配(而非類型)
這個適量使用Object前提。
沒有構造函數和析構函數
不要依賴構造函數,能夠考慮編寫init方法和destory方法,手動獲取,釋放連接和空間,提升效率。
postincrement(如++i)是狀態,不是表達式
慎用++
沒有preincrement(i++)和predecrement
不用++
賦值不是表達式
防止最2的==和=混淆
明確賦值和函數調用中的計算順序(沒有「sequence point」)
多用括號。提升計算順序可讀性
內存一直以零值初始化
注意初始化的值。看狀況是否要賦值初值。
方法中沒有「this」
哈,好東西。很是重要的提醒!!以前我在編程的時候隱隱約約以爲this不是很穩當。帶來大量的歧義和隱患。
沒有模板
Java的模板太噁心。雖然效率低下,可是仍是要使用反射構造器。。。
沒有異常
少用異常作處理,能預測的故障儘可能寫程序控制。
內建string、slice和map
找一個趁手的string,map工具。沒有的話,要本身寫一個,我選擇guava。
數組邊界檢查
注意越界,錯誤。全部的直接對數組的讀取以前都要判斷數組裏面的數值個數,千萬別越界。