歡迎您光臨本站 註冊首頁

JDK1.4新特性:斷言

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  JDK1.4中引入的一個新特性之一就是斷言(assert),為程序的調試提供了強有力的支持,以下的文檔根據SUNTEC內容及相關內容組成。
源代碼:
/**
* Simple examples of the use of the new assertion feature in JDK1.4
*
* @author S.Ritter 16/7/2001
**/

public class AssertExample {
public static void main(String[] args) {
int x = 10;

if (args.length > 0) {
try {
x = Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
/* Ignore */
}
}

System.out.println("Testing assertion that x == 10");
assert x == 10:"Our assertion failed";
System.out.println("Test passed");
}
}

由於引入了一個新的關鍵字,所以在編譯的時候就需要增加額外的參數,要編譯成功,必須使用JDK1.4的javac並加上參數'-source 1.4',例如可以使用以下的命令編譯上面的代碼:
javac -source 1.4 AssertExample.java

以上程序運行使用斷言功能也需要使用額外的參數(並且需要一個數字的命令行參數),例如:
java -ea AssertExample 1

程序的輸出為:
Testing assertion that x == 10
Exception in thread "main" java.lang.AssertionError: Our assertion failed
at AssertExample.main(AssertExample.java:20)

由於輸入的參數不等於10,因此斷言功能使得程序運行時拋出斷言錯誤,注意是錯誤,這意味著程序發生嚴重錯誤並且將強制退出。斷言使用boolean值,如果其值不為true則拋出AssertionError並終止程序的運行。
由於程序員的問題,斷言的使用可能會帶來副作用,例如:
boolean isEnable=false;
//...
assert isEnable=true;

這個斷言的副作用是因為它修改程序變數的值並且沒有拋出錯誤,這樣的錯誤如果不細心檢查很難發現。但是同時我們可以根據以上的副作用得到一個有用的特性,根據它測試是否將斷言打開了。
/**
* Simple examples test enable assertion feature in JDK1.4
*
* @author Cherami 25/4/2002
**/

public class AssertExample2 {
public static void main(String[] args) {
boolean assertEnable=false;
assert assertEnable=true;

if (assertEnable==false)
{
throw new RuntimeException("Assertions should be enable");
}
}
}

如果我們不使用-ea參數運行上面的程序,則控制台將輸出:

Exception in thread "main" java.lang.RuntimeException: Assertions should be enab
le
at AssertExample.main(AssertExample.java:14)



[火星人 ] JDK1.4新特性:斷言已經有182次圍觀

http://coctec.com/docs/program/show-post-72089.html