Day_15 【Java基础】异常的处理 try...catch、throws、throw及自定义异常【附源码】

一.什么是异常?

java异常指在程序运行时可能出现的一些错误,如:索引下标越界、空指针异常、网络连接错误等。
1.ava异常类的体系结构图:
在这里插入图片描述
Java所有异常类都是继承自java.lang.Throwable类,包括Java异常处理的两个重要子类:Error和Exception。
Error:称为错误类,表示java运行时产生的系统内部的错误或资源耗尽的错误,是比较严重的错误,仅靠修改程序本身是不能恢复的,如系统奔溃,JVM错误等。
在这里插入图片描述
Exception:Exception类称为异常类,表示程序本身可以处理的错误。在Java程序开发中进行的异常处理操作,都是针对Exception及其子类进行的。在Exception众多的子类中除RuntimeException类,该类及其子类表示运行时异常,在Java开发中一般不进行异常处理;除了RuntimeException之外,Exception类及其所有的子类都表示编译时异常。
2.Throwable中常用方法:

String getMessage():返回此throwable的详细消息字符串
void printStackTrace():将此throwable及其追踪输出至标准错误流

二.异常的类型

1.编译时异常
编译时异常是指Java编译器根据语法规则对明显的异常进行检查,输出错误的位置或信息,提示进行异常梳理,否则编译无法通过,也就无法运行。
>编译时异常处理的两种方式

try…catch语句进行异常捕获处理
使用throws关键字抛出异常,让调用者处理

2.运行时异常
运行时异常是指编译时通过了检查,即使没有使用try…catch或throws关键字抛出,编译也能通过,但是在运行的时候JVM进行自动捕获异常在运行时抛出异常。

常见的运行时异常:下标越界、空指针异常、算数运算异常、数字格式异常等。

3.如何看待编译时异常和运行时异常?
使用try…catch处理编译时异常,使得编译时不在报错,但是运行时仍然可能报错。运行时异常比较常见,我们不进行处理。

三.编译时异常的处理

1.try…catch
将可能出现的异常语句包在try的括号中,使用catch进行处理,catch可以并列写多个,当执行一个时,其后的就不会在执行;try…catch结构可以嵌套使用,最后的finally是可选的结构,里面的程序一定会执行,比如释放资源、关闭线程池等;只有在try…catch中执行了System.exit(0)语句,代表退出当前的虚拟机,后续的任何代码就都不会执行了。
try…catch…finally语法格式

try{
//可能出现异常的代码
}catch(Exception类或其子类 变量名){
//对捕获的异常进行处理
}

finally{
//最后需要执行的操作(如释放资源、关闭线程池等)
}

示例
在这里插入图片描述
2.throws关键字
在Java开发中,开发者意识到在可能出现异常,但是并不急于处理,此时只需要将异常抛出,然后让后续调用时在进行异常的处理,此时我们使用throws关键字抛出即可,可以同时抛出多个异常。
throws语法格式

[修饰符] 返回值类型 方法名(参数列表) throws 异常类1,异常类2,…{
//方法体
}

示例
在这里插入图片描述
3.throw关键字
除了可以通过throws关键字抛出异常外,还可以使用throw关键字抛出异常,throws用于方法中,可以抛出多个异常,而throw用在方法体内,只能抛出一个异常。
语法格式:

修饰符 [返回值类型] 方法名(参数列表) throws 抛出的异常类{
throw new Exception类或其子类构造方法;
}

示例:
在这里插入图片描述

4.自定义异常
Java允许自定义异常,但自定义的异常类必须继承自Exception类或其子类。
在这里插入图片描述

四.课后笔试、面试:

1.判断程序的输出结果
在这里插入图片描述
执行结果
在这里插入图片描述
2.举例说说常见的异常?
在这里插入图片描述
3.说说throw和throws有何区别?
throw用在方法的方法体内,用于抛出一个异常,若需要对throw抛出的异常进行处理,需要在该方法上使用throws关键字声明异常,在程序调用时使用try…catch进行处理。
throws用在方法的声明上,用于声明异常,指定可能出现的一个或多个异常,档主函数调用时,如果发生异常,就会将异常抛给指定异常对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智商三岁半i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值