Java斷言問題
回答
如果斷言在JVM中啓用(通過-ea
標誌),斷言失敗時將拋出AssertionError
。
這不應該被捕獲,因爲如果一個斷言失敗,它基本上意味着你對該程序如何工作是錯誤的假設之一。所以,當你得到一個用你的線程(也可能是整個程序)終止記錄的異常堆棧跟蹤時,你通常會發現斷言失敗。
它拋出一個Error
。這就像當你得到一個NullPointerException
,但它是java.lang.Error
的一個子類。名字是AssertionError
。
這就像一個NullPointerException
的意義,你不必聲明投擲或任何東西,它只是拋出它。
assert(false);
就像
throw new AssertionError();
如果您運行與-ea
標誌傳遞到Java程序(VM)程序。
如果斷言失敗並且在運行時啓用了斷言,將會拋出一個AssertionError。
通常在JUnit測試中使用assert語句時,在構建應用程序時,您正在運行測試實用程序來檢查錯誤並告訴您。
看看這個:如果你啓用了在JVM中斷言,當它開始Programming With Assertions
斷言只會失敗。您可以通過在命令行中指定參數-ea來完成此操作。如果你這樣做,那麼在執行時的代碼塊將拋出一個AssertionError
:
public void whatever() {
assert false;
}
斷言應該用來只檢測編程錯誤。如果您正在驗證用戶輸入或這些行上的某些內容,請勿使用斷言。
它引發一個AssertionError。 Howeveer,你必須用-ea或-enableassertions標誌編譯程序,讓它產生一個實際的異常
不是編譯時選項。這是一個運行時選項。 – 2011-04-16 17:00:55
它拋出一個AssertionError
這是Error
的一個子類。作爲一個Error
通常作爲一個失敗的斷言,特別是,你可能不應該試圖捕捉它,因爲它告訴你在你的代碼中有一個顯着的異常,並且如果你繼續,你可能會處於一個不確定的,不安全的狀態。
程序員可以編寫try catch塊,所以如果發生了錯誤,那麼它可以捕獲被捕獲並程序員可以來了解
try
{
assert false;
}
catch(Exception e)
{
System.out.println("Error has occured");
}
- 1. Java - 用斷言編程的問題
- 2. java斷言關鍵字問題
- 3. jenkins NUnit DateTime斷言問題
- 4. Golang類型斷言問題
- 5. Magento管理斷言問題
- 6. 斷言錯誤問題
- 7. Android Espresso斷言問題
- 8. Java斷言
- 9. 斷言在Java
- 10. Java,斷言和JIT
- 11. Java的斷言(假)
- 12. Java斷言打印
- 13. SQL/Oracle 10g - 問題與斷言
- 14. vmime,libgnutls和libgcrypt問題?斷言失敗!
- 15. 視覺斷言的範圍問題
- 16. Golang:類型斷言錯誤問題
- 17. 在webdriver和TestNG中斷言問題
- 18. 從rspec中斷言斷言與斷言
- 19. SAML斷言使用java
- 20. Java斷言雙是NaN
- 21. 的Java:上斷言行爲
- 22. Java,斷言文件等於
- 23. Java的斷言 - $ assertionsDisabled VS $ assertionsEnabled
- 24. 使用斷言在Java中
- 25. C++到java,語言等同性問題
- 26. Java語言環境字體問題..?
- 27. 斷言與JUnit斷言
- 28. 診斷Java內存問題的策略
- 29. 語言問題
- 30. 序言問題
JUnit的斷言是普通的Java斷言不同。它們會引發不同的異常('AssertionFailedError'),並且不能用JVM標誌關閉。 – 2011-04-16 17:02:26
你在混合兩件事。Java斷言的形式爲'assert * boolean expression *'或'assert * boolean expression *:* non-void expression *',並且在啓用時由運行時系統檢查。在JUnit測試中,像'assertEquals(a,b)'這樣的語句是JUnit類的方法調用。 – 2011-04-16 17:03:37