zoukankan      html  css  js  c++  java
  • 异常处理的两种方式

    1.使用throws关键字,声明异常,交给方法的调用者处理,最终交个JVM处理(中断处理)

    JVM中断处理,后面的后续代码就不会执行了。 throws使用格式: 当一个方法抛出了异常,就在方法声明时使用throws关键字,将异常交给方法调用者处理

    修饰符 返回值类型 方法名(参数列表) throws AAAException, BBBException {
      //method body
    }

    注意:

    1、如果throws的多个异常是子父类关系,那么就只用声明父类 2、调用了声明异常的方法,那么就必须处理这些声明的异常,要么是继续throws,交给别人处理,要么就try...catch自己处理

    package cn.zhuobo.day12.aboutException;

    import java.io.FileNotFoundException;
    import java.io.IOException;

    public class Demo01Throws {
      public static void main(String[] args) throws IOException {// main调用了声明异常的方法,可以选择继续声明异常,继续抛出异常给main的调用者也就是JVM处理
          readFile("c:a.taxt");
      }
    // 这是这三个异常的继承关系:FileNotFoundException extends IOExcetion Exception,因此抛出了两个异常就只用声明父类异常
      public static void readFile(String fileName) throws IOException {
          if(!fileName.equals("c:a.txt")) {
              throw new FileNotFoundException("文件路径不是c:a.txt");
          }
          if(!fileName.endsWith(".txt")) {
              throw new IOException("后缀名不是txt");
          }
          System.out.println("读取文件");// 如果不符合抛出异常的条件,那么就执行这句话
      }
    }

    2.异常的第二种处理方式,捕获异常try......catch

    格式:

    try {
      可能产生异常的代码
    }catch(定义一个异常的变量,用来接收try中抛出的异常对象) {
      异常的处理逻辑,接收异常对象之后怎么处理异常,一般在工作中
      会把异常记录到一个日志中
    }
    ...// 多个catch
    catch(异常类名 变量名) {
      try可能抛出多个异常,可以使用多个catch
    }finally {
              System.out.println("这里的代码无论是否出现异常都会执行,一般用于资源回收");
              // finally代码块不能单独使用,和try catch一起使用
              // 如果finally代码块里有return语句,那么永远返回finally中的结果,应该避免在finally中写return语句
    }

    后续代码

    注意 1、try可能回抛出多个异常对象,可以使用多个catch处理这些异常 2、try产生了异常就执行相对应的异常处理逻辑,之后继续执行后续代码 3、没有产生异常就不执行catch,执行完try后,执行后续代码

    package cn.zhuobo.day12.aboutException;

    import java.io.FileNotFoundException;
    import java.io.IOException;

    public class Demo02TryCatch {
      public static void main(String[] args) {//这里没有throws声明抛出异常
          try {
              // 可能产生异常的代码
              readFile("sss");
          }catch (IOException e) {// try里抛出什么异常对象,catch就声明什么异常变量,接收抛出的异常
              // 异常的处理逻辑
              System.out.println("后缀名不是txt");
          }
          //与throws不同的是,自己try catch处理异常,不是交个方法调用这JVM处理,就不会中断处理,后续代码可以继续执行
          System.out.println("这些都是后续的代码");
      }

      public static void readFile(String fileName) throws IOException {// 如果结尾不是txt,这个方法会产生一个异常对象
          if(!fileName.endsWith(".txt")) {
              throw new IOException("后缀名不是txt");
          }
      }
    }

    3.Throwable类中定义了三个异常处理方法

    String getMessage():返回此 Throwable 的简短描述
    String toString():返回此 Throwable 的详细消息字符串
    void printStackTrace():JVM打印异常对象,默认使用这个方法,这是最详细的异常信息

    // 可以在catch使用这三个方法,打印异常信息

    catch (IOException e) {// try里抛出什么异常对象,catch就声明什么异常变量,接收抛出的异常
              // 异常的处理逻辑
              System.out.println(e.getMessage());
              System.out.println(e.toString());
              e.printStackTrace();
          }

    Output:异常信息一个比一个详细

    后缀名不是txt// getMessage
    java.io.IOException: 后缀名不是txt// toString
    java.io.IOException: 后缀名不是txt// printStackTrace
    at cn.zhuobo.day12.aboutException.Demo02TryCatch.readFile(Demo02TryCatch.java:23)
    at cn.zhuobo.day12.aboutException.Demo02TryCatch.main(Demo02TryCatch.java:10)
  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/Hiramunderneath/p/15257365.html
Copyright © 2011-2022 走看看