Throwable包括Error和Expected。
Error
Error错误是程序无法处理的,由JVM产生并抛出的。
举例:StackOverflowError \ ThreadDeath
Expected
Expected异常包括两类,即受检异常(非运行时异常)和非受检异常(运行时异常),异常往往是由程序的逻辑错误引起的。异常可以由程序自行处理。
受检异常:在编辑器中可以检测到,无需运行。
举例:ClassNotFoundException
非受检异常:运行后才可以检测到的异常。
举例:ArrayIndexOutOfBoundsException \ 空指针
程序处理异常的方式
① try - catch - finally
原本的程序设计是:一旦出现异常,那么将不再向下执行程序。
但是如果提前将可能出现异常的程序用try - catch包裹,那么程序即使出现问题也会继续向下执行。finally是不管上边正确还是错误,都会执行的程序。
public class Main {
public static void main(String[] args) {
int[] arr = new int[5];
try {
System.out.println("----------这是一条语句----------");
arr[5] = 1;
System.out.println("这条语句不会执行");
} catch (Exception e){
System.out.println("出现异常了");
} finally {
System.out.println("不管是否出现异常都会执行");
}
}
}
② 抛出
抛出是让程序的调用程序处理异常,这并不能解决问题,只是指出了问题所在。
public class Main {
public static void main(String[] args) {
try {
run();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("try-catch虽然报错,但仍然可以运行");
}
public static void run() throws ClassNotFoundException {
fly();
}
public static void fly() throws ClassNotFoundException {
Class.forName("MainX");
}
}
public class Main {
public static void main(String[] args) throws ClassNotFoundException {
run();
System.out.println("仅报错,并不能输出");
}
public static void run() throws ClassNotFoundException {
fly();
}
public static void fly() throws ClassNotFoundException {
Class.forName("MainX");
}
}