<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://lingcoder.gitee.io/onjava8/#/book/16-Validating-Your-Code?id=java-%e6%96%ad%e8%a8%80%e8%af%ad%e6%b3%95) 你可以通過其它程序設計架構來模擬斷言的效果,因此,在 Java 中包含斷言的意義在于它們易于編寫。斷言語句有兩種形式 : assert boolean-expression; assert boolean-expression: information-expression; 兩者似乎告訴我們**“我斷言這個布爾表達式會產生 true”**, 否則,將拋出**AssertionError**異常。 **AssertionError**是**Throwable**的派生類,因此不需要異常說明。 不幸的是,第一種斷言形式的異常不會生成包含布爾表達式的任何信息(與大多數其他語言的斷言機制相反)。 下面是第一種形式的例子: ~~~ // validating/Assert1.java // Non-informative style of assert // Must run using -ea flag: // {java -ea Assert1} // {ThrowsException} public class Assert1 { public static void main(String[] args) { assert false; } } /* Output: ___[ Error Output ]___ Exception in thread "main" java.lang.AssertionError at Assert1.main(Assert1.java:9) */ ~~~ 如果你正常運行程序,沒有任何特殊的斷言標志,則不會發生任何事情。你需要在運行程序時顯式啟用斷言。一種簡單的方法是使用**\-ea**標志, 它也可以表示為:**\-enableassertion**, 這將運行程序并執行任何斷言語句。 輸出中并沒有包含多少有用的信息。另一方面,如果你使用**information-expression**, 將生成一條有用的消息作為異常堆棧跟蹤的一部分。最有用的**information-expression**通常是一串針對程序員的文本: ~~~ // validating/Assert2.java // Assert with an information-expression // {java Assert2 -ea} // {ThrowsException} public class Assert2 { public static void main(String[] args) { assert false: "Here's a message saying what happened"; } } /* Output: ___[ Error Output ]___ Exception in thread "main" java.lang.AssertionError: Here's a message saying what happened at Assert2.main(Assert2.java:8) */ ~~~ **information-expression**可以產生任何類型的對象,因此,通常將構造一個包含對象值的更復雜的字符串,它包含失敗的斷言。 你還可以基于類名或包名打開或關閉斷言;也就是說,你可以對整個包啟用或禁用斷言。實現這一點的詳細信息在 JDK 的斷言文檔中。此特性對于使用斷言的大型項目來說很有用當你想打開或關閉某些斷言時。但是,日志記錄(*Logging*)或者調試(*Debugging*),可能是捕獲這類信息的更好工具。 你還可以通過編程的方式通過鏈接到類加載器對象(**ClassLoader**)來控制斷言。類加載器中有幾種方法允許動態啟用和禁用斷言,其中**setDefaultAssertionStatus ()**,它為之后加載的所有類設置斷言狀態。因此,你可以像下面這樣悄悄地開啟斷言: ~~~ // validating/LoaderAssertions.java // Using the class loader to enable assertions // {ThrowsException} public class LoaderAssertions { public static void main(String[] args) { ClassLoader.getSystemClassLoader(). setDefaultAssertionStatus(true); new Loaded().go(); } } class Loaded { public void go() { assert false: "Loaded.go()"; } } /* Output: ___[ Error Output ]___ Exception in thread "main" java.lang.AssertionError: Loaded.go() at Loaded.go(LoaderAssertions.java:15) at LoaderAssertions.main(LoaderAssertions.java:9) */ ~~~ 這消除了在運行程序時在命令行上使用**\-ea**標志的需要,使用**\-ea**標志啟用斷言可能同樣簡單。當交付獨立產品時,可能必須設置一個執行腳本讓用戶能夠啟動程序,配置其他啟動參數,這么做是有意義的。然而,決定在程序運行時啟用斷言可以使用下面的**static**塊來實現這一點,該語句位于系統的主類中: ~~~ static { boolean assertionsEnabled = false; // Note intentional side effect of assignment: assert assertionsEnabled = true; if(!assertionsEnabled) throw new RuntimeException("Assertions disabled"); } ~~~ 如果啟用斷言,然后執行**assert**語句,**assertionsEnabled**變為**true**。斷言不會失敗,因為分配的返回值是賦值的值。如果不啟用斷言,**assert**語句不執行,**assertionsEnabled**保持false,將導致異常。
                  <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>

                              哎呀哎呀视频在线观看