關于Java異常的疑問
問題描述
眾所周知下面的代碼編譯不過:
public class test{ private static void haha(){throw new Exception(); } public static void main(String[] args) {haha();return; }}
javac test.java
未報告的異常錯誤Exception; 必須對其進行捕獲或聲明以便拋出。
但是下面的代碼沒有進行錯誤處理,卻能夠通過編譯:
public class test{ public static void main(String[] args) {String s = new String('test');System.out.println(s.substring(0,6));return; }}
javac test.javajava test
Exception in thread 'main' java.lang.StringIndexOutOfBoundsException: String index out of range: 6at java.lang.String.substring(Unknown Source)at test.main(test.java:4)
請問這是什么原因?
問題解答
回答1:StringIndexOutOfBoundsException繼承了RuntimeException,不需要顯式地聲明處理。
回答2:第一個拋出的是Exception是checked異常,也就是編譯器異常,所以必須手動處理。第二個拋出的StringIndexOutOfBoundsException是unchecked異常,運行時異常,所以不需要手動處理
相關文章:
1. a標簽跨域下載文件能否重命名?2. javascript - 為什么我的vue里的router-link不起作用3. android - weex 項目createInstanceReferenceError: Vue is not defined4. PHPExcel表格導入數據庫怎么導入5. javascript - 如圖,百度首頁,查看源代碼為什么什么都沒有?6. android - 哪位大神知道java后臺的api接口的對象傳到前端后輸入日期報錯,是什么情況?求大神指點7. pdo 寫入到數據庫的內容為中文的時候寫入亂碼8. PHP類封裝的插入數據,總是插入不成功,返回false;9. vue2.0+webpack 如何使用bootstrap?10. mac連接阿里云docker集群,已經卡了2天了,求問?
