首页 > 编程语言 >Java中常见的异常分类,结合Spring的事务巩固复习

Java中常见的异常分类,结合Spring的事务巩固复习

时间:2024-10-10 14:21:46浏览次数:7  
标签:Exception Java 复习 错误 检查 Spring 捕获 抛出 异常

Java异常的继承关系是通过类继承的方式构建的一个层次结构。以下是对Java异常继承关系的详细图解说明:

异常类的顶层

  • Throwable:所有异常和错误的超类。

Throwable的子类

  • Error:通常是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。应用程序通常不应试图捕获Error对象。
  • Exception:表示程序本身可以处理的异常。

Exception的子类

  • 运行时异常(RuntimeException):编译器不要求强制处理的异常。常见的运行时异常包括NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)、ArithmeticException(算术异常)等。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
  • 非运行时异常(检查异常,Checked Exception):编译器要求必须处理的异常。常见的检查异常包括IOException(输入输出异常)、SQLException(SQL异常)、ClassNotFoundException(类找不到异常)等。这些异常在编译时就需要被捕获或声明抛出。

异常继承关系的图解

由于无法直接在这里绘制图形,以下是用文字描述的异常继承关系图

Throwable  
├── Error  
└── Exception  
    ├── RuntimeException(运行时异常)  
    │   ├── NullPointerException  
    │   ├── IndexOutOfBoundsException  
    │   ├── ArithmeticException  
    │   └── ...(其他运行时异常)  
    └── (检查异常,Checked Exception)  
        ├── IOException  
        │   └── FileNotFoundException  
        ├── SQLException  
        ├── ClassNotFoundException  
        └── ...(其他检查异常)

异常处理的原则

  • 对于运行时异常,开发者应该通过编写健壮的代码来尽量避免它们的出现,而不是依赖捕获异常来处理它们。
  • 对于检查异常,开发者必须在方法签名中通过throws子句声明可能会抛出的异常,或者在方法内部使用try-catch语句块来捕获并处理这些异常。

常见的运行时异常(Runtime Exception)

运行时异常是在程序运行时可能发生的异常,它们通常是由程序中的逻辑错误或不当操作引发的。Java编译器不会强制要求捕获或声明这些异常,但开发者应当通过编写健壮的代码来尽量避免它们的出现。常见的运行时异常包括:

  1. NullPointerException:当应用程序试图在需要对象的地方使用null时抛出。
  2. IndexOutOfBoundsException:当索引超出字符串或数组的有效范围时抛出。例如,ArrayIndexOutOfBoundsExceptionStringIndexOutOfBoundsException
  3. ArithmeticException:当发生数学错误时抛出,如除以零。
  4. ClassCastException:当试图将对象强制转换为不兼容的类时抛出。
  5. ArrayStoreException:当试图将错误类型的对象存储到数组中时抛出。
  6. BufferOverflowException:当向缓冲区写入的数据超出其容量时抛出。
  7. ConcurrentModificationException:当在不允许修改时(如在迭代过程中)修改集合时抛出。

常见的检查异常(Checked Exception)

检查异常是在编译时进行检查的异常。如果方法可能抛出检查异常,但调用者没有捕获或声明该异常,则编译器会报错。常见的检查异常包括:

  1. IOException:当发生输入输出错误时抛出,如读写文件失败。
  2. FileNotFoundException:当试图打开的文件不存在时抛出,是IOException的子类。
  3. SQLException:当访问数据库时发生SQL错误或数据访问错误时抛出。
  4. ClassNotFoundException:当应用程序试图动态加载类(如在运行时使用Class.forName()方法)但找不到指定的类时抛出。
  5. InterruptedException:当线程在等待、睡眠或尝试加入另一个线程时被中断时抛出。
  6. ParseException:当尝试将字符串解析为日期或数字时格式不正确时抛出,如SimpleDateFormatparse()方法可能抛出此异常。

需要注意:当程序抛出检查异常时,Spring的事务管理 @Transactional 默认是不会生效的,需要着重注意,默认情况下只会捕获:RuntimeException 和 Error 类型的异常,检查异常需要捕获处理时,就需要设置 rollbackFor 参数为:Exception 或者 Throwable 扩大事务的捕获范围!

标签:Exception,Java,复习,错误,检查,Spring,捕获,抛出,异常
From: https://www.cnblogs.com/blogtech/p/18456283

相关文章

  • java+vue计算机毕设高校教师教学科研绩效考核系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的快速发展,高校教师作为教学与科研的主力军,其工作绩效的评估与管理成为高校管理中的关键环节。传统的人工绩效考核方式不仅耗时费力,还容......
  • java+vue计算机毕设高校教学设备管理系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育事业的蓬勃发展,高校教学设备作为支撑教学与科研活动的重要物质基础,其管理效率与水平直接影响到教育质量与科研成果。近年来,高校教学设备......
  • java+vue计算机毕设房产置购门户网站【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和居民生活水平的提高,房地产市场日益繁荣,房产置购成为众多家庭的重要决策之一。然而,传统的房产交易方式存在信息不对称、流程繁......
  • Hello-Java-Sec 项目 (代码审计)
    一、项目背景:Hello-Java-Sec项目为Github中一个面向安全开发的Java漏洞代码审计靶场。靶场地址:https://github.com/j3ers3/Hello-Java-Sec本地使用idea部署即可二、代码审计:通过阅读代码可知,代码采用@RequestMapping注解的方式来处理HTTP不同方法的请求,故采用全局搜......
  • 【Ubuntu】在Ubuntu上配置Java环境
    【Ubuntu】在Ubuntu上配置Java环境壹、前言Java是运用得非常广泛的编程语言,在使用Linux时难免会碰到需要用到JDK的情况,故本文介绍如何在Ubuntu上配置Java21环境。贰、下载Java的下载渠道很多,有甲骨文公司的“官方”JDK,也有各大厂商基于OpenJDK开发的版本,但是各个版本间的差异......
  • Java 函数式编程(1 万字)
    此笔记来自于B站黑马程序员goodJava历史版本及其优势函数式编程,StreamAPI一.函数伊始函数、函数对象函数对象行为参数法延迟执行a-lambdab-方法引用复习小测Math::random()->Math.random()Math::sqrt(doublenumber)->Math.sqrt(number)Stude......
  • Java设计方式(3 万字)
    Java设计模式来源于尚硅谷韩顺平这个课非常不错,还有配套的资料!!!Java设计模式的七大原则单一职责原则基本介绍对类来说的,即一个类应该只负责一项职责如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度......
  • Spring Security(常见过滤器介绍)
    SpringSecurity是一个基于Spring框架的安全性解决方案,为Java应用程序提供了一套全面的安全解决方案。一、概述SpringSecurity是Spring采用AOP(面向切面编程)思想,基于servlet过滤器实现的安全框架。它致力于保护基于Spring的应用程序,并成为了这类应用的事实上的安全标准。S......
  • JAVA基础之九-泛型(通用类型)
    总体而言,泛型(通用类型)是一个好东西,它是一个工程上起到好处的东西,对于性能、安全等并没有什么帮助。在java工程上,泛型属于必须掌握的,理由如下:1.各种源码中基本上都有泛型,无论是java基础源码还是Spring或者阿帕奇的。不掌握这个,你读不懂。你没有方法饶过它2.有了泛型,某种程度上......
  • Spring事务的1道面试题
    每次聊起Spring事务,好像很熟悉,又好像很陌生。本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点。原理Spring事务的原理是:通过AOP切面的方式实现的,也就是通过代理模式去实现事务增强。具体过程是:对包含@Transactional注解的方法进行拦截,然后重写,重新在方法里加入异......