RumtimeException是一種UncheckedException。
UncheckException是一種不需要在方法簽名中聲明的異常類型。廣為知道的RuntimeException的子類有NullPointerException,StringOutOfBoundsException。ArrayIndexOutOfBoundsException之類的。在代碼啟動並執行過程中由於變數為空白或者數組越界等情況就會發生這種異常。當異常發生的時候,由於沒有try-catch會產生程式意外退出的情況。為了避免發生這種異常而導致應用程式意外退出,需要對代碼進行try-catch或者是在調用前進行非空判定或者是長度判定。
常見的情況如下:
下面是關於非空判定的例子
1 User user = getUser(userId);2 if (user != null) {3 System.out.println(user.getName());4 }
下面是關於數組越界的判定
1 String[] codes;2 3 public String getNextCode(int index) {4 if ((index++) > codes.size()) {5 index = 0;6 }7 return codes[index];8 }
NullPointerException的規避方法,之前的例子已經講過了NullObjectPattern。
而數組越界則可以通過下列方法來判定
1 String[] codes;2 3 public String getNextCode(int index) {4 return codes[(index ++) % codes.size()];5 }
如果你在開發的是一個Web應用程式,你應該準備一個出錯頁面,並且在出現Exception的時候將頁面定向轉到該頁面去。
如果你在開發的是一個C/S應用程式,或者是StandAlone的應用程式,你應該準備一個出錯對話方塊,並且在發生問題的時候提示使用者具體出現的錯誤。
如果在開發一個Android應用程式,你應該忽略發生的問題,因為Android系統會抓住相關的錯誤,並且出現一個對話方塊提示系統出現錯誤,並且會根據情況自動回復應用程式的運行。(如果應用程式是Home,IME等需要常駐記憶體的程式)
更為重要的是相關的Exception是怎麼發生的,怎麼才能夠規避。發生Exception應該記錄相關Log,通過相關Log找到相關Exception發生的原因,這樣就可以從根本上去消除問題。
規避類似問題的方法最好的方法是讓問題永遠不會發生。
1. NullObjectPattern
2. 數組下標通過計算使之不越界。
3. 對數組遍曆時盡量避免採用下標。(會有效能問題...)
Java語言中的UncaughtException並不能夠協助把未抓到的Exception抓到後進行合適的處理。