我们在 Java 异常 语法的教程中了解到,catch 语句块中,catch 后面的 () 里面是一个 Exception 类或者是其子类。那么在 Java 中有哪些异常类呢?又有哪些异常类是能够被捕获的呢?
我们可以看到,在 Java 语言 中,有两个最常用的异常类,一个是 Exception,一个是 Error。它们都是 Throwable 的子类。
Exception 表示的是程序中出现了问题,可以直接使用 try … catch 来捕获处理。Error 一般值 JVM 侧错误,程序中无法处理。
类名 | 描述 |
---|---|
IOException | 输入输出异常 |
ArithmeticExecption | 算术异常类 |
NullPointerException | 空指针异常类 |
ClassCastException | 类型强制转换异常 |
SQLException | 操作数据库异常 |
FileNotFoundException | 文件未找到异常 |
NegativeArrayException | 数组负下标异常 |
ArrayIndexOutOfBoundsException | 数组下标越界异常 |
NumberFormatException | 字符串转换为数字异常 |
… | … |
我们在上面列出了好多异常类,如果在生产环境中,异常类型不能够满足我们的需求,或者我们想要拥有自定义的异常类型。我们可以根据自己的需求来定义自己的异常类。
class 异常类名称 extends Exception{
public 异常类名称(String message){
//dosomething
}
}
自定义异常类的时候,需要继承 Exception,那么自定义的异常类就是异常的子类。我们定义了一个有参的构造函数,在构造函数里面我们可以实现自己的逻辑。比如将异常信息打出等等。
package com.haicoder.net.except;
public class MyException extends Exception {
public MyException(String message) {
System.out.println(message);
}
}
Java 语言的异常信息,我们除了可以自己用 System.out.println(异常对象)
外,我们还可以用 e.printStackTrace() 将异常信息打出,这种方式是异常信息打印最完整的。
package com.haicoder.net.except;
public class ExceptionTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)\n");
System.out.println("程序开始");
try {
int i = 2;
int j = 0;
int m = i / j;
} catch (Exception e) {
System.out.println("异常信息:" + e.getMessage());
System.out.println("==================");
e.printStackTrace();
}
System.out.println("程序结束");
}
}
运行结果
调用 e.getMessage() 方法只打印出了一个除以 0 的提示,而调用 e.printStackTrace() 方法,将异常的详细信息打印了出来。我们可以看到代码在哪个类,第几行。
Java 异常都捕获 Exception 类型或者是它的子类,我们在捕获异常信息的时候,可以使用已经存在的异常类也可以自己定义异常类,自己定义异常类的时候,需要继承 Exception 类。