前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础:Java异常机制

Java基础:Java异常机制

作者头像
栗筝i
发布2022-12-02 08:22:38
3010
发布2022-12-02 08:22:38
举报
文章被收录于专栏:迁移内容

异常是程序运行过程中出现的错误。Java 把异常当作对象来处理,把异常信息封装成了一个类,并定义一个基类java.lang.Throwable作为所有异常的超类。Throwable : 它是所有错误与异常的超类(祖宗类),有两个子类 ErrorException。 ~ 本篇主要记录内容包括:异常介绍、抛出异常、声明异常、捕获异常



文章目录

代码语言:txt
复制
- [一、异常介绍](https://cloud.tencent.com/developer)
        - [1、异常继承体系](https://cloud.tencent.com/developer)
        - [2、运行时期异常&编译时异常](https://cloud.tencent.com/developer)
        - [3、发生异常到时候,程序的执行特征](https://cloud.tencent.com/developer)
        - [4、异常与错误的区别](https://cloud.tencent.com/developer)
        - [5、异常在方法重写中细节](https://cloud.tencent.com/developer)
- [二、抛出异常、声明异常](https://cloud.tencent.com/developer)
        - [1、抛出异常 throw](https://cloud.tencent.com/developer)
        - [2、声明异常 throws](https://cloud.tencent.com/developer)
        - [3、自定义异常](https://cloud.tencent.com/developer)
        - [4、Throwable类中的常用方法](https://cloud.tencent.com/developer)
- [三、捕获异常](https://cloud.tencent.com/developer)
        - [1、try…catch…finally](https://cloud.tencent.com/developer)
        - [2、异常处理流程](https://cloud.tencent.com/developer)
        - [3、try…catch…finally 异常处理的组合方式](https://cloud.tencent.com/developer)

一、异常介绍

1、异常继承体系

异常是程序运行过程中出现的错误。Java 把异常当作对象来处理,把异常信息封装成了一个类,并定义一个基类java.lang.Throwable作为所有异常的超类

  • Throwable : 它是所有错误与异常的超类(祖宗类),有两个子类ErrorException
  • Error : 错误,程序无法处理的错误,比如OutOfMemoryErrorThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
  • Exception : 异常,程序本身可以处理的异常,程序中应当尽可能去处理这些异常。
    • RuntimeException : 运行期异常,JAVA程序运行过程中出现的问题,可以通过java虚拟机来自行处理
    • CheckableException : 编译时异常或者可检查异常,我们应该捕获或者抛出,try…catch。
2、运行时期异常&编译时异常
  • 运行时期异常:方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常,运行时期异常一旦发生,需要程序人员修改源代码;
  • 编译时异常: 必须在编译前处理,否则无法通过编译
3、发生异常到时候,程序的执行特征
  1. 我们的代码,从发生异常的地方,开始被一分为二
  2. 在异常发生之前的代码,都可以正常运行,之后的代码不会执行
  3. 当异常发生的时候,这个异常被jvm所捕获,并将这个异常的所有相关信息,创建为一个异常对象,然后将该异常对象的信息输出到控制台(执行的是虚拟机默认的异常处理代码)
  4. 终止当前程序
4、异常与错误的区别
  • 异常:指程序在编译、运行期间发生了某种异常(XxxException),我们可以对异常进行具体的处理。若不处理异常,程序将会结束运行。
  • 错误:指程序在运行期间发生了某种错误(XxxErrorError错误通常没有具体的处理方式,程序将会结束运行。Error错误的发生往往都是系统级别的问题,都是jvm所在系统发生并反馈给jvm的。我们无法针对处理,只能修正代码。
5、异常在方法重写中细节
  • 子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者不声明;
  • 当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集

二、抛出异常、声明异常

1、抛出异常 throw

在 java 中,提供了一个throw关键字,它用来抛出一个指定的(Throwable类型)异常对象,一般会用于程序出现某种逻辑时,程序员主动抛出某种特定类型的异常

使用格式:throw new 异常类名(参数);

具体步骤:

  • 创建一个异常对象, 封装一些提示信息(信息可以自己编写).
  • 通过关键字throw,将这个异常对象告知给调用者.
  • throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行

注意事项:

  • 如果抛出的异常对象属于可检查的异常,必须在该方法头部,声明抛出此异常, 即: throws 要抛出的异常类型;
  • 其次,对于抛出可检查的异常,还必须与方法的异常列表中的异常兼容;
  • 如果父类方法声明了异常列表:子类可以不声明异常列表,子类方法有自己异常列表时,必须保证,子类的异常列表所包含的异常类型,与父类中所包含的异常类型兼容
2、声明异常 throws

将问题标识出来,报告给调用者

throws是方法可能抛出异常的声明, 如果定义功能时有问题发生需要报告给调用者。可以通过在方法上使用throws 关键字进行声明。

对于声明了会抛出可检查异常的方法, 就意味着这个方法会产生可检查异常,所以,一旦调用该方法就必须对该方法做异常处理

throws后面可以写多个异常类,用逗号隔开

声明异常格式:修饰符 返回值类型 方法名(参数) throws <异常列表> { }

3、自定义异常

如果Java没有提供你需要的异常,则可以自定义异常类

编译时异常继承Exception,运行时异常继承RuntimeException

格式:

代码语言:javascript
复制
Class 异常名 extends Exception{ //或继承RuntimeException
    public 异常名(){
    }
    public 异常名(String s){
        super(s);
    }
}
4、Throwable类中的常用方法
  • getCause():返回抛出异常的原因,即异常提示信息。如果 cause 不存在或未知,则返回 null;
  • getMessage():返回异常的消息信息,即该异常的名称与详细信息字符串;
  • printStackTrace():在控制台输出该异常的名称与详细信息字符串、异常出现的代码位置

三、捕获异常

1、try…catch…finally

Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理

捕获异常格式:

代码语言:javascript
复制
try {
    //需要被检测的语句。
}
catch(异常类 e) { //try中抛出的是什么异常,在括号中就定义什么异常类型。
    //异常的处理语句。
}
finally {
    //一定会被执行的语句。
}
//try:该代码块中编写可能产生异常的代码。
//catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。
//finally:有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。
2、异常处理流程
  1. 首先,当异常在try*代码块中发生的时候,虚拟机首先捕获这个异常,创建一个异常对象(包含本次异常的所有详细信息);
  2. 虚拟机会把这个异常,抛出给catch代码块(类似于方法调用,虚拟机会调用catch代码块中,处理异常的代码);
  3. 执行catch代码块,中的处理异常的代码;
  4. 没有终止我们应用程序,而是从catch语句之后的代码开始,继续执行我们的应用程序
3、try…catch…finally 异常处理的组合方式
  • try catch finally组合: 检测异常,并传递给catch 处理,并在finally中进行资源释放;
  • try catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对异常进行捕获处理;
  • 多个try catch组合 当可能有多种类型的异常发生的时候,我把可能产生某异常类型的代码分开,分别放在不同的try-catch代码块中;
  • 一个try多个catch组合: 对代码进行异常检测,并对检测的异常传递给catch处理,对每种异常信息进行不同的捕获处理;
  • try finally组合: 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出,异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所以finally只为关闭资源
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、异常介绍
    • 1、异常继承体系
      • 2、运行时期异常&编译时异常
        • 3、发生异常到时候,程序的执行特征
          • 4、异常与错误的区别
            • 5、异常在方法重写中细节
            • 二、抛出异常、声明异常
              • 1、抛出异常 throw
                • 2、声明异常 throws
                  • 3、自定义异常
                    • 4、Throwable类中的常用方法
                    • 三、捕获异常
                      • 1、try…catch…finally
                        • 2、异常处理流程
                          • 3、try…catch…finally 异常处理的组合方式
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档