关于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. mysql - 优惠券表应该怎么建,求帮助2. angular.js - angularjs 怎么封装 upload 上传3. angular.js - 请教angularjs里html和js通信的问题4. angular.js - angularJs使用iframe,网页内容自适应的问题5. angular.js - ionic命令行执行代码超级卡,要等很久才会有反应6. angular.js - 创建项目问题的7. angular.js - ui-router 有没有手动重新加载路由配置的方法?8. angular.js - wepapp在网页上可以滑动但是适配在手机上不可以,为什么?求解9. node.js - 怎么在初始化的时候使得一个子组件不加载?10. angular.js - 请教一个关于angularjs的小问题