异常(Exception)指的是所有可能造成计算机无法正常处理的情况。发生异常时,将阻止程序的运行,若不妥善处理异常,可能造成计算机死机。经过异常处理,可以保证程序的正常运行,我们把针对不同的异常做妥善的处理的方式叫做“异常处理机制”。
异常处理的目的:加强程序的健壮性、
Java 中,所有的异常都被封装到相应的类中,同时,用户也可以自定义异常类和自定义抛出异常。
抛出异常(throw):是指将异常提交给运行时系统的过程。
捕获异常(
异常类 Throwable
异常类是指由程序抛出的异常对象所属的类。
异常可以分为两大类:
类和 java.lang.Error
类。这两个类均继承自 java.lang.Throwable
类
Error 类通常指的是
Exception 类通常指的是可以处理的异常,分为对于编译时异常,不解决编译就不会通过
对于运行时异常,可以选择性地来进行处理,如果不处理则出现异常时将交给 JVM 默认处理
获取异常信息的方法
Java 中常见的异常类
异常
描述
NullPointerException
空指向异常(空指针异常)。指的是使用了一个未初始化的对象(未开辟内存
ArithmeticException
算术异常。如:除以零
ArrayIndexOutOfBoundsException
数组下标越界异常。数组的
FileNotFoundException
文件未找到异常
OutOfMemoryExceptin
内存溢出异常(内存不足异常)。可用内存不足以分配给一个对象时抛出
NoSuchElementExceptin
调用了类集中不存在的元素
ClassCastExceptin
对象与类集中的元素不兼容
UnsupportedOperationExceptin
修改一个不允许修改的对象
异常处理 try-catch-
死了都要 try,不 try 到 catch 不痛快
当发生异常时,通常有两种处理方法:
try-catch-finally
异常处理的语法:
try {
// 要检查的语句
} catch (异常类 e) {
// 异常发生时的处理语句
e.printStackTrace(); // 打印异常信息
} finally {
// 一定会运行到的语句
}
try 语句块不可以独立存在,必须与 catch 或 finally 同存,finally 语句块可以省略
catch 区块可以有多个,此时异常类型必须子类在前,父类在后
当 try 区块捕获到异常时,不执行接下来的语句,立即进入 catch 区块
finally 语句块不会被执行的情况
在 finally 语句块中发生了异常
在前面的
程序所在的线程死亡
CPU 关闭
异常处理的几种形式
try…catch
try…catch…finally
try…finally
向上抛出异常 throws
方法头中使用 throws
关键字可以表明这个方法可能存在的异常类型,此方法不处理异常,而是将该异常提交给调用这个方法的方法。
public class Test {
public static vo
自行抛出异常 throw
throws
用于方法声明中,声明一个方法会抛出哪些异常,而 throw
是方法体中实际执行抛出异常的动作。
throw 异常类型的
try {
throw new ArrayIndexOutOfBoundsException("我是异常信息");
} catch (Exception e) {
e.printStackTrace();
}
自定义异常类
当系统提供的异常类不足以满足业务
class 自定义异常类 extends 异常类型 {
}
public class Test {
public static void main(String[] args) {
try {
throw new MyException("我是自定义异常类");
} catch (Exception e) {
e.printStackTrace();
}
}
}
class MyException extends Exception {
private String msg;
public MyException(String msg) {
this.msg = msg;
}
@Override
public String toString() {
return "MyException [msg=" + msg + "]";
}
}