java中的新增的assert斷言方法
java語言在發展的時候,對於除錯員來說,除錯工作是很累人的,但是java裡的發展卻在一定程度上方便了他們,現在就有一個斷言的功能,就是說,可以使用assert關鍵字來判斷一個boolean的屬性,到底是true還是false,不過一些程式設計用的軟體eclipse和myeclipse預設情況下並沒有開啟這個功能,
Eclipse中如何開啟斷言(Assert),方法有二:1.Run -> Run Configurations -> Arguments頁籤 -> VM arguments文字框中加上斷言開啟的標誌:-enableassertions 或者-ea 就可以了,就是在這裡的方框裡邊直接輸入就可以了,當然你也可以輸入-da,這個是用來 關閉 這個功能的,當然一般情況下,我們都會把這裡邊的都開著,另外槓槓的-ea命令是開啟使用者定義的包,但是如果需要開啟系統定義的包,還是需要輸入-esa
在輸入完-ea之後換行,然後再輸入-esa,記住,這裡沒有任何的空格!!!輸入完之後就點選run確認了就可以了。
2.在myEclipse中,Windows -> Preferences ->Java ->Installed JREs ->點選正使用的JDK ->Edit ->Default VM Arguments文字框中輸入:-ea(本人採用了此方法,這個也只是一樣的)
現在我們可以來測試下到底是不是成功了的,我們就在main函式裡邊呼叫下我給大家寫的這個函式
public static String isAssertionOk(){
boolean ok=false;
assert ok=true;
return ok?"恭喜你,Assert功能已經開啟成功":"抱歉,Assert功能還沒有開啟成功,"
+ "請重新檢視上邊的方法,謝謝";
}
</pre>執行結果是什麼?<p></p><pre code_snippet_id="1973934" snippet_file_name="blog_20161108_3_5077345" name="code" class="plain">程式錯誤
-------------
程式正常
-------------
it is true!
null
s=null
檢查字串null是不是空串 true s=null
檢查字串null是不是空串 true
看完了這個,我想你應該有很多的感觸吧!
這個功能可以判斷一個boolean型別是不是true,如果是,那麼對應於assert boolean :"程式錯誤";這樣的語句,如果boolean是真的,那麼冒號後邊的就不會讀取。如果是假的,那麼冒號後邊的就會被讀取為錯誤資訊,也就是會丟擲一個錯誤,這個錯誤的型別是AssertionError,所以在這裡就需要一個try...catch語句,
assert expression1;
assert expression1:expression2;
如果expression1為true,則不丟擲錯誤,程式正常執行,expression2也不會執行。
如果expression1為false,則丟擲異常,程式中斷跳出,expression2執行。
一般來說,不要在expression1、expression2中使用函式的返回值;
不要將其使用在public函式中檢查輸入引數,但可以用於private函式中檢測輸入引數。
使用時,編譯時需要用javac -source;執行時需要使用Java -ea。
個人的一點理解:使用assert只是為了幫助我們除錯程式,因此使用assert所遵循的原則就是“不能因為有了assert的存在而使程式的結構發生任何的改變”,說白了就是“如果把assert部分刪除了,程式依然不會有任何的問題,只不過不能幫助我們檢查出一些錯誤來了”,因此使用assert的時候不應該在表示式中使用函式,因為一旦把這句assert語句刪除後,程式的結構就改變了,這不符合上述提到的原則!
下面的例子將顯示如果一個assert語句在父類,而當它的子類呼叫它時,該assert為false。我們看看在不同的情況下,該assertion是否被處理。
class Base {
public void baseMethod() {
try {
assert false:"Assertion failed:This is base";// 總是assertion失敗
} catch (Throwable e) {
// TODO: handle exception
Cout.addLine(e.getMessage());
}
System.out.println("Base Method");
}
}
class Exercise extends Base {
public void derivedMethod() {
try {
assert false : "Assertion failed:This is derive";// 總是assertion失敗
} catch (AssertionError e) {
// TODO: handle exception
Cout.addLine(e.getMessage());
}
System.out.println("Derived Method");
}
public static void f() {
try {
assert false : "111";
} catch (AssertionError e) {
// TODO: handle exception
Cout.addLine(e.getMessage());
}
}
public static void main(String[] args) {
Exercise derived=new Exercise();
derived.baseMethod();
derived.derivedMethod();
}
}
執行結果是:Assertion failed:This is base
Base Method
Assertion failed:This is derive
Derived Method
現在應該懂了吧!!!
如果還是有疑問的,可以加我qq 2553627958