异常体系
异常
异常:就是程序出现了不正常的情况。程序在执行过程中,出现的非正常的情况,最终导致JVM的非正常停止。
注意:语法错误不在异常体系中。
异常体系
编译时异常和运行时异常
编译时异常就是在编译的时候出现的异常。举例:SAXException
运行时异常就是运行时出现的异常。举例:NullPointerException
JVM默认的异常处理方案
如果程序出现了问题,如果我们没有相应的代码对该异常进行处理,那么JVM虚拟机会做默认处理。
1.异常会被交给该方法的调用者进行处理
2.将异常的名称及异常的原因及异常出现的位置等信息输出到控制台
3.程序停止运行
异常处理方式
异常处理方式一——throws
这个格式是写在方法的定义出,表示声明一个异常。
格式:
throws 异常类名;
举例:
public static void main(String[] args) throws ParseException{
durationMethod();
}
说明:
1.声明异常表示告诉调用者,调用该方法可能会出现异常;
2.如果该方法中没有出现异常,则正常执行;
3.如果方法中出现了异常,那么就将这个异常交给方法的调用者进行处理。
注意:
1.编译时异常因为是在编译时就会检查,所以必须要写在方法名后面进行显示声明;
public static void main(String[] args) throws ParseException{
durationMethod();
}
2.运行时异常因为在运行时才会发生,所以在方法后面可以不写。
public static void main(String[] args) /*throws NullPointerException*/{
durationMethod();
}
抛出异常对象——throw
说明:
1.方法内部执行,表示当前代码手动抛出一个异常,后面的代码不再执行;
2.方法中,出现了异常,没有继续运行下去的意义,采取抛出处理,让该方法结束运行。
3.告诉调用者方法出现了问题。
格式:
throw new 异常();
throws和throw的区别
throws | throw |
---|---|
用在方法声明后面,跟异常类名 | 用在方法体内,跟的是异常对象名 |
表示声明异常,调用该方法有可能出现这样的异常 | 表示手动抛出异常对象,由方法体内的语句进行处理 |
异常处理方式二——try…catch…
不会中断程序,程序可以继续向下执行。
格式:
try{
//可能出现的异常代码
}catch(异常类名 变量名){
//异常的处理代码
}
问题:
1.如果try代码块中没有遇到问题,怎么执行?
—try代码块中的代码会全部执行完毕,不会进入catch,继续向下执行。
2.如果try中遇到了问题,那么try下面的代码怎么执行?
—当try中的代码执行遇到异常,会直接跳转到对应的catch代码块进行捕获处理,处理完成后继续向下执行,try 内的后面代码不再执行。
3.如果出现的问题没有被捕获,那么程序如何运行?
—没有被catch捕获,会默认处理。
4.同时有可能出现多个异常怎么处理?
—可以使用多个catch进行捕获不同类型的异常
—如果多个异常之间存在子父类关系,父类要写在下面。则就会出现,出现对应的异常,直接被父类捕获处理,且 编译时,下面的代码会报红。
Throwable成员方法
方法名 | 说明 |
---|---|
public String getMessage() | 返回此 throwable 的详细消息字符串 |
public String toString() | 返回此可抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |
自定义异常
1.定义一个异常类,类名要见名知意
2.继承Exception或者RunTimeException
示例:
public class AgeOutOfBoundsException extends RuntimeException{
public AgeOutOfBoundsException() {
}
public AgeOutOfBoundsException(String message) {
super(message);
}
}