• JAVA异常分类


    简介

    指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
    在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。

    异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行。

    异常结构

    image

    异常分类

    Throwable

    Throwable分为Error和Exception两类。

    • Error

    是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java 虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。
    这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java 虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。

    • Exception

    是程序本身可以处理的异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。

    Exception

    Exception分为RuntimeException(运行时异常)和编译时异常(暂用CheckedException代表,本身不存在该CheckedException类)。

    • RuntimeException

    运行时期异常 在运行时期,检查异常.在编译时期,运行异常不会让编译器检测(不报错)(如空指针异常)。即代码可以不做任何处理。

    • CheckedException

    此类不存在,是Exception下除RuntimeException剩余的异常,如IOException,SQLException,在编译时期,就会检查,如果没有处理异常,则编译失败。即代码必须做处理,方可进行编译。

    异常处理机制

    在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

    • 抛出异常

    当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

    • 捕获异常

    在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。

    异常处理原则

    • 重新抛出的异常必须保留原来的异常,即throw new NewException("message", e), 而不能写成throw new NewException("message"),保证异常栈轨迹不被忽略;
    • 在所有异常被捕获且没有重新抛出的地方必须打印日志;
    • 如果属于异常的空异常处理块必须注释说明原因,否则不允许空的catch块;
    • 框架尽量捕获低级异常,并封装成高级异常重新抛出,隐藏低级异常的细节;
    • 不允许用e.printStackTrace()打印异常,因为这样会输出到控制台而且没有备份,没有类信息,没有基本难以使用,正确做法是统一交给日志框架处理;
    • 优先使用标准异常,使用标准异常能够一目了然知道什么错误,如Java提供的IllegalArgumentException,UnsupportedOperationException等;
    • 尽量捕获特定异常而不是捕获Exception,这样才能够针对特定异常做特定处理;
    • 尽量捕获特定异常代码而不是一个try-catch包含了所有代码。

    参考

    https://blog.csdn.net/qq_29229567/article/details/80773970;
    https://www.zhihu.com/question/352295705

    Gitee代码

    https://gitee.com/zhuayng/foundation-study/tree/develop/JavaBasis/Other/src/main/java/com/yxkj/other/modular/exception

    XFS
  • 相关阅读:
    python中的os模块
    python基础之正则表达式
    可以结合react的ui组件
    清除文件里的中文字
    阿里云docker
    Java开源BI系统介绍(转)
    miniui datepicker 二次加工
    笔试网站
    webpack ,gulp/grunt的介绍
    百度app测试服务
  • 原文地址:https://www.cnblogs.com/xiaofengshan/p/15492001.html
Copyright © 2020-2023  润新知