日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

阿里Java编程规约(控制语句)

發布時間:2023/12/13 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿里Java编程规约(控制语句) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【強制】在一個 switch 塊內,每個 case 要么通過 continue/break/return 等來終止,要么

注釋說明程序將繼續執行到哪一個 case 為止;在一個 switch 塊內,都必須包含一個

default 語句并且放在最后,即使它什么代碼也沒有。

說明:注意 break 是退出 switch 語句塊,而 return 是退出方法體。

【強制】 switch 括號內的變量類型為 String 并且此變量為外部參數時,必須先進行 null

判斷。

反例:猜猜下面的代碼輸出是什么?

public static void method(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"); }} }

【強制】 if/else/for/while/do 語句中必須使用大括號。

說明:即使只有一行代碼,避免采用單行的編碼方式:if (condition) statements;

【強制】在高并發場景中,避免使用等于判斷作為中斷或退出的條件。

說明:如果并發控制沒有處理好,容易產生等值判斷被擊穿的情況,使用大于或小于的區間判斷條件

來代替。

反例:判斷剩余獎品數量等于 0 時,終止發放獎品,但因為并發處理錯誤導致獎品數量瞬間變成了負數,

這樣的話,活動無法終止。

【推薦】表達異常的分支時,少用 if-else 方式,這種方式可以改寫成:

if (condition) {

...

return obj; }

// 接著寫 else 的業務邏輯代碼;

說明:如果非使用 if()...else if()...else...方式表達邏輯,避免后續代碼維護困難,【強制】請勿超過 3 層。

正例:超過 3 層的 if-else 的邏輯判斷代碼可以使用衛語句、策略模式、狀態模式等來實現,其中衛語句

即代碼邏輯先考慮失敗、異常、中斷、退出等直接返回的情況,以方法多個出口的方式,解決代碼中判斷

分支嵌套的問題,這是逆向思維的體現。

示例如下:

public void findBoyfriend(Man man) {if (man.isUgly()) {System.out.println("本姑娘是外貌協會的資深會員");return; }if (man.isPoor()) {System.out.println("貧賤夫妻百事哀");return; }if (man.isBadTemper()) {System.out.println("銀河有多遠,你就給我滾多遠");return; }System.out.println("可以先交往一段時間看看"); }

【推薦】除常用方法(如 getXxx/isXxx)等外,不要在條件判斷中執行其它復雜的語句,將復

雜邏輯判斷的結果賦值給一個有意義的布爾變量名,以提高可讀性。

說明:很多 if 語句內的邏輯表達式相當復雜,與、或、取反混合運算,甚至各種方法縱深調用,理解成

本非常高。如果賦值一個非常好理解的布爾變量名字,則是件令人爽心悅目的事情。

正例:

// 偽代碼如下

final boolean existed = (file.open(fileName, "w") != null) && (...) || (...);

if (existed) {?...}

反例:

public final void acquire(long arg) {

if (!tryAcquire(arg) &&

acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) {

?selfInterrupt();

}

}

【推薦】不要在其它表達式(尤其是條件表達式)中,插入賦值語句。

說明:賦值點類似于人體的穴位,對于代碼的理解至關重要,所以賦值語句需要清晰地單獨成為一行。

反例:

public Lock getLock(boolean fair) {

// 算術表達式中出現賦值操作,容易忽略 count 值已經被改變 threshold = (count = Integer.MAX_VALUE) - 1;

// 條件表達式中出現賦值操作,容易誤認為是 sync==fair return (sync = fair) ? new FairSync() : new NonfairSync();

}

【推薦】循環體中的語句要考量性能,以下操作盡量移至循環體外處理,如定義對象、變

量、獲取數據庫連接,進行不必要的 try-catch 操作這個 try-catch 是否可以移至循環體

【推薦】避免采用取反邏輯運算符。

說明:取反邏輯不利于快速理解,并且取反邏輯寫法必然存在對應的正向邏輯寫法。

正例:使用 if (x < 628) 來表達 x 小于 628

反例:使用 if (!(x >= 628)) 來表達 x 小于 628

【推薦】接口入參保護,這種場景常見的是用作批量操作的接口。

【參考】下列情形,需要進行參數校驗:

1 調用頻次低的方法。

2 執行時間開銷很大的方法。此情形中,參數校驗時間幾乎可以忽略不計,但如果因為參數錯誤導致

中間執行回退,或者錯誤,那得不償失。

3 需要極高穩定性和可用性的方法。

4 對外提供的開放接口,不管是 RPC/API/HTTP 接口。

5 敏感權限入口。

【參考】下列情形,不需要進行參數校驗:

1 極有可能被循環調用的方法。但在方法說明里必須注明外部參數檢查要求。

2 底層調用頻度比較高的方法。畢竟是像純凈水過濾的最后一道,參數錯誤不太可能到底層才會暴露

問題。一般 DAO 層與 Service 層都在同一個應用中,部署在同一臺服務器中,所以 DAO 的參數校驗,可

以省略。

3 被聲明成 private 只會被自己代碼所調用的方法,如果能夠確定調用方法的代碼傳入參數已經做過檢

查或者肯定不會有問題,此時可以不校驗參數。

總結

以上是生活随笔為你收集整理的阿里Java编程规约(控制语句)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。