CHAPTER-10 异常

异常



什么是异常?

异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序.

程序运行–>异常(程序中断) STOP

在Java中,Java编程语言使用异常处理机制为程序提供了错误的能力

步骤:

1.程序中预先设置好对付异常的处理方法

2.程序运行

3.异常

4.对异常进行处理

5.处理完毕,程序继续运行

在这里插入图片描述

try-catch块

情况一:正常状况 使用try-catch块捕获异常

public void method(){
    try{
        //代码块(此处不会产生异常)
    }catch(异常类型ex){
        //对异常进行处理的代码块
    }
    //代码块
}

情况二:出现异常

在这里插入图片描述

情况三:pritnStackTrace()的堆栈跟踪功能显示出程序运行到当前类的执行

在这里插入图片描述

情况四:异常类型不匹配

在这里插入图片描述

情况五:

在catch块中处理异常

-加入用户自定义处理信息

system.out.print("出现错误:被除数和除数必须是整数");

-调用方法输出异常信息

e.printStackTrace();

-异常对象常用的方法

方法说明
void printStackTrace()输出异常的堆栈信息
String getMessage()返回异常信息描述字符串,是printStackTrace()输出信息的一部分

常见的异常类型

异常类型说明
Exception异常层次结构的父类
ArithmeticException算术错误情形,如零作除数
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException尝试访问null对象成员
ClassNotFoundException不能加载所需的类
IllegalArgumentException方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式转换异常,如把"abc"转换成数字

try-catch-finally

在try-catch块后加入finally块

1.是否发生异常都执行

2.不执行的唯一情况

在这里插入图片描述

存在return的try-catch-finally块

在这里插入图片描述

多重catch块

引发多种类型的异常

1.排列catch语句的顺序:先子类后父类

2.发生异常时按顺序逐个匹配

3.只执行第一个与异常类型匹配的catch语句

声明异常

如果在一个方法体中抛出了异常,如何通知调用者?

throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开

方式一:调用者处理异常

方式二:调用者继续声明异常:mian()方法声明的异常由Java虚拟机处理

抛出异常

除了系统自动抛出异常外,有些问题需要程序员自行抛出异常

使用throe抛出异常

throw与throws

throwthrows
生成并抛出异常声明方法内抛出了异常
位于方法体内部,可作为单独语句使用必须跟在方法参数列表后面,不能单独使用
抛出一个异常对象,且只能是一个声明抛出异常类型,可以跟多个异常

异常结构体系

在这里插入图片描述

自定义异常

当JDK中的异常类型不能满足程序的需要时,可以自定义异常类

使用自定义异常的步骤

1.定义异常类(继承Throwable类、继承Xepection或者RuntimeException)

2.编写构造方法,继承父类的实现

3.实例化自定义异常对象

4.使用throw抛出

异常链

A方法调用B方法时,B方法却抛出了异常。那A方法继续抛出原有的异常还是抛出一个新的异常?

1.抛出原有的异常:A方法与B方法进行了关联,不便于代码的修改和扩展

2.抛出新的异常:异常链创建了新的异常但却保留了原有异常的信息

异常处理原则

1.异常处理与性能(异常只去捕获有可能出现异常的地方)

2.异常只能处理非正常情况

3.不要将过于庞大的代码块放在try中在catch中指定具体的异常类型

4.需要对捕获的异常做处理


总结

1.try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一;

2.try-catch-finally块中,finally块唯一不执行的情况是什么?

答:System.exit(1); ps.此时这个数字不能为0

3.异常分为Checked异常和运行时异常

答:Checked一场必须捕获或者声明抛出

​ 运行时异常不要求必须捕获或者声明抛出


面试题

1.try-catch块中存在return语句,是否还执行finally块?如果执行,说出执行顺序。

答:先执行finally块,再执行return




案例

案例1

创建一个Person类

private int age;

对以上进行getter/setter

创建一个类

new一个Person

—Person p = new Person();

set这个Person的年龄

—p.setAge(15);

y块?如果执行,说出执行顺序。

答:先执行finally块,再执行return

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值