<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java 斷言 > 原文: [https://www.programiz.com/java-programming/assertions](https://www.programiz.com/java-programming/assertions) #### 在本教程中,我們將借助示例學習 Java 斷言(Java 斷言)。 Java 斷言通過測試代碼來檢測錯誤,我們認為這是正確的。 使用`assert`關鍵字進行斷言。 其語法為: ```java assert condition; ``` 在這里,`condition`是一個布爾表達式,我們假定在程序執行時為`true`。 * * * ## 啟用斷言 默認情況下,斷言在運行時被禁用并被忽略。 為了啟用斷言,我們使用: ```java java -ea:arguments ``` 要么 ```java java -enableassertions:arguments ``` 啟用斷言且條件為`true`時,程序將正常執行。 但是,如果在啟用斷言的情況下條件求值為`false`,則 JVM 會拋出`AssertionError`,程序將立即停止。 * * * ### 示例 1:Java 斷言 ```java class Main { public static void main(String args[]) { String[] weekends = {"Friday", "Saturday", "Sunday"}; assert weekends.length == 2; System.out.println("There are " + weekends.length + " weekends in a week"); } } ``` **輸出** ```java There are 3 weekends in a week ``` 我們得到上面的輸出,因為該程序沒有編譯錯誤,并且默認情況下,斷言被禁用。 啟用斷言后,我們得到以下輸出: ```java Exception in thread "main" java.lang.AssertionError ``` * * * ## 斷言聲明的另一種形式 ```java assert condition : expression; ``` 在這種形式的斷言語句中,將表達式傳遞到`AssertionError`對象的構造器。 如果條件為`false`,則此表達式的值顯示為錯誤的詳細信息。 詳細消息用于捕獲和傳輸斷言失敗的信息,以幫助調試問題。 * * * ### 示例 2:帶有表達式示例的 Java 斷言 ```java class Main { public static void main(String args[]) { String[] weekends = {"Friday", "Saturday", "Sunday"}; assert weekends.length==2 : "There are only 2 weekends in a week"; System.out.println("There are " + weekends.length + " weekends in a week"); } } ``` **輸出**: ```java Exception in thread "main" java.lang.AssertionError: There are only 2 weekends in a week ``` 從上面的示例中可以看到,表達式被傳遞給`AssertionError`對象的構造器。 如果我們的假設是`false`并且啟用了斷言,則會拋出異常并附帶一條適當的消息。 此消息有助于診斷和修復導致斷言失敗的錯誤。 * * * ## 對特定的類和包啟用斷言 如果我們不向斷言命令行開關提供任何參數, ```java java -ea ``` 這將在除系統類之外的所有類中啟用斷言。 我們還可以使用參數為特定的類和包啟用斷言。 可以提供給這些命令行開關的參數為: **啟用類名中的斷言** 為了對程序`Main`的所有類啟用斷言, ```java java -ea Main ``` 要僅啟用一個類, ```java java -ea:AnimalClass Main ``` 這僅允許在`Main`程序的`AnimalClass`中聲明。 **啟用包名稱中的斷言** 要僅啟用包`com.animal`及其子包的斷言, ```java java -ea:com.animal... Main ``` **啟用未命名包中的斷言** 要在當前工作目錄中的未命名包中啟用斷言(當我們不使用`package`語句時)。 ```java java -ea:... Main ``` **啟用系統類中的斷言** 為了在系統類中啟用斷言,我們使用不同的命令行開關: ```java java -esa:arguments ``` OR ```java java -enablesystemassertions:arguments ``` 可以提供給這些開關的參數是相同的。 * * * ## 禁用斷言 要禁用斷言,我們使用: ```java java -da arguments ``` OR ```java java -disableassertions arguments ``` 要禁用系統類中的斷言,我們使用: ```java java -dsa:arguments ``` OR ```java java -disablesystemassertions:arguments ``` 禁用斷言時可以傳遞的參數與啟用斷言時相同。 * * * ## 斷言的優點 1. 快速高效地檢測和糾正錯誤。 2. 斷言檢查僅在開發和測試期間進行。 它們會在運行時自動刪除在生產代碼中,以免減慢程序的執行速度。 3. 它有助于刪除樣板代碼并使代碼更具可讀性。 4. 重構和優化代碼,以增強其正確運行的信心。 * * * ## 何時使用斷言 ### 1.無法訪問的代碼 無法訪問的代碼是當我們嘗試運行該程序時不會執行的代碼。 使用斷言來確保無法訪問的代碼實際上是不可訪問的。 讓我們舉個例子。 ```java void unreachableCodeMethod() { System.out.println("Reachable code"); return; // Unreachable code System.out.println("Unreachable code"); assert false; } ``` 讓我們再舉一個不帶默認大小寫的`switch`語句示例。 ```java switch (dayOfWeek) { case "Sunday": System.out.println("It’s Sunday!"); break; case "Monday": System.out.println("It’s Monday!"); break; case "Tuesday": System.out.println("It’s Tuesday!"); break; case "Wednesday": System.out.println("It’s Wednesday!"); break; case "Thursday": System.out.println("It’s Thursday!"); break; case "Friday": System.out.println("It’s Friday!"); break; case "Saturday": System.out.println("It’s Saturday!"); break; } ``` 上面的`switch`語句指示星期幾只能是上述 7 個值之一。 沒有默認情況意味著程序員認為這些情況之一將始終被執行。 但是,在某些假設實際上是錯誤的情況下,可能尚未考慮某些情況。 應該使用斷言來檢查此假設,以確保未達到默認切換條件。 ```java default: assert false: dayofWeek + " is invalid day"; ``` 如果`dayOfWeek`的值不是有效天數,則會拋出`AssertionError`。 * * * ### 2.記錄假設 為了記錄其基本假設,許多程序員使用注釋。 讓我們舉個例子。 ```java if (i % 2 == 0) { ... } else { // We know (i % 2 == 1) ... } ``` 請改用斷言。 隨著程序的增長,注釋可能會過時和不同步。 但是,我們將不得不更新`assert`語句; 否則,它們也可能因有效條件而失敗。 ```java if (i % 2 == 0) { ... } else { assert i % 2 == 1 : i; ... } ``` * * * ## 什么時候不使用斷言 ### 1.公共方法中的參數檢查 用戶可以提供公共方法中的參數。 因此,如果使用斷言來檢查這些參數,則條件可能會失敗并導致`AssertionError`。 不要使用斷言,而要導致適當的運行時異常并處理這些異常。 * * * ### 2.計算影響程序運行的表達式 不要調用方法或求值可能在斷言條件下影響程序操作的異常。 讓我們以列表`weekdays`為例,該列表包含一周中所有天的名稱。 ```java ArrayList<String> weekdays = new ArrayList<>(Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" )); ArrayList<String> weekends= new ArrayList<>(Arrays.asList("Sunday", "Saturday" )); assert weekdays.removeAll(weekends); ``` 在這里,我們試圖從工作日的`ArrayList`中刪除元素`Saturday`和`Sunday`。 如果啟用了斷言,則程序可以正常運行。 但是,如果禁用了斷言,則不會刪除列表中的元素。 這可能會導致程序失敗。 而是將結果分配給變量,然后使用該變量進行斷言。 ```java ArrayList<String> weekdays = new ArrayList<>(Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" )); ArrayList<String> weekends= new ArrayList<>(Arrays.asList("Sunday", "Saturday" )); boolean weekendsRemoved = weekdays.removeAll(weekends); assert weekendsRemoved; ``` 這樣,無論斷言是啟用還是禁用,我們都可以確保從`weekdays`中刪除所有`weekends`。 結果,它不會影響將來的程序操作。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看