【Java】5分钟解决异常笔试题

一、异常 Exception 与错误 Error 的区别
Exception 是在编译和运行时可能出现的问题,通常可以被程序员捕获处理;Error 的破坏程度更高,通常无法被程序员处理。

二、异常的分类
分为编译时异常(也称受检查异常) 和运行时异常 RuntimeExcetion。
在这里插入图片描述
简化版:
在这里插入图片描述
两者的区别在于:
① 编译时异常必须在代码中被抛出或者捕获处理,否则不会通过编译。运行时异常则没有这个要求。
② 编译时异常继承自Exception的异常或其子类;运行时异常继承自RuntimeException的异常或其子类。
常见的运行时异常:

  • 数组索引越界异常ArrayIndexOutOfBoundsException
  • 空指针异常NullPointerException
  • 数字操作异常(比如除数为0)ArithmetiException
  • 类型转换异常ClassCastException
  • 数字转换异常NumberFormatException

三、异常的处理方式
1)默认处理方式(即程序员没有进行任何操作):① 当发生异常时,默认会在出现异常的代码处自动创建一个异常对象ArithmeticException。② 异常会被抛给调用者,调用者接着往外层抛,最终抛给JVM,JVM接到异常之后会在控制台打印异常信息,然后中断该程序。③ 所有后续代码都不会被执行。

2)抛出:将异常往外层抛(被调用方法 → 调用方法 → JVM)
首先需要了解一下throws关键字:用在方法上,在方法声明处通过throws把异常抛出去。
在这里插入图片描述
throws只能抛出一个异常,也就是说,如果在方法中发生了多个异常,只会抛出第一个发生的异常(因为后续代码都不会被执行了)。

3)捕获:通过try-catch-finally 捕获异常并进行处理。
在这里插入图片描述
① 将可能出现异常的代码写在try中,在try中一旦发生了异常,这个异常就会被捕获,如果在catch中有处理相应异常类型的catch块,就会进入到catch块中进行异常处理。
一个try中同样只能捕获到一个发生的异常(即第一个发生的异常),因为后续代码都不会被执行。
② catch:进行异常处理。
③ finally:这里面的代码无论有无异常都会被执行。

4)抛出+捕获:当我们的代码发生异常时,一般只在最外层代码集中进行处理,因此我们应该先将代码抛出给调用者,然后再在调用者中进行捕获和处理。
在这里插入图片描述
在这里插入图片描述
补充:
1)throw关键字:也是用来抛出异常,与throws的区别是,throws是写在方法声明处的,而throw是写在方法体中的。举个例子:
throws抛出异常:
在这里插入图片描述
throw抛出异常:
在这里插入图片描述
在这里插入图片描述
最后,网上有些博客说throw抛出的异常一定要被处理,其实这是不一定的,具体还是看throw抛出的是运行时异常还是编译时异常;如果抛出的是编译时异常,那我们知道这一定需要进行处理,但如果抛出的是运行时异常则没有这个要求。
四、自定义异常
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值