异常初识

263 阅读2分钟

异常继承体系

|--Object
    |--Throwable
        |--Error(错误)
        |--Exception(异常)

异常分类

运行时异常(RuntimeException):在运行时才会产生的异常,其子类都是运行时异常,非其子类就不是运行时异常

注意:非运行时异常,在编译时就不通过,必须处理或者抛出

image.png


异常处理方式

  • 自己捕获处理
  • 抛出

自己捕获处理

通过try...catch语句对异常进行捕获处理,语法格式如下:

注意:finally语句块一定会执行到:前提前面语句没有执行System.exit(0)退出虚拟机

try{
    //可能产生异常的代码
}catch(捕获的异常类型 e){//e是形式参数
    //该异常捕获之后要做的操作
}catch(捕获的异常类型 e){//e是形式参数
    //该异常捕获之后要做的操作
}finally{
    //异常发生之后一定会执行到的语句块:
    //如:①流资源关闭②释放锁等
}

示例1:

public static void main(String[] args) {
    try{
        System.out.println("111");
        System.out.println(1/0);
        System.out.println("222");
    }catch(Exception e){
        e.printStackTrace();
    }finally {
            System.out.println("finally语句");
    }
    System.out.println("333");
}

结果:产生异常后的语句没有执行

image.png

抛出异常

抛出异常有两种方式,throws和throw,两者区别如下:

throws:

  • 用于声明一个方法可能产生的所有异常,不做任何处理而是将异常往上抛,谁调用我我就抛给谁。
  • 用在方法声明后面,跟的是异常类名,可以跟多个异常类名,用逗号隔开
  • 表示抛出异常,由该方法的调用者来处理
  • throws表示出现异常的一种可能性,并不一定会发生这些异常

throw:

  • 用于抛出一个具体的异常对象。
  • 用在方法体内,跟的是异常对象名,且只能抛出一个异常对象名
  • 表示抛出异常,由方法体内的语句处理,或者继续使用throws抛给方法调用者,让调用者处理
  • throw则是抛出了异常,执行throw则一定抛出了某种异常  

示例:

public static void main(String[] args) {
    //调用者处理异常
    try {
        test();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void test() throws Exception {//抛给调用者
    //抛出异常对象
    throw new Exception();
}