一、异常层次结构
异常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后的代码发生异常,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){
// 程序代码
}
四、?try-catch-finally
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执行
注意:
- catch 不能独立于 try 存在。
- 在 try/catch 后面添加 finally 块并非强制性要求的。
- try 代码后不能既没 catch 块也没 finally 块。
- try, catch, finally 块之间不能添加任何代码
五、?throw与throws
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)
}
|