当前位置: 首页 > news >正文

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块后,依旧会执行后续代码。

 

相关文章:

  • 异常的注意事项
  • 自定义异常
  • 进程与线程
  • 线程类以及创建多线程的第一种方式---继承Thread类
  • Thread类的构造方法及常用方法
  • 创建多线程的第二种方式--实现Runable接口
  • Thread和Runnable的区别和匿名内部类方式实现线程的创建
  • 线程安全
  • 数据结构基本概念和术语
  • 线程状态
  • Object类中wait带参方法和notifyAll方法
  • File类
  • 递归(斐波那契数列、类加、累乘、打印多级目录)
  • FileFilter过滤器
  • LeetCode两数之和
  • 2018一半小结一波
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript HTML DOM
  • javascript从右向左截取指定位数字符的3种方法
  • jquery ajax学习笔记
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Solarized Scheme
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 多线程 start 和 run 方法到底有什么区别?
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 服务器从安装到部署全过程(二)
  • 基于Android乐音识别(2)
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 爬虫模拟登陆 SegmentFault
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 我与Jetbrains的这些年
  • 用Canvas画一棵二叉树
  • 字符串匹配基础上
  • mysql面试题分组并合并列
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 国内开源镜像站点
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #Lua:Lua调用C++生成的DLL库
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2)(2.10) LTM telemetry
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (windows2012共享文件夹和防火墙设置
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET 5种线程安全集合
  • .Net MVC4 上传大文件,并保存表单