异常
概述
异常:就是程序出现了不正常的情况。程序在执行过程中,出现的非正常的情况,最终导致JVM的非正常停止。
注意:语法错误不算在异常体系中。
异常体系
↓—— | Throwable | ——↓ |
---|---|---|
error | ExcePtion | |
RuntimeException 及其子类 | 除RuntimeExcePtion之外所有的异常 |
Error:严重问题,通过代码无法处理。比如:内存溢出
Exception:称为异常类,它表示程序本身可以处理的问题
Runtime Exception及其子类:运行时异常。(空指针异常,数组索引越界异常)
除Runtime Exception之外所有的异常:编译期必须处理的,否则程序不能通过编译。(日期格式化异常)
编译时异常和运行时异常
java文件 | |
---|---|
↓ Javac.exe | 编译时异常,是在编译成class文件时必须要处理的异常,也称之为受检异常↓ |
字节码文件 | |
↓ Java.exe | 运行时异常,在编译成class文件不需要处理,在运行字节码文件时可能出现的异常。也称之为非受检异常 |
运行结果 |
简单来说:编译时异常就是在编译的时候出现的异常,运行时异常就是在运行时出现的异常。
JVM的默认处理方案
如果程序出现了问题,我们没有做任何处理,最终JVM会做默认的处理。
1、把异常的名称,异常原因及异常出现的位置等信息输出在控制台
2、程序停止执行
异常处理方式——throws
格式:throws 异常类名;
注意:这个格式是写在方法的定义处,表示声明一个异常
1、编译时异常因为在编译时就会检查,所以必须要写在方法后面进行显示声明
2、运行时异常因为在运行时才会发生,所以在方法后面可以不写
抛出异常对象——throw
格式:throw new 异常();
注意:这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了。
抛出处理异常的意义
1、在方法中,当传递的参数有误,没有继续运行下去的意义了,则采取抛出处理,表示让该方法结束运行。
2、告诉调用者方法中出现了问题
异常处理方式——try...catch...
格式:
try{
可能出现异常的代码;
} catch(异常类名 变量名){
异常的处理代码;
}
好处:可以让程序往下执行。
Throwable 的成员方法
方法名 | 说明 |
---|---|
public String getMessage() | 返回此throwable的详细消息字符串 |
public String toString() | 返回此可以抛出的简短描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |
自定义异常
目的:为了让异常信息更加的见名知意
步骤:
1、定义异常类
2、写继承关系
3、空参构造
4、带参构造