Java陷阱之assert關鍵字

來源:互聯網
上載者:User

標籤:

Java陷阱之assert關鍵字2007-09-23 15:03:23 著作權聲明:原創作品,如需轉載,請與作者聯絡。否則將追究法律責任。 Java陷阱之assert關鍵字  一、概述 在C和C++語言中都有assert關鍵,表示斷言。在Java中,同樣也有assert關鍵字,表示斷言,用法和含義都差不多。  二、文法 在Java中,assert關鍵字是從JAVA SE 1.4 引入的,為了避免和老版本的Java代碼中使用了assert關鍵字導致錯誤,Java在執行的時候預設是不啟動斷言檢查的(這個時候,所有的Assert 陳述式都將忽略!),如果要開啟斷言檢查,則需要用開關-enableassertions或-ea來開啟。 assert關鍵字文法很簡單,有兩種用法: 1、assert <boolean運算式>如果<boolean運算式>為true,則程式繼續執行。如果為false,則程式拋出AssertionError,並終止執行。 2、assert <boolean運算式> : <錯誤資訊運算式>如果<boolean運算式>為true,則程式繼續執行。如果為false,則程式拋出java.lang.AssertionError,並輸入<錯誤資訊運算式>。  三、應用執行個體 下面給出一個例子,通過例子說明其用法:  public  class AssertFoo {     public  static  void main(String args[]) {        //斷言1結果為true,則繼續往下執行         assert  true;        System. out.println("斷言1沒有問題,Go!");         System. out.println("\n-----------------\n");         //斷言2結果為false,程式終止         assert  false : "宣告失敗,此運算式的資訊將會在拋出異常的時候輸出!";        System. out.println("斷言2沒有問題,Go!");    }} 儲存代碼到C:\AssertFoo.java,然後按照下面的方式執行,查看控制台輸出結果:  1、編譯器:C:\>javac AssertFoo.java  2、預設執行程式,沒有開啟-ea開關:C:\>java AssertFoo斷言1沒有問題,Go! ----------------- 斷言2沒有問題,Go!  3、開啟-ea開關,執行程式:C:\>java -ea AssertFoo斷言1沒有問題,Go! ----------------- Exception in thread "main" java.lang.AssertionError: 宣告失敗,此運算式的資訊將會在拋出異常的時候輸出!        at AssertFoo.main(AssertFoo.java:10)  四、陷阱 assert關鍵字用法簡單,但是使用assert往往會讓你陷入越來越深的陷阱中。應避免使用。筆者經過研究,總結了以下原因: 1、assert關鍵字需要在運行時候顯式開啟才會生效,否則你的斷言就沒有任何意義。而現在主流的Java IDE工具預設都沒有開啟-ea斷言檢查功能。這就意味著你如果使用IDE工具編碼,調試運行時候會有一定的麻煩。並且,對於Java Web應用,程式碼都是部署在容器裡面,你沒法直接去控製程序的運行,如果一定要開啟-ea的開關,則需要更改Web容器的回合組態參數。這對程式的移植和部署都帶來很大的不便。 2、用assert代替if是陷阱之二。assert的判斷和if語句差不多,但兩者的作用有著本質的區別:assert關鍵字本意上是為測試偵錯工具時使用的,但如果不小心用assert來控制了程式的商務程序,那在測試調試結束後去掉assert關鍵字就意味著修改了程式的正常的邏輯。 3、assert宣告失敗將面臨程式的退出。這在一個生產環境下的應用是絕不能容忍的。一般都是通過異常處理來解決程式中潛在的錯誤。但是使用斷言就很危險,一旦失敗系統就掛了。   五、對assert的思考 assert既然是為了調試測試程式用,不在正式生產環境下用,那應該考慮更好的測試JUint來代替其做用,JUint相對assert關鍵的所提供的功能是有過之而無不及。當然完全可以通過IDE debug來進行調試測試。在此看來,assert的前途一片昏暗。 因此,應當避免在Java中使用assert關鍵字,除非哪一天Java預設支援開啟-ea的開關,這時候可以考慮。對比一下,assert能給你帶來多少好處,多少麻煩,這是我們選擇是否使用的的原則。 以上僅僅代表我個人觀點,歡迎大家留言討論。  

本文出自 “熔 岩” 部落格,轉載請與作者聯絡!

Java陷阱之assert關鍵字

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.