Java异常体系----深入讲解

2024-09-08 00:04
文章标签 java 讲解 异常 深入 体系

本文主要是介绍Java异常体系----深入讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JAVA异常体系

1.error 错误

程序无法处理的异常,

它是由JVM产生和抛出的,比如OutOfMemoryError.ThreadDeath等

示例:

public class Test {public static void main(String[] args) {run();}public static void run(){run();}
}

堆栈溢出,这是由于JVM或者是堆栈无法处理导致的异常

2.exception 异常

程序可以处理的异常,

这种异常分为两大类,运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。

运行时异常 (非受检异常):

程序运行期间报出的异常,在运行之前并没有被程序检验出来。

public class Test {public static void main(String[] args) {int[] arr = new int[5];int a = arr[10];//这样做一定会出错,程序在这里中断,不再向下执行}
}

当前异常为运行时异常 或非受检异常

数组越界,在程序运行时报错

非运行时异常(受检异常):

程序运行之前被检验出来的异常

在运行之前就产生的异常

package DaiLi;public class Test {public static void main(String[] args) throws ClassNotFoundException {//抛出异常解决Class.forName("DaiLi.ClothesFactory");}}

找类对象时,在写代码的过程中,程序运行之前就产生异常

JAVA是如何解决异常的

1.try-catch-finally 解决错误

package DaiLi;public class Test {public static void main(String[] args) throws ClassNotFoundException {int[] arr = new int[10];int a = arr[11];//这样做一定会出错,程序在这里中断,不再向下执行}}

 

数组越界,用try-catch解决

package DaiLi;public class Test {public static void main(String[] args) throws ClassNotFoundException {try{//这里被try-catch环绕,所以程序继续向下执行int[] arr = new int[10];int a = arr[11];////try尝试执行}catch(Exception e){e.printStackTrace();//输出错误//catch报错执行}System.out.println("执行到这里");}}

如果去掉e.printStackTrace();

则不会打印异常

catch的使用

可以有多个catch,进行多重拦截,进行异常匹配,执行对应的catch中的内容。

package DaiLi;import java.util.prefs.BackingStoreException;public class Test {public static void main(String[] args) throws ClassNotFoundException {try{//这里被try-catch环绕,所以程序继续向下执行int[] arr = new int[10];int a = arr[11];////try尝试执行}catch(NumberFormatException e){e.printStackTrace();//输出错误//catch报错执行}catch(ArrayIndexOutOfBoundsException e){e.printStackTrace();}System.out.println("执行到这里");}}

如果不知道写哪个异常,写Exception , 因为Exception 是所有异常的父类主要使用多态

2.throws抛出异常:在方法当中抛出异常,由方法的调用者解决

并没有解决异常,而是把异常交给别人解决。

package DaiLi;public class Test {public static void main(String[] args) throws ClassNotFoundException {run();}public static void run() throws ClassNotFoundException {Class.forName("DaiLi.ClothesFactory");}}

 

Finally:

无论try所指定的程序块中是否抛出异常,也无论catch语句的异常类型是否与所抛弃的异常的类型一致,finally中的代码一定会得到执行

finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理

通常在finally语句中可以进行资源的清除工作,如关闭打开的文件、副除临时文件等

有异常的情况

package DaiLi;import java.util.prefs.BackingStoreException;public class Test {public static void main(String[] args){try{int[] arr = new int[10];int a = arr[11];}catch(Exception e){e.printStackTrace();}finally {System.out.println("finally");}}}

 无异常的情况

package DaiLi;import java.util.prefs.BackingStoreException;public class Test {public static void main(String[] args) {try{int[] arr = new int[10];int a = arr[4];}catch(Exception e){e.printStackTrace();}finally {System.out.println("finally");}}}

这篇关于Java异常体系----深入讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146545

相关文章

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.