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)
  • 相关阅读:
    LeetCode 167. 两数之和 II
    LeetCode 97. 交错字符串
    LeetCode 35. 搜索插入位置
    LeetCode 120. 三角形最小路径和
    LeetCode 350. 两个数组的交集 II
    LeetCode 174. 地下城游戏
    LeetCode 315. 计算右侧小于当前元素的个数
    LeetCode 309. 最佳买卖股票时机含冷冻期
    面试题 17.13. 恢复空格
    去除字符串首尾空格
  • 原文地址:https://www.cnblogs.com/Hiramunderneath/p/15257365.html
Copyright © 2011-2022 走看看