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");}
}