一、异常分类
runtimeException:运行时错误,如被0除、下标越界,一般不进行处理。
二、Throwable常用的方法
例:
// public String getMessage();返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。 // public Throwable getCause();返回一个Throwable 对象代表异常原因。 // public void printStackTrace();//将此 throwable 及其追踪输出至标准错误流。 // public void printStackTrace(PrintSteam s); // public void printStackTrace(PrintWriter s); // public Throwable fillInStackTrace();用当前的调用栈层次填充Throwable 对象栈层次 // public StackTraceElement [] getStackTrace()返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。 // public String toString()使用getMessage()的结果返回类的串级名字。 public class Test6 { int a[] = {2,3}; public static void main(String args[]){ Test6 test6 = new Test6(); try { test6.f(); } catch (ArrayIndexOutOfBoundsException e){ System.out.print("1、这里调用的是printStackTrace()方法,打印异常堆栈信息"); e.printStackTrace(); System.out.println(); for(int i = 0; i< e.getStackTrace().length;i++){ System.out.println("这里调用的是public StackTraceElement [] getStackTrace()方法,将异常堆栈信息存在StackTraceElement数组中"); System.out.println(e.getStackTrace()[i].toString());//这里调用public String toString()方法。 } // 这个方法是为了追踪堆栈信息,一旦调用了此方法,就会返回一个Throwable对象用于填充新的堆栈信息,可以将注释去掉 // 便能看到第二次的e.printStackTrace()方法只打印了main方法调用出的异常堆栈信息 // e.fillInStackTrace(); // e.printStackTrace(); } } public void f(){ for(int i = 0; i<a.length; i++){ System.out.println(a[3]); } } } 三、多重捕获try{ // 程序代码}catch(异常类型1 异常的变量名1){ // 程序代码}catch(异常类型2 异常的变量名2){ // 程序代码}catch(异常类型2 异常的变量名2){ // 程序代码}如果保护代码中发生异常,异常被抛给第一个 catch 块。
如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
如果不匹配,它会被传递给第二个 catch 块,直到异常被捕获或者通过所有的 catch 块
四、throw和throws
throw:抛出一个具体的异常,可以是自定义的,也可以是刚捕获的。
throws:可能会抛异常,通常用在方法后面。
注;重写方法,新方法不能抛出新的异常,必须与原方法一致或者检测异常范围更小或者不抛。