Java异常

图解

image.png

详解

  1. 注意:编译时异常和运行时异常都是发生在运行阶段,编译阶段异常是不会发生的。
  2. 编译时异常因什么而得名,因为编译时异常必须在编译(编写)程序阶段预先处理,否则编译器会报错。
  3. 所有异常都是在程序运行阶段发生的,因为只有程序运行阶段从才可以new对象。异常的发生就是new异常对象
  4. 两者异同:编译时异常发生的概率较高

异常处理

异常处理机制的作用:增强程序得健壮性。做到就算异常发生了也不影响程序的执行。
Java语言中对异常处理只有两种方式

  • 第一种方式:在方法声明得位置,使用throw关键字,抛给上一级(调用者)。
  • 第二种方式:使用try…catch语句进行异常的捕获。
    • 注意:Java中的异常发生之后如果一直往上抛,最终抛给了main方法,main方法继续抛给了JVM,JVM知道这个异常发生,只有一个结果,那就是终止Java程序的执行。
    • 上抛类似于推卸责任;而捕捉等于把异常拦截下来,异常真正的解决了。
    • 一般main方法不进行throw上抛,而是使用try…catch捕获。
    • try语句块中出现异常,try语句块中语句不再执行,try之外的语句还会执行,直接跳到catch进行异常处理。
      • image.png
    • catch后面得小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型。
      • catch可以写多个(从小到大写)。建议catch的时候,精确的一个一个处理,这样有利于程序的调试。
      • JDK8新特性catch(FileNotFoundException | ArithmeticException | NullPointerException e) 可以用符号“|”来分多个异常。
    • finally与try搭配使用,finally中的代码一定会执行(通常完成资源的释放),即使try中出现异常。
      • finally唯一不执行方法:System.exit(0); // 退出JVM
      • image.png
      • 经典面试题
        • image.png
        • image.png
    • 异常方式选择:如果希望调用者来处理就用上抛,其余都用捕获处理。

异常对象的常用方法

  • 获取异常简单的描述信息
    • getMessage()
  • 打印异常追踪的堆栈信息(Java后台采用了异步线程的方式)
    • printStackTrace()

如何查看异常信息

  • 异常信息是按照栈打印的,所以错误根源在最上边,可以快速调试程序。
    • image.png

fianl finally finalize 的区别

  • final 是一个关键字,表示最终的。
  • finally 也是一个关键字,常与try联合使用,使用在异常处理机制中。
  • finalize() 是Object中的一个方法,作为方法名出现,这个方法是由垃圾回收器GC负责调用的。

throws throw 的区别

  • throws:在方法声明位置上使用,表示上报异常信息给调用者。
  • throw:手动抛出异常!

如何自定义异常

  • 第一步:编写一个类继承Exception(编译时异常)或者RuntimeException(运行时异常)。
  • 第二步:提供两个构造方法,一个无参的,一个带有String参数的。
// 编译时异常
public class MyException extends Exception {

    public MyException() {
        
    }
    public MyException(String s) {
        super(s);
    }
}
  • 注意:重写之后的方法不能比重写之前的方法抛出更多(更宽泛)的异常,可以更少。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值