按照java一切皆对象的思想,错误也被封装在对象中
Error 是严重错误,比如虚拟机崩溃
Exception分为编译期异常和运行时异常(RuntimeException及其子类)
编译期异常必须处理,否则编译不通过,更不要说运行了。
运行期异常 可处理可不处理
为啥呢?
比如ArithmeticException,当你不把0作为分母就程序就可以安全运行,0做分母程序才GG
在这里讨论一下处理的情况:
1)消极处理 就是在方法上throws声明异常
2)积极处理 try-catch
对于1,调用者可以继续声明可能的异常,最终在main中如果还声明不处理,一旦出现错误,整个程序就会停掉。异常也会逐级向上抛,和方法调用的方向相反。
对于2 不多说
方法覆盖中,子类不能抛出比父类更多的异常,这里的更多指的是类型,而不是异常的数量
如何精确定位异常发生的地点?
1)你可以在最底层代码中就捕获异常,并打印异常操作信息,这样一些调用底层代码的
类可能发生逻辑错误或者意料之外的运行时异常,该怎么捕获?
2)使用throw new ArithmeticExcpetion(“自己写的异常信息”),在调用者中使用
System.out.println(e.getMessage);它只会打印自己写的异常,而不会打印堆栈信息,Message是一个封装异常消息的类
3)打印堆栈 e.printStackTrace()
这些都是定位和打印异常信息,如何在报异常时修正,程序重新步入正轨,而不是简单地打印?
个人觉得这就需要你在catch中根据逻辑编写修正代码。