Throwable查看获取的异常信息方法以及finally代码块

一.Throwable类中定义了一些查看获取的异常信息方法

public String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误原因

public String toString():获取异常的类型和异常描述信息(不用)

public void printStackTrace():打印异常的跟踪栈信息并输出到控制台(JVM打印异常信息,默认调用此方法,打印的异常信息是最全面的)

包含了异常的类型、原因、出现位置,在开发和调试阶段,都得使用printStackTrace。

在开发中也可以使用catch将编译期异常转换成运行期异常处理。

public static void main(String[] args) {
    try{
        readFile("d:\\a.tt");
    }catch(IOException e){ // try中抛出什么异常对象,catch就定义什么异常变量,
        // 用来接收这个异常对象
                /*
    Throwable类中定义了一些查看获取的异常信息方法:
    public String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误原因
    public String toString():获取异常的类型和异常描述信息(不用)
    public void printStackTrace():打印异常的跟踪栈信息并输出到控制台(JVM打印异常信息,默认调用此方法,打印的异常信息是最全面的)
     */
        System.out.println(e.getMessage()); // 文件的后缀名不对
        System.out.println(e.toString()); // java.io.IOException: 文件的后缀名不对
        e.printStackTrace();
    }
    // try catch执行后,继续执行后续代码
    System.out.println("后续代码");

}
public static void readFile(String fileName) throws IOException { // 加上throws声明异常

    /*
    如果传递的路径,不是.txt结尾
    那么我们就抛出IO异常对象,告知方法的调用者,文件的后缀名不对
     */
    if(!fileName.endsWith(".txt")){
        // 报错,编译异常,需要声明
        throw new IOException("文件的后缀名不对");
    }
    System.out.println("路径没问题,读取文件");
}

运行截图:

二.finally代码块

finally:有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。

什么时候的代码必须最终执行?

当我们在try语块中打开了一些物理资源(磁盘文件/网络连接/数据库连接),我们都得在使用完之后,最终关闭打开的资源。

finally的语法:

try...catch...finally:自身需要处理异常,最终还得关闭资源。

注意:finally不能单独使用。一般用于资源释放(资源回收)

比如在我们之后学习的IO流中,当打开了一个关联文件的资源,最后程序不管结果如何,都需要把这个资源关闭掉。

public static void main(String[] args) {
    try { // 可能会产生异常的代码
        readFile("c:\\a.tt"); // alt+enter
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        System.out.println("资源释放");
    }
    System.out.println("后续代码");
}
public static void readFile(String fileName) throws IOException { // 加上throws声明异常

    /*
    如果传递的路径,不是.txt结尾
    那么我们就抛出IO异常对象,告知方法的调用者,文件的后缀名不对
     */
    if(!fileName.endsWith(".txt")){
        // 报错,编译异常,需要声明
        throw new IOException("文件的后缀名不对");
    }
    System.out.println("路径没问题,读取文件");
}

运行截图:

注意一个小细节:即使不加finally代码块,执行完trycatch块后,依旧会执行后续代码。

猜你喜欢

转载自blog.csdn.net/wardo_l/article/details/114108617