近来学习Java异常,有个疑惑,为什么有的Java函数调用要用try捕获异常(即使写的是对的),而有的又不用,有的方法Throws之后在主函数里要try,有的不用,搜索了下没有太满意的解答,故研究一番后分享。
图转自黑马程序员
上图是异常体系,已经讲的很清楚了。
下面是我自己的例子。
数组越界属于
RuntimeException
如例子所示,throws需不需要处理,与是否运行时异常有关,
如果是编译时异常(非RuntimeException),则无论如何都要处理(1.try catch 2.throws向上抛出)
如果是运行时异常(RuntimeException),可以处理,也可以不处理(即使是throws),等报错后再处理。
如果想自己写的方法,在程序里面一定被try检查,那么就继承Excption
如果想有错了再检查,就继承RuntimeException(意思就是我写的方法不想用Try来环绕,错了再回来改代码就行了)
如图,没有报错
java提供的方法是否Exception还请大家自己查阅帮助文档