什么時候用 assert?
assertion(斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。一般來說,assertion 用于保證程序最基本、關鍵的正確性。assertion 檢查通常在開發和測試時開啟。為了提高性能,在軟件發布后, assertion 檢查通常是關閉的。在實現中,斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true;如果表達式計算為 false,那么系統會報告一個AssertionError斷言用于調試目的:
assert(a?>?0);?//?throws?an?AssertionError?if?a?<=?0
斷言可以有兩種形式:
assert Expression1;
assert Expression1 : Expression2 ;
Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式;這個值用于生成顯示更多調試信息的字符串消息。
斷言在默認情況下是禁用的,要在編譯時啟用斷言,需使用 source 1.4 標記:
javac -source 1.4 Test.java要在運行時啟用斷言,可使用-enableassertions 或者-ea 標記。
要在運行時選擇禁用斷言,可使用-da 或者-disableassertions 標記。
要在系統類中啟用斷言,可使用-esa 或者-dsa 標記。還可以在包的基礎上啟用或者禁用斷言。可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用于驗證傳遞給私有方法的參數。不過,斷言不應該用于驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試后置條件。另外,斷言不應該以任何方式改變程序的狀態。
Error 和 Exception 有什么區別?
Error 表示系統級的錯誤和程序不必處理的異常,是恢復不是不可能但很困難的情況下的一種嚴重問題;比如內存溢出,不可能指望程序能處理這樣的情況;Exception 表示需要捕捉或者需要程序進行處理的異常,是一種設計或實現問題;也就是說,它表示如果程序運行正常,從不會發生的情況。
try{}里有一個 return 語句,那么緊跟在這個 try 后的 finally{}里的 code會不會被執行,什么時候被執行,在 return 前還是后?
會執行,在方法返回調用者前執行。Java 允許在 finally 中改變返回值的做法是不好的,因為如果存在 finally 代碼塊,try 中的 return 語句不會立馬返回調用者,而是記錄下返回值待 finally 代碼塊執行完畢之后再向調用者返回其值,然后如果在 finally 中修改了返回值,這會對程序造成很大的困擾,C#中就從語法上規定不能做這樣的事。