异常处理机制 全面讲解(包括 自定义异常)

目录

1. 基本介绍

2. 异常处理的方式

3. try – catch 异常处理

3.1 基本介绍

3.2 基本语法

3.3 使用细节

3.4 经典应用场景

4. throws 异常处理

4.1 基本介绍

4.2 使用细节

5. 自定义异常

5.1 基本介绍

5.2 设计步骤

5.3 应用实例

5.4 throw 和 throws 的区别


1. 基本介绍

异常处理就是当异常发生时,对异常处理的方式。

2. 异常处理的方式

(1)try - catch – finally 处理机制

程序员在代码中捕获发生的异常,自行处理。

(2)throws 处理机制

将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM。

3. try – catch 异常处理

3.1 基本介绍

Java提供try和catch块来处理异常。try块 用于包含可能出错的代码。catch块 用于处理try块中发生的异常。可以根据需要在程序中有多个try - catch块。

3.2 基本语法

try{

//可疑代码

//将异常生成对应的异常对象,传递给catch块

}catch(异常){

//对异常的处理

}

//可以没有finally,语法是可以通过

3.3 使用细节

①如果try代码块中的一个异常发生了,则异常发生后面的代码不会被执行,直接进入到catch代码块中。

②如果try代码块中的异常没有发生,则顺序执行try代码块的所有代码,不会进入到catch。

③如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)则使用finally{ }代码块。(如果执行catch代码时,和finally的代码冲突,优先执行finally的代码;如果catch代码中有return语句,而finally中有其它代码,则先执行完finally中的代码后,再执行catch的return语句。)

④不管try – catch中是否发生异常,try - catch代码块之后的代码依然正常运行。

运行结果

⑤可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如:Exception 在后,NullPointerException在前。如果发生异常,只会按顺序匹配一个catch。

运行结果

⑥可以使用try - finally搭配,没有catch代码块。这种用法相当于没有捕获异常,因此程序会直接崩溃。主要用于 执行一段代码后,不管是否发生异常,都必须执行某个业务逻辑。

运行结果

3.4 经典应用场景

例:如果用户输入的不是一个整数,就反复提示他输入,直到输入一个整数为止。

4. throws 异常处理

4.1 基本介绍

①如果一个方法(中的语句在执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。

②在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

4.2 使用细节

①对于编译异常,程序中必须处理,比如try-catch 或者throws。

②对于运行时异常,程序中如果没有处理,默认就是throws的方式处理(抛出异常)。

③子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型 要么和父类抛出的异常一致,要么为父类抛出异常的类型的子类型(子类不能扩大异常的范围)。

④在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws。

⑤当方法1抛出编译异常后,方法2调用方法1时,也必须处理抛出的异常(如果抛出的是运行异常可以不处理,有默认处理机制)。

5. 自定义异常

5.1 基本介绍

当程序出现了某些“错误”,但该错误信息并没有在 异常信息体系图 中描述处理,这时可以自己设计异常类,用于描述该错误信息。

5.2 设计步骤

①程序员自定义异常类名,继承Exception或RuntimeException。

②如果继承Exception,属于编译异常。

③如果继承RuntimeException属于运行异常,一般继承RuntimeException。

5.3 应用实例

当接收年龄时,要求范围在18-120之间,否则抛出一个异常。

运行结果

5.4 throw 和 throws 的区别

意义

位置

后面跟的东西

throws

异常处理的一种方式

方法声明处

异常类型

throw

手动生成异常对象的关键字

方法体中

异常对象

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值