• Java:Exceptions相关学习



    前言

    一、Exceptions简介

    异常(Exceptions)按照笔者的理解就是,程序在运行期间未按照程序员设计程序的意愿进行而发生的非正常情况,针对这种情况,程序应有相应的处理来进行应对,衡量语言是否具备处理异常的条件,也是衡量语言是否成熟的标准之一

    Java中的异常又称为例外,是一个在程序执行期间发生的事件,它中断正在执行程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类,这可以让程序具有极好的容错性且更加健壮。

    二、Exceptions分类

    1.异常源

    在Java中一个异常的产生,无外乎源头是以下三种情况

    • Java 内部错误发生异常,Java 虚拟机产生的异常。
    • 编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。
    • 通过 throw 语句手动生成的异常,一般用来告知该方法的调用者一些必要信息。

    Java 通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法会产生代表该异常的一个对象,并把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。

    throw 和 catch

    我们把生成异常对象,并把它提交给运行时系统的过程称为拋出(throw)异常。运行时系统在方法的调用栈中查找,直到找到能够处理该类型异常的对象,这一个过程称为捕获(catch)异常

    2.异常类

    在异常源中,我们得到,Java基于面向对象的方法来处理异常,那么针对异常,为了能够及时有效地处理程序中的运行错误,Java 专门引入了异常类。在 Java 中所有异常类型都是内置类 java.lang.Throwable 类的子类,即 Throwable 位于异常类层次结构的顶层。Throwable 类下有两个异常分支 ExceptionError

    在这里插入图片描述
    Throwable 类是所有异常和错误的超类,下面有 ErrorException 两个子类分别表示错误和异常。其中异常类 Exception 又分为运行时异常非运行时异常,这两种异常有很大的区别,也称为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。

    Exception 和 Error的区别
    • Exception 类用于用户程序可能出现的异常情况,它也是用来创建自定义异常类型类的类。同样的,可以理解为,Exception 是应用程序中可能的可预测、可恢复问题。

    • Error 定义了在通常环境下不希望被程序捕获的异常。一般指的是 JVM 错误,如堆栈溢出。换句话说,Error 是 java 虚拟机抛出的错误,程序运行中出现的较严重的问题。

    Error通过对于程序是毁灭性的,是灾难性的致命错误,不是程序可以控制的

    3.异常处理

    Exception
    • 运行时异常都是 RuntimeException 类及其子类异常,如 NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。

    • 非运行时异常是指 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如 IOException、ClassNotFoundException 等以及用户自定义的 Exception 异常(一般情况下不自定义检查异常)。

    Error
    • Error的错误更多出于虚拟机内部,如堆栈溢出,内存溢出,线程死锁,面对这种情况只能对源程序进行针对性地改写,从而避免出现Error错误
    throws 和 catch的区别
    • throws是将当前程序可能出现的异常扔给调用方,一般为checkedException,这种是调用方可以修正的异常,在throw中,程序要将可能出现的所有checkedException进行抛出
    • catch是捕获程序出现的异常类进行处理
  • 相关阅读:
    文本生成客观评价指标总结(附Pytorch代码实现)
    Spark 8:Spark SQL 执行流程、执行引擎
    odoo 编码规范(编程规范、编码指南)
    代码随想录 Day37 完全背包理论基础 卡码网T52 LeetCode T518 零钱兑换II T377 组合总和IV
    2022/08/25 day10:Redis 事务
    LeetCode 232.用栈实现队列
    【C++】异常处理之throw、catch、try、局部资源管理、标准异常库
    SpringSecurity6从入门到上天系列第六篇:解决这个问题为什么在引入SpringSecurity之后所有的请求都需要先做登录认证才可以进行访问呢
    经典双指针算法试题(二)
    Bean 的作用域和生命周期
  • 原文地址:https://blog.csdn.net/qjyws/article/details/126801605