一.什么是异常?
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用在方法的声明上,用于声明异常,指定可能出现的一个或多个异常,档主函数调用时,如果发生异常,就会将异常抛给指定异常对象。