异常Exception是Throwable的一个子类。
下面的列表是 Throwable 类的主要方法:
序号 | 方法及说明 |
---|---|
1 | public String getMessage() 返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。 |
2 | public Throwable getCause() 返回一个 Throwable 对象代表异常原因。 |
3 | public String toString() 返回此 Throwable 的简短描述。 |
4 | public void printStackTrace() 将此 Throwable 及其回溯打印到标准错误流。。 |
5 | public StackTraceElement [] getStackTrace() 返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。 |
6 | public Throwable fillInStackTrace() 用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。 |
当try后的代码发生异常,catch块中的语句就会捕获异常类,try后的代码块可以起到保护作用
public class test { public static void main(String[] args) { // try { // 可能出现异常代码块 // }catch (异常类型 变量名) { // catch块 // } try { int a = 1/0; }catch (Exception e) { System.out.println(e); } } } // 输出:java.lang.ArithmeticException: / by zero
try-catch还可以执行多重捕获,当发生异常会传递到第一个catch块,如果抛出的异常数据类型和第一个不匹配,就会传递给下一个catch块
try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }catch(异常类型3 异常的变量名3){ // 程序代码 }
finally:要try-catch一起使用,用在后面,无论有什么异常发生,finally都会被执行(可以运行清理类型等收尾善后性质的语句)
public class test { public static void main(String[] args) { try { int a = 1/0; }catch (Exception e) { System.out.println(e); }finally { System.out.println("finally执行"); } } } //java.lang.ArithmeticException: / by zero // finally执行
注意:
throws关键字
throws用来在类中捕获异常信息,标明方法可能抛出的异常。说明该方法在运行的时候可能会出现这样的异常,在代码中一定要对相应的异常进行处理。一个方法还可以声明多个异常,用逗号隔开就行了。
public class test { public static void main(String[] args) { damo1(); } // 调用可能会出异常 private static void damo1() throws NumberFormatException{ int[] arr = null; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } // Exception in thread "main" java.lang.NullPointerException }
throw关键字
当程序发生异常而无法处理的时候,会抛出对应的异常对象。在某些时刻可能会想要自行定义抛出异常,想要自行抛出异常,可以使用throw关键字,并生成指定的异常对象抛出。throw是一个动作,是抛出异常。例如:throw new RuntimeException(),主动抛出异常。
public class test { public static void main(String[] args) { try { int a = 1/0; }catch (Exception e) { System.out.println(e); }finally { System.out.println("finally执行"); } if (true) { throw new RuntimeException("自定义的throw错误"); } } // java.lang.ArithmeticException: / by zero // finally执行 // Exception in thread "main" java.lang.RuntimeException: 自定义的throw错误 // at com.xizhicheng.mybatis.test.main(test.java:15) }