异常(一)

异常/Exception

异常知识点

常见格式:

try{
    //可能异常代码块
}catch(捕获的异常类型){
    //异常处理语句
}finally{
    //一定要执行的代码
    //一般用来关闭关闭流,数据库
}
//捕获异常处理

运行流程

从上图可以发现finally语句必须执行

异常的分类如下所示

  1. Thrawable/可抛出的异常

    1. Exception/异常

      1. 编译时异常(受检异常)/Exception下,除了RuntimeException外所有

      2. 运行时异常(非受检异常)/RuntimeException

    2. Error/错误

注意!

  1. 编译时异常,大多需要我们try-catch;

  2. 运行时异常,不需要强制try-catch,在发现错误后,修改错误(直接解决)。

常见运行异常:

名称显示语句
空指针 NullpointerException
数组下标越界 ArrayIndexOutOfBoundsException
转型错误 ClassCastException
算术异常 ArithmeticException

printStackTrace();

    e.printStackTrace();
    //打印异常的栈,该方法在Throwable中,其子类没有重写

在查看printStackTrace()打印出的语句时,从最后往前看

多个异常的处理

1. 直接捕获父类异常
catch(Exception e){}
//或者
catch(Thrawable e){}
2.多个异常依次捕获,多个catch块
try{
​
}catch(异常1){
​
}catch(异常2){
​
}catch(异常3){
​
}

注意:

  1. 多个异常依次捕获需要注意异常的顺序

    最大的异常最后,父类异常放在最后处理.

  2. 多个异常捕获,只会根据顺序进入一个catch块

3.JDK1.8后
catch(异常1 | 异常2 | 异常3){
}

注意:

在catch中的异常为同级关系,不允许存在父子关系

其他书写形式

  1. try{
    }finally{
    }
  2. try{
    }catch{
    }catch{
    }finally{
    }
  3. try{
    }catch{
    }catch{
    }

注意!以下书写方式不正确

  1. try{
    }
  2. finally{
    }

有趣的练习

1.

int x = 1;
try {
    System.out.println("A");
    return ++ x;
} catch (Exception e) {
    System.out.println("D");
} finally {
    System.out.println("B");
    ++x;
}
System.out.println("C");
return x;

上题的输出结果为

A
B
y = 2

2.

String aa = "aa";

try {
    aa = "bb";
    return aa;
} catch (Exception e) {
    e.printStackTrace();
} finally {
    aa = "cc";  
    return aa;
}

上题的输出结果为

y = cc
原文地址:https://www.cnblogs.com/-Archenemy-/p/11972459.html