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

Java基础专项复习5——异常

 Java基础专项复习系列目录

1、Java基础专项复习1——函数关键字static-CSDN博客

2、Java基础专项复习2——集合-CSDN博客

3、Java基础专项复习3——Map集合-CSDN博客

4、Java基础专项复习4——IO流-CSDN博客


文章目录

    目录

     Java基础专项复习系列目录

    文章目录

     一、异常概述

    异常的体系

    错误—Error

    异常—Exception

    1.1运行时异常

    异常的处理

    1.1.1 在被调用端来处理运行时异常                                             

    1.1.2在调用端来处理运行时异常

    1.2编译期的异常

    1.3自定义的异常

    1.3.1自定义规则

    1.3.2自定义的异常使用


     一、异常概述

    在我们写程序的时候难免会出现错误,java中的异常机制为了提高我们程序的健壮性容错性而存在。

    异常的体系

    Throwable是 Java 中所有错误(Error)和异常(Exception)的超类,位于java.lang包下。它继承自java.lang.Object类,并且实现了Serializable接口。

    Throwable类有两个直接已知子类:

    Error:用于表示严重的系统错误,这类错误通常是 Java 虚拟机内部的错误,应用程序不应该尝试捕获和处理,比如OutOfMemoryError(内存溢出错误)等。

    Exception:用于表示程序运行时可能出现的异常情况,又可以分为受检异常(Checked Exception)和非受检异常(Unchecked Exception)。受检异常要求在方法中使用throws声明或者使用try - catch块进行处理,比如IOException;非受检异常通常是由于编程错误导致的,比如NullPointerException,不需要在方法中显式声明处理。

    错误—Error

      

    Error是throwable的子类,他是程序出现了严重的问题,这种问题程序解决不了。

    • AnnotationFormatError:当注解的格式不正确时抛出,比如注解的结构不符合 Java 语法规范等情况。
    • AssertionError:用于断言失败的情况。在 Java 中,断言是一种调试机制,当使用assert关键字的条件为false时,就会抛出此错误。
    • AWTError:与抽象窗口工具包(AWT)相关的严重错误。比如在 AWT 组件初始化或操作过程中遇到系统层面的严重问题时可能会抛出。
    • CoderMalfunctionError:涉及编码解码器出现故障时的错误。
    • FactoryConfigurationError:与工厂配置相关的错误,例如在创建对象的工厂配置过程中发生严重问题。
    • IOError:输入输出操作相关的严重错误,如磁盘故障等导致无法正常进行文件读写等 I/O 操作时可能抛出。
    • LinkageError:类加载和链接过程中出现的错误。例如运行时找不到类(NoClassDefFoundError)、链接时出现问题等情况。
    • ServiceConfigurationError:服务配置相关的严重错误,比如在配置服务相关参数、加载服务时出现问题。
    • ThreadDeath:一个特殊的错误,用于指示线程死亡。通常在线程调用stop方法(已过时,不建议使用)等导致线程终止的情况下相关。
    • TransformerFactoryConfigurationError:转换工厂配置错误,比如在配置用于 XML 转换等的工厂类时出现问题。
    • VirtualMachineError:Java 虚拟机内部错误。像OutOfMemoryError(内存溢出,虚拟机无法为对象分配足够内存时)、StackOverflowError(栈溢出,方法调用层级过深导致栈空间耗尽时)等都属于此类。

    异常—Exception

      

    异常分为两类:

     运行时候的异常:可以编译通过,程序在运行期间报出来的异常。

     编译期异常:这个异常必须要处理,否则没法编译通过       

    Exception下面的子类除了RuntimeException以外都是编译期的异常。

    RuntimeException下面的所有的子类都是运行时的异常。

    1.1运行时异常

    异常的自动抛出

    抛出运行时异常时候,后面的代码不能正常运行,直接被截断

    异常的处理

    try......catch

    try里面的代码就是有可能产生异常对象的代码

    catch(Exception e)用来捕捉到产生的异常对象,catch块就是来处理异常的代码块。e.printStackTrace();打印异常的信息

    1.1.1 在被调用端来处理运行时异常                                             

    try…catch处理异常的特点

    1. try内部发生异常下面的代码不会执行
    2. 产生的异常对象被catch块里面的参数接收
    3. catch块来处理异常(如何处理要根据具体的业务要求)
    4. 如果异常对象被catch来处理就不会向上抛出
    5. 由于异常对象被处理了,异常后面的代码就会正常的执行
    6. 调用端不会感知到异常的产生(因为没有向上抛出异常对象),后面的代码正常执行。
    1.1.2在调用端来处理运行时异常

    try…..finally

    1.发生了异常会向上的抛出,但是finally里面的代码永远会得到执行

    2.return后面可以通过finally来执行代码

    try …..catch …..finally

    finally里面适合做方法的资源关闭和收尾的工作

    1.2编译期的异常

    编译期异常:这个异常必须要处理,否则没法编译通过。

    jdk可以准确的预测到这个代码可能发生异常,所以给开发者一个错的警示,让我来处理这种可能发生的异常。

    运行时异常向上抛出不需要来声明的编译期的异常如果想要向上抛出就必须要来声明。

    编译期的异常建议大家通过try…catch来处理(被调用端处理)

    运行时的异常建议向上抛,最顶层来处理。(调用端处理)

    1.3自定义的异常

    以后项目中会有一些跟业务相关的异常,这种异常我们必须要自定义

    1.3.1自定义规则

    我们以后的项目中自定义的异常99%都是运行时的异常。我们定义的异常要继承RuntimeException

    在类中继承RuntimeException的构造器即可

    public class StockException extends RuntimeException {
        public StockException() {
            super();
        }
    
        public StockException(String message) {
            super(message);
        }
    
        public StockException(String message, Throwable cause) {
            super(message, cause);
        }
    
        public StockException(Throwable cause) {
            super(cause);
        }
    
        protected StockException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
            super(message, cause, enableSuppression, writableStackTrace);
        }
    }
    
    1.3.2自定义的异常使用

    我们需要设定主动的抛出异常对象的语法

    相关文章:

  • 全局动态组件uniapp(vue)
  • ubuntu22.04离线安装nginx
  • 用promptfoo做大模型安全性测评
  • P8598 [蓝桥杯 2013 省 AB] 错误票据
  • 深入理解ES6核心特性:现代JavaScript开发的基石
  • 用WebSocket改造优化若依在线用户实时监控
  • WLAN无线2.4G/5G频段划分和可用信道
  • 基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频
  • 使用useVModel简化 Vue 组件中 v-model 的实现
  • 如何创建自定义权限的kubeconfig
  • springboot399-中文社区交流平台(源码+数据库+纯前后端分离+部署讲解等)
  • http状态码503之解决方法(Solution to HTTP Status Code 503)
  • 微信小程序通过http通信控制庐山派
  • [RabbitMQ] 常见面试题汇总 | 工作流程 | 消息可靠性 | 消息顺序性 | 幂等性 | 高级特性 | 延迟队列 | 仲裁队列 | 工作模式 | 消息积压 | 推拉模式
  • 实时图像与视频超分辨率:高效子像素卷积网络(ESPCN)解析
  • CLIP论文学习
  • 985本硕,网络安全方向,走算法还是走开发?
  • 【会议预告】人工智能与材料国际学术会议
  • 沃丰科技大模型标杆案例 | 索尼大模型智能营销机器人建设实践
  • 短视频矩阵碰一碰发视频源码技术开发,支持OEM
  • 西安市未央区委书记刘国荣已任西咸新区党工委书记
  • 广东省中医院脾胃病科大科主任张北平病逝,年仅52岁
  • 秦洪看盘|交易新逻辑,银行股成A股稳定器
  • A股三大股指涨跌互现:银行股领涨,两市成交12915亿元
  • 印称印巴军事行动总指挥同意将局势降级
  • 从“求生”到“生活”:医保纳入创新药让梗阻性肥厚型心肌病患者重拾生活掌控权