For investors
股價(jià):
5.36 美元 %For investors
股價(jià):
5.36 美元 %認(rèn)真做教育 專心促就業(yè)
程序員想要獲得高薪和自身的技能是密不可分的,有時(shí)候既和代碼能力有關(guān)系,很多時(shí)候和代碼的簡介,明了也有直接的關(guān)系,作為一名程序員寫代碼亂糟糟的咋行呢?所以今天我將我在《阿里巴巴Java開發(fā)手冊(cè)》中看到的一些有用的、適合初級(jí)程序員的代碼基本規(guī)范,分享給大家!
1.【強(qiáng)制】 大括號(hào)的使用約定。如果是大括號(hào)內(nèi)為空,則簡潔地寫成{}即可,不需要換行;如果是非空代碼塊則:
1) 左大括號(hào)前不換行。
2) 左大括號(hào)后換行。
3) 右大括號(hào)前換行。
4) 右大括號(hào)后還有 else 等代碼則不換行;表示終止的右大括號(hào)后必須換行。
2.【強(qiáng)制】 左小括號(hào)和字符之間不出現(xiàn)空格;同樣,右小括號(hào)和字符之間也不出現(xiàn)空格。詳見第 5 條下方正例提示。
反例:if (空格 a == b 空格)
3.【強(qiáng)制】 if/for/while/switch/do 等保留字與括號(hào)之間都必須加空格。
4.【強(qiáng)制】 任何二目、三目運(yùn)算符的左右兩邊都需要加一個(gè)空格。
說明:運(yùn)算符包括賦值運(yùn)算符=、邏輯運(yùn)算符&&、加減乘除符號(hào)等。
5.【強(qiáng)制】 采用 4 個(gè)空格縮進(jìn),禁止使用 tab 字符。
說明:如果使用 tab 縮進(jìn),必須設(shè)置 1 個(gè) tab 為 4 個(gè)空格。IDEA 設(shè)置 tab 為 4 個(gè)空格時(shí),請(qǐng)勿勾選 Use tab character;而在 eclipse 中,必須勾選 insert spaces for tabs。
正例:(涉及上面五點(diǎn))
public static void main(String[] args) { // 縮進(jìn) 4 個(gè)空格 String say = "hello"; // 運(yùn)算符的左右必須有一個(gè)空格 int flag = 0; // 關(guān)鍵詞 if 與括號(hào)之間必須有一個(gè)空格,括號(hào)內(nèi)的 f 與左括號(hào),0 與右括號(hào)不需要空格 if (flag == 0) { System.out.println(say); } // 左大括號(hào)前加空格且不換行;左大括號(hào)后換行 if (flag == 1) { System.out.println("world"); // 右大括號(hào)前換行,右大括號(hào)后有 else,不用換行 } else { System.out.println("ok"); // 在右大括號(hào)后直接結(jié)束,則必須換行 } }
6.【強(qiáng)制】 注釋的雙斜線與注釋內(nèi)容之間有且僅有一個(gè)空格。
正例:// 注釋內(nèi)容,注意在//和注釋內(nèi)容之間有一個(gè)空格。
7.【強(qiáng)制】 行字符數(shù)限制不超過 120 個(gè),超出需要換行,換行時(shí)遵循如下原則:
1) 第二行相對(duì)第一行縮進(jìn) 4 個(gè)空格,從第三行開始,不再繼續(xù)縮進(jìn),參考示例。
2) 運(yùn)算符與下文一起換行。
3) 方法調(diào)用的點(diǎn)符號(hào)與下文一起換行。
4) 方法調(diào)用時(shí),多個(gè)參數(shù),需要換行時(shí),在逗號(hào)后進(jìn)行。
5) 在括號(hào)前不要換行,見反例。
正例:
StringBuffer sb = new StringBuffer(); // 超過 120 個(gè)字符的情況下,換行縮進(jìn) 4 個(gè)空格,點(diǎn)號(hào)和方法名稱一起換行 sb.append("zi").append("xin")... .append("huang")... .append("huang")... .append("huang");
反例:
StringBuffer sb = new StringBuffer(); // 超過 120 個(gè)字符的情況下,不要在括號(hào)前換行 sb.append("zi").append("xin")...append ("huang"); // 參數(shù)很多的方法調(diào)用可能超過 120 個(gè)字符,不要在逗號(hào)前換行 method(args1, args2, args3, ... , argsX);
8.【強(qiáng)制】 方法參數(shù)在定義和傳入時(shí),多個(gè)參數(shù)逗號(hào)后邊必須加空格。
正例:下例中實(shí)參的"a",后邊必須要有一個(gè)空格。
method("a", "b", "c");
9.【強(qiáng)制】 IDE 的 text file encoding 設(shè)置為 UTF-8; IDE 中文件的換行符使用 Unix 格式,不要使用 Windows 格式。
10.【推薦】 沒有必要增加若干空格來使某一行的字符與上一行對(duì)應(yīng)位置的字符對(duì)齊。
正例:
int a = 3; long b = 4L; float c = 5F; StringBuffer sb = new StringBuffer();
說明:增加 sb 這個(gè)變量,如果需要對(duì)齊,則給 a、b、c 都要增加幾個(gè)空格,在變量比較多的情況下,是一種累贅的事情。
11.【推薦】 方法體內(nèi)的執(zhí)行語句組、變量的定義語句組、不同的業(yè)務(wù)邏輯之間或者不同的語義之間插入一個(gè)空行。相同業(yè)務(wù)邏輯和語義之間不需要插入空行。
說明:沒有必要插入多個(gè)空行進(jìn)行隔開。
12.【強(qiáng)制】 避免通過一個(gè)類的對(duì)象引用訪問此類的靜態(tài)變量或靜態(tài)方法,無謂增加編譯器解析成本,直接用類名來訪問即可。
13.【強(qiáng)制】 不能使用過時(shí)的類或方法。
說明:java.net.URLDecoder中的方法 decode(String encodeStr) 這個(gè)方法已經(jīng)過時(shí),應(yīng)該使用雙參數(shù) decode(String source, String encode)。接口提供方既然明確是過時(shí)接口,那么有義務(wù)同時(shí)提供新的接口;作為調(diào)用方來說,有義務(wù)去考證過時(shí)方法的新實(shí)現(xiàn)是什么。
14.【強(qiáng)制】Object 的 equals 方法容易拋空指針異常,應(yīng)使用常量或確定有值的對(duì)象來調(diào)用equals。
正例:"test".equals(object);
反例:object.equals("test");
說明:推薦使用 java.util.Objects#equals(JDK7 引入的工具類)
15.【強(qiáng)制】 所有的相同類型的包裝類對(duì)象之間值的比較,全部使用 equals 方法比較。
說明:對(duì)于 Integer var = ? 在-128 至 127 范圍內(nèi)的賦值,Integer 對(duì)象是在 IntegerCache.cache 產(chǎn)生,會(huì)復(fù)用已有對(duì)象,這個(gè)區(qū)間內(nèi)的 Integer 值可以直接使用==進(jìn)行 判斷,但是這個(gè)區(qū)間之外的所有數(shù)據(jù),都會(huì)在堆上產(chǎn)生,并不會(huì)復(fù)用已有對(duì)象,這是一個(gè)大坑,推薦使用 equals 方法進(jìn)行判斷。
16.【強(qiáng)制】 構(gòu)造方法里面禁止加入任何業(yè)務(wù)邏輯,如果有初始化邏輯,請(qǐng)放在 init 方法中。
17.【強(qiáng)制】 POJO 類必須寫 toString 方法。使用 IDE 的中工具:source> generate toString時(shí),如果繼承了另一個(gè) POJO 類,注意在前面加一下 super.toString。
說明:在方法執(zhí)行拋出異常時(shí),可以直接調(diào)用 POJO 的 toString()方法打印其屬性值,便于排查問題。
18.【推薦】 使用索引訪問用 String 的 split 方法得到的數(shù)組時(shí),需做最后一個(gè)分隔符后有無內(nèi)容的檢查,否則會(huì)有拋 IndexOutOfBoundsException 的風(fēng)險(xiǎn)。
說明:
String str = "a,b,c,,"; String[] ary = str.split(","); // 預(yù)期大于 3,結(jié)果是 3System.out.println(ary.length);
19.【推薦】 當(dāng)一個(gè)類有多個(gè)構(gòu)造方法,或者多個(gè)同名方法,這些方法應(yīng)該按順序放置在一起,便于閱讀,此條規(guī)則優(yōu)先于第 15 條規(guī)則。
20.【推薦】 類內(nèi)方法定義順序依次是:公有方法或保護(hù)方法 > 私有方法 > getter/setter方法。
說明:公有方法是類的調(diào)用者和維護(hù)者最關(guān)心的方法,首屏展示最好;保護(hù)方法雖然只是子類關(guān)心,也可能是“模板設(shè)計(jì)模式”下的核心方法;而私有方法外部一般不需要特別關(guān)心,是一個(gè)黑盒實(shí)現(xiàn);因?yàn)槌休d的信息價(jià)值較低,所有 Service 和 DAO 的 getter/setter 方法放在類體最后。
21.【推薦】 setter 方法中,參數(shù)名稱與類成員變量名稱一致,this.成員名 = 參數(shù)名。在getter/setter 方法中,不要增加業(yè)務(wù)邏輯,增加排查問題的難度。
反例:
public Integer getData() { if (true) { return this.data + 100; } else { return this.data - 100; } }
22.【推薦】 循環(huán)體內(nèi),字符串的連接方式,使用 StringBuilder 的 append 方法進(jìn)行擴(kuò)展。
說明:反編譯出的字節(jié)碼文件顯示每次循環(huán)都會(huì) new 出一個(gè) StringBuilder 對(duì)象,然后進(jìn)行append 操作,最后通過 toString 方法返回 String 對(duì)象,造成內(nèi)存資源浪費(fèi)。
反例:
String str = "start"; for (int i = 0; i < 100; i++) { str = str + "hello"; }
23.【推薦】 final 可以聲明類、成員變量、方法、以及本地變量,下列情況使用 final 關(guān)鍵字:
1) 不允許被繼承的類,如:String 類。
2) 不允許修改引用的域?qū)ο?,如:POJO 類的域變量。
3) 不允許被重寫的方法,如:POJO 類的 setter 方法。
4) 不允許運(yùn)行過程中重新賦值的局部變量。
5) 避免上下文重復(fù)使用一個(gè)變量,使用 final 描述可以強(qiáng)制重新定義一個(gè)變量,方便更好地進(jìn)行重構(gòu)。
24.【強(qiáng)制】 中括號(hào)是數(shù)組類型的一部分,數(shù)組定義如下:String[] args;
25.【強(qiáng)制】 POJO類中布爾類型的變量,都不要加is,否則部分框架解析會(huì)引起序列化錯(cuò)誤;
26.【推薦】 除常用方法(如 getXxx/isXxx)等外,不要在條件判斷中執(zhí)行其它復(fù)雜的語句,將復(fù)雜邏輯判斷的結(jié)果賦值給一個(gè)有意義的布爾變量名,以提高可讀性。
說明:很多 if 語句內(nèi)的邏輯相當(dāng)復(fù)雜,閱讀者需要分析條件表達(dá)式的最終結(jié)果,才能明確什么樣的條件執(zhí)行什么樣的語句,那么,如果閱讀者分析邏輯表達(dá)式錯(cuò)誤呢?
正例:// 偽代碼如下:
final boolean existed = (file.open(fileName, "w") != null) && (...) || (...); if (existed) { ... }
27.【強(qiáng)制】 在 if/else/for/while/do 語句中必須使用大括號(hào)。即使只有一行代碼,避免采用單行的編碼方式:if (condition) statements;
28.【推薦】類內(nèi)方法定義順序依次是:公有方法或保護(hù)方法>私有方法>getter/setter方法;
說明:公有方法是類的調(diào)用者和維護(hù)者最關(guān)心的方法,首屏展示最好;保護(hù)方法雖然只是子類關(guān)心,也可能是“模板設(shè)計(jì)模式”下的核心方法;而私有方法外部一般不需要特別關(guān)心,是一個(gè)黑盒實(shí)現(xiàn);因?yàn)槌休d的信息價(jià)值較低,所有 Service 和 DAO 的 getter/setter 方法放在類體最后。
仔細(xì)看下來,是不是覺得其實(shí)也沒有那么難懂,但會(huì)了這些,阿里要你的概率就加大了哦。我們的第一目標(biāo)就是進(jìn)入阿里不是么?
其實(shí)在職業(yè)發(fā)展的后期,工資僅僅是零花錢了,更重要的是股權(quán)激勵(lì)。即使月薪相差1萬,10年的差別還不夠在北京付個(gè)首付。但是阿里上市,成就了多少千萬富翁!
與其對(duì)未來充滿迷茫,不如來達(dá)內(nèi)學(xué)習(xí)一門好技術(shù)改變?nèi)松?。只要你想,?mèng)想就一定會(huì)實(shí)現(xiàn)。達(dá)內(nèi)喜歡懷揣夢(mèng)想的你,目前達(dá)內(nèi)推出1月免費(fèi)體驗(yàn)營,如果你比較迷??梢詠磉_(dá)內(nèi)體驗(yàn)營感受一下,也可以找到自己的方向。
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)?jiān)?0日內(nèi)與聯(lián)系我們,我們會(huì)予以更改或刪除相關(guān)文章,以保證您的權(quán)益!