• 异常处理的两种方式


    一、使用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("读取文件");// 如果不符合抛出异常的条件,那么就执行这句话
        }
    }
    

    二、异常的第二种处理方式,捕获异常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");
            }
        }
    }
    

    三、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)
    
  • 相关阅读:
    053-113
    053-262
    053-294
    053-494
    053-60
    053-105
    053-102
    053-218
    【转】LiveWriter插入高亮代码插件介绍 基于SyntaxHighighter
    windows live Writer test
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10636557.html
Copyright © 2020-2023  润新知