Throwable:
Throwable 是 Java 编程语言中所有错误和异常类的超类,用于表示可以被抛出的任何对象。它定义了两个子类:Error 和 Exception。
Error 表示严重问题,一般由 JVM 抛出,如 OutOfMemoryError、StackOverflowError 等;
而 Exception 则表示在程序运行期间可能会发生的问题,分为可检查与不可检查异常。可检查异常需要直接处理或者抛出给上层方法进行处理,如 IOException、SQLException 等;而不可检查异常是指那些一般情况下无法恢复的错误,如 NullPointerException、ArrayIndexOutOfBoundsException 等。
Throwable 中常用的方法包括:
分类:
按照异常出现的时机,Java 中的异常可以分为两类:编译期异常(Checked Exception)和运行期异常(RuntimeException)。
编译异常要求程序员必须处理(捕获或者抛出),不然没法通过编译。(所调用的方法向上抛了异常,调用时必须处理才能通过编译)
编译异常是在使用外部资源时,外部资源可能无法被正确获取因而产生的异常,是程序之外的外部因素,无法被程序控制。
因为无法被程序控制,总是存在出现的可能,所以当外部资源无法被正确获取时程序接下来因该如何运行需要给出明确的方案。
运行异常:在程序运行过程中才能检测出来的异常,运行异常程序员可以不处理(会逐级往上抛,直至抛给main方法再交给jvm处理),但可能会导致程序崩溃。运行异常是程序内部问题导致 如:NullPointerException
运行时异常是程序内部的问题,可以通过修改程序代码来避免产生异常的条件,可以保证不出现运行异常,所以运行异常可以不处理。
当Java程序抛出异常时,它会立即停止当前方法的运行并返回到该方法被调用的地方。如果未处理此异常,它将向上抛出并捕获或终止整个程序的执行。因此,在编写Java代码时,应该确保适当地处理所有可能发生的异常,以避免不必要的中断或程序崩溃
throw: 在指定位置抛出指定的异常
throw new AException("异常原因");
处理异常:
if 如果AException 是RuntimeException or RuntimeException的子类(AException is 运行时异常),We don't have to deal with it,默认交给jvm处理。
else AException 是编译时异常,程序员必须处理,方法签名后使用throws BException(BException 范围大于等于 AException,抛给方法调用者处理) or try-catch处理
自定义异常:
必须继承Exception(运行时异常必须继承RuntimeException)
2个构造方法
无参构造,有参构造(一个String message 参数)
其方法体中调用父类构造方法
package com.example.demo11.exception;
public class MyException extends Exception {
public MyException(){
super();
}
public MyException(String message){
super(message);
}
}
package com.example.demo11;
import com.example.demo11.exception.MyException;
public class Demo11Application {
public static void main(String[] args) {
try {
test();
} catch (MyException e) {
e.printStackTrace();
}
}
public static void test() throws MyException{
throw new MyException("test");
}
}
运行异常
package com.example.demo11.exception;
public class MyException extends RuntimeException {
public MyException(){
super();
}
public MyException(String message){
super(message);
}
}
运行异常 可以不处理
package com.example.demo11;
import com.example.demo11.exception.MyException;
public class Demo11Application {
public static void main(String[] args) {
test();
}
public static void test() {
throw new MyException("test");
}
}