异常
异常的定义:异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
异常处理
Java编程语言使用异常处理机制为程序提供了错误处理的能力
异常处理的流程:首先在程序中与预先设置好对付异常的处理办法,然后运行程序,等到程序出现异常,对异常进行处理,最后处理完毕,程序继续运行
5个关键字实现异常处理:
try:执行可能产生异常的代码
catch:捕获异常
finally:无论是否发生异常,代码总能执行
throws:声明方法可能要抛出的各种异常
throw:手动抛出异常
异常处理的三种情况:
1、程序未发生异常,try块走完,不进入catch块,进入finally块,同时继续向下运行。
2、程序发生异常并捕获,try块走到发生异常的位置后,进入catch块,进入finally块,同时继续向下运行。
3、程序发生异常但未捕获,try块走到发生异常的位置后,进入finally块,同时不会继续向下运行。
异常对象常用的方法:
void printStackTrace():输出异常的堆栈信息
String getMessage():返回异常信息描述字符串,是printStackTrace()输出信息的一部分
常见的异常类型:
异常分为Checked异常和运行时异常:
Checked异常必须捕获或者声明抛出
运行时异常不要求必须捕获或者声明抛出
多重catch块
引发多种类型的异常
排列catch 语句的顺序:先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句
声明异常
throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开
方式1:调用者处理异常
方式2:调用者继续声明异常
main()方法声明的异常由Java虚拟机处理
抛出异常
除了系统自动抛出异常外,有些问题需要程序员自行抛出异常
使用throw抛出异常
throw与throws
自定义异常
当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类
使用自定义异常的步骤:
1、定义异常类(继承Throwable类、继承Excepion 或者RuntimeException)
2、编写构造方法,继承父类的实现
3、实例化自定义异常对象
4、使用throw抛出
举例:自定义异常
public class WrongAgeException extends RuntimeException{
public WrongAgeException(String message){
super(message);
}
}
class User{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age>100||age<0){
throw new WrongAgeException("当前年龄输入错误,正确的是0~100");
}
this.age = age;
}
public static void main(String[] args) {
User u=new User();
u.setAge(180);
System.out.println(u.getAge());
}
}
结果如图:
因为代码中设置了年龄只能在0到100之间,如果超过了这个范围,就会抛出异常。
异常处理原则
异常处理与性能
异常只能用于非正常情况
不要将过于庞大的代码块放在try中
在catch中指定具体的异常类型
需要对捕获的异常做处理