源文件編碼格式為
UTF-8
ASCII
水平空格字符(0x20悄窃,即空格)是源文件中唯一允許出現(xiàn)的空白字符,這意味著:所有其它字符串中的空白字符都要進行轉義。對于具有特殊轉義序列的任何字符(\b, \t, \n, \f, \r, \“, \‘)乍炉,我們使用它的轉義序列,而不是相應的八進制(比如 \012 )或
Unicode
(比如 \u000a )轉義滤馍。-
在使用
Unicode
轉義符或是一些實際的Unicode
字符時岛琼,建議做些注釋給出解釋,這有助于別人閱讀和理解巢株。
image.png 一個源文件應包含(每個部分用一個空行隔開):
1)許可證或版權信息
2)package語句:寫在一行上
3)import語句:a.不要出現(xiàn)通配符槐瑞,如:import java.util.*; b.import語句不要換行 c.每組由一個空行隔開,組內(nèi)不空行
4)一個頂級類:a.每個類應該以某種邏輯去排序它的成員 b.當一個類有多個構造函數(shù)或是多個同名方法阁苞,這些函數(shù)或方法應該按順序出現(xiàn)在一起 c.大括號
{ }
:a.
使用大括號困檩,即使它是可選的。b.
對于非空塊和塊狀結構那槽,大括號遵循Kernighan和Ritchie風格悼沿,即左大括號前不換行,后換行骚灸;右大括號前換行糟趾,若是一個語句或函數(shù)體的終止,則后換行逢唤,否則不換行。c.
空的塊狀結構可不換行涤浇,如void doNothing() {}鳖藕;多塊語句的一部分,即使大括號內(nèi)沒內(nèi)容只锭,也要換行著恩,如if/else,try/catch/finally每當開始一個新的塊,縮進增加2個空格,當塊結束時喉誊,縮進返回先前的縮進級別邀摆。縮進級別適用于代碼和注釋伍茄。
一行一個語句栋盹。
提取方法或局部變量可以有效解決代碼過長的問題。
自動換行的基本準則:傾向于在更高的語法級別出斷開:
a.
如果在非賦值運算符
處斷開敷矫,那么在該符號前斷開例获,如+,它將位于下一行曹仗。b.
如果在賦值運算符
處斷開榨汤,那么在該符號后斷開,如=怎茫,它將與前面的內(nèi)容留在同一行收壕。c.
左括號與方法名或函數(shù)名留在同一行。d.
逗號與其前面的內(nèi)容留在一行沒有必要使用多個連續(xù)的空行轨蛤。
單個
ASCII
空格出現(xiàn)在如下幾個地方:a.
分隔任何保留字與其后的左括號蜜宪,如if,for俱萍,catchb.
分隔任何保留字與其前面的右大括號端壳,如else,catchc.
任何左大括號前d.
任何二元或三元運算符的兩側e.
注釋的//兩邊要有空格f.
類型和變量之間枪蘑,如List listg.
數(shù)據(jù)初始化中中括號內(nèi)的空格可選损谦,如new int[ ] {5,6}-
水平對齊:通過增加可變數(shù)量的空格來使某一行的字符與上一行的相應字符對齊岳颇。雖然增加了可讀性照捡,但是后期維護工作復雜。
image.png
變量聲明:
a.
每次只聲明一個變量话侧,不要使用組合聲明栗精,如int x,yb.
在需要的時候才聲明瞻鹏,而不是在代碼塊的開頭就把變量一次性都聲明了悲立,最好在聲明時就進行初始化,或者盡快進行初始化新博。-
數(shù)組初始化可寫成塊狀結構薪夕,如
image.png -
在一個switch塊內(nèi),每個語句組要么通過break赫悄,continue原献,return或拋出異常來終止馏慨,要么通過一條注釋來說明程序將繼續(xù)執(zhí)行到下一個語句組,如//fall through
image.png 每個switch語句都包含一個default語句組姑隅,即使它什么代碼也不包含写隶。
對于多行的
/*……*/
注釋,后續(xù)必須從*
開始讲仰,并且與前一行的*
對齊慕趴。類和成員的modifiers如果存在,則按Java語言規(guī)范中推薦的順序出現(xiàn)叮盘。public protected private abstract static final transient volatile synchronized native strictfp
20.命名規(guī)范: a.
包名全部小寫 b.
類名秩贰,接口名首字母大寫,測試類以Test結尾 c.
方法名柔吼,變量名首單詞小寫毒费,其余單詞首字母大寫 d.
常量名全部大寫,單詞之間用_連接
@Override愈魏,能用就用
-
使用類名調(diào)用靜態(tài)的類成員觅玻,而不是某個具體對象或表達式。
image.png 盡量不要使用Finalizers