java中的新增的assert斷言方法

來源:互聯網
上載者:User

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!nulls=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語句刪除後,程式的結構就改變了,這不符合上述提到的原則。    在本節,我們將考慮assertion與繼承的關係,研究assert是如何定位的。如果開啟一個子類的assertion,那麼它的父類的assertion是否執行。

 下面的例子將顯示如果一個assert語句在父類,而當它的子類調用它時,該assert為false。我們看看在不同的情況下,該assertion是否被處理。

class Base {public void baseMethod() {try {assert false:"Assertion failed:This is base";// 總是assertion失敗} catch (Throwable e) {// TODO: handle exceptionCout.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 exceptionCout.addLine(e.getMessage());}System.out.println("Derived Method");}public static void  f() {try {assert false : "111";} catch (AssertionError e) {// TODO: handle exceptionCout.addLine(e.getMessage());}}public static void main(String[] args) {Exercise derived=new Exercise();derived.baseMethod();derived.derivedMethod();}}
運行結果是:
Assertion failed:This is baseBase MethodAssertion failed:This is deriveDerived Method
現在應該懂了吧。。。

如果還是有疑問的,可以加我qq   2553627958







聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.