java异常
异常类
java.lang.Throwable
在Java中 所有异常都有一个共同的祖先java.lang包中的Throwable类
Throwbale 包含两个重要子类 Exception(异常) Error(错误)
Error
Error 是程序无法处理的错误信息 表示代码运行时JVM(Java虚拟机)出现的问题 如: OutOfMemoryError
这些异常发生时 JVM一般会选择线程终止
Exception
运行时异常(RuntimeException)
编译时异常
编译时异常 需要保证在运行之前给出一个处理方案
异常处理
异常默认处理流程
try-catch
好处: 异常对象可以被捕获 后续的代码可以继续执行
格式:
1 | try{ |
执行流程:
- 执行try{} 中的代码 看是否有异常对象产生
- 没有: catch就不会捕获 后续代码继续执行
- 有: catch捕获异常对象 执行catch{} 中的处理方案 后续代码继续执行部
如果要捕获多个异常那么最大的异常一定要最后 否则编译器会报错 例如:Exception要放在最后一个catch中
抛出处理
- throws: 写在方法定义处 表示声明一个异常 告诉调用者 使用本方法可能会存在哪些异常
- throw: 写在方法内 结束方法 手动抛出异常对象 交给调用者 方法中下面的代码不再执行了
编译时异常必须用throws声明
throws 抛出异常但不处理异常
两种异常处理方式比较
根据正在面临的异常 是否需要暴露出来
- 不需要暴露: try … catch 捕获 (通常对于用户)
- 需要暴露: 抛出异常 (通常对于使用者)
问题
如果try中没有遇到问题 怎么执行
会把try里面所有的代码全部执行完毕 不会执行catch里面的代码
注意:
只有当出现了异常才会执行catch
如果try中可能会遇到多个问题 怎么执行
会写多个catch与之对应
细节:
如果我们要捕获多个异常 这些异常如果存在父子关系的话 那么父类一定要写在下面
了解性:
在JDK7之后 我们可以在catch中同时捕获多个异常 中间用 | 进行隔开
如果出现 A异常 | B异常的话 采取同一种处理方案
如果try中遇到的问题没有被捕获 怎么执行
相当于try…catch的代码白写了 最终还是会交给虚拟机进行处理
如果try中遇到了问题 那么try下面的其他代码还会执行吗
下面的代码就不会执行了 直接跳转到对应的catch当中 执行catch里面的语句体
但是如果没有对应catch与之匹配 那么最终还是会交给虚拟机进行处理
总结
常见异常方法
- public String getMessage() 返回次throwable() 的详细消息字符串
- public String toString() 返回此可抛出的简短描述
- public void printStackTrace()
- 在底层是利用System.err.println进行输出
- 把异常的错误信息以红色字体输出在控制台
- 细节 仅仅是打印西悉尼 不会停止程序运行
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 niiish32x 's blog!