Java基础复习笔记——异常基础知识(一)

1.论Exception和Error的区别

Exception 和Error都继承自Throwable父类。 Error是指正常运行情况下,不太可能出现的情况,一旦Error发生一般都会导致程序处于非正常不可恢复的状态,比如OutOfMemoryError. 而异常是指程序正常运行过程中,可以预料到异常情况,应该是要被捕获并且被处理的。

那么问题来了,如何定义一个CheckedException(检查型异常)?

1.如果继承自RuntimeException(运行时异常), 那么就是运行时异常。

2.继承自Exception,但是没有继承RuntimeException,那么就是CheckedException(检查型异常)。(Exception下只有RuntimeException和CheckedException,非此即彼)

Try-Catch-Finally 的执行顺序:

  1. 一旦Try 里抛出异常, 程序逻辑跳转去Catch , 捕获并处理异常
  2. 处理完异常之后,跳转去Finally语句,不再执行Try里面剩下的语句。 那如果Try 里还有return语句呢?也不再执行。
  3. 即便Try 和 任意一个 Catch 都有return语句,finally都会执行。那执行顺序是怎么样的? try -> catch exption -> finally -> return from catch 。 Try block 的return语句只有当没有异常发生的情况下才会调用到,并且是在先运行了finally之后
  4. 总而言之: 无异常抛出,从Try return。有异常抛出,从catch return。但是之前都会执行finally。
  5. Catch 还有异常抛出,finally会执行吗? 1) 在catch 里抛异常前后都不能有return语句,编译不能通过 2)finally 会执行,之后抛出异常
  6. 如果Catch和finally都有return语句,从哪里return? 答案: 从finally return。

只有当如下两种情况时,finally代码块不会被执行:

  1. Try 或者catch 里面调用了system.exit(),中止程序运行
  2. 致命错误: 虚拟机或者操作系统崩溃

NoClassDefFoundError 和 ClassNotFoundException 有什么区别

  1. 首先NoClassDefFoundError是Error,ClassNotFoundException是异常
  2. NoClassDefFoundError通常发生在,当你想用new 创建一个新对象的时候,发现找不到这个对象所对应的类,这是JVM的错误,不应该捕获。
  3. ClassNotFoundException 发生在动态加载类的时候,比如说Class.forName, 只要保证要加载的类和其依赖的包都在classpath下即可。

异常处理代码比较繁琐并且千篇一律,应该尽量多使用1.7 引入的 try-with-resource 和multiple catch。try with resource 会在编译的时候自动生成相应的处理逻辑,比如自动按照约定俗成close那些实现了closeable or AutoCloseable的对象。 FYI,Closeable subclass AutoCloseable。 基本上,常见的InputStream, OutputStream, Reader都有实现 Closeable 接口。

异常处理的一些原则

  1. 不要捕获Exception,应该捕获特定异常
  2. 不要生吞异常!!!

参考自https://blog.csdn.net/ScarlettWen/article/details/81413366
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值