1.异常的概述
- 异常:java语言中,在程序执行中发生的不正常的行情况,如果不处理最终会导致JVM的非正常停止。
2.异常的分类
Java中的异常可以分为两大类:
- Error:java虚拟机无法解决的严重问题。一般意外无法解决处理。
- Exception:编程错误或者是外在的因素的问题,开发人员可以对代码进行修改而解决。
以上两类异常都是继承Throwable类,只不过是一个是开发人员能处理,一个是开发人员不能处理的
以上蓝色的可以理解为是运行时异常,而红色的则是编译时异常。
3.异常的处理机制
3.1抛出异常
程序中的方法出现错误了,方法创建异常对象并交付运行时的系统,异常对象包含了异常类型和异常出现时的程序状态等异常信息。(简单来说就是,我这里出错了,我不管,直接把错误丢给我的上级,让我的“上级”去处理(这里所谓的处理,并不是程序会自动去修改错误,只是“上级”会捉住这个错误,并报告信息。然后开发人员根据相应的信息去修改代码。))
任何java代码都可以抛出异常,都可以通过throw语句抛出异常
3.2捕捉异常
在方法抛出异常后,运行时系统寻找合适的异常处理器直接拿下异常。 就是捉住异常,而不需要丢给上级。 然后直接给开发人员打印错误的具体的信息。
异常捕获是通过try-catch语句或者 try-catch-finally语句实现的
try{
编写可能会出现异常的代码
}catch(异常类型1 e){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}catch(异常类型2 e){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}
finally: 无论异常是否发生,最终都会执行。 常用于资源的关闭。
java规定:对于任何可查的异常必须捕捉或声明抛出(就是本文最顶端的异常结构图中的红色类型的)
4.throw和throws关键字
4.1 throw
- throw关键字用在方法体内,用来抛出一个异常对象,将这个遗产对象传递到调用者处,并结束当前方法的执行。
- java程序的执行过程中如果出现异常,会生成一个异常类对象,该异常对象将被提交给java运行时系统,这个过程称为抛出异常(throw)
4.2 throws
- 声明异常: 将问题标识出来,报告给调用者。
- throws关键字运用于方法声明之上,表示的是当前的方法不处理异常,而是提醒该方法的调用者来处理异常
5.自定义异常
- 继承Exception或者他的子类即可
- 自定义的异常类应该包含两个构造器:一个是无参构造器,另外一个是带有详细信息的构造器
- 自定义的异常只能通过throw抛出
public class RegisterException extends Exception{
//空参构造
public RefisterException(){}
//@param message 表示异常的信息
public RegisterException(String message){
super(message);
}
}