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

相关文章

JDK8(Java Development kit)的安装与配置全过程

《JDK8(JavaDevelopmentkit)的安装与配置全过程》文章简要介绍了Java的核心特点(如跨平台、JVM机制)及JDK/JRE的区别,重点讲解了如何通过配置环境变量(PATH和JA... 目录Java特点JDKJREJDK的下载,安装配置环境变量总结Java特点说起 Java,大家肯定都

Spring定时任务之fixedRateString的实现示例

《Spring定时任务之fixedRateString的实现示例》本文主要介绍了Spring定时任务之fixedRateString的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录从毫秒到 Duration:为何要改变?核心:Java.time.Duration.parse

Java 中 Optional 的用法及最佳实践

《Java中Optional的用法及最佳实践》在Java开发中,空指针异常(NullPointerException)是开发者最常遇到的问题之一,本篇文章将详细讲解Optional的用法、常用方... 目录前言1. 什么是 Optional?主要特性:2. Optional 的基本用法2.1 创建 Opti

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Spring Boot中获取IOC容器的多种方式

《SpringBoot中获取IOC容器的多种方式》本文主要介绍了SpringBoot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过Spring... 目录1. 直接注入ApplicationContext2. 实现ApplicationContextA

详解Spring中REQUIRED事务的回滚机制详解

《详解Spring中REQUIRED事务的回滚机制详解》在Spring的事务管理中,REQUIRED是最常用也是默认的事务传播属性,本文就来详细的介绍一下Spring中REQUIRED事务的回滚机制,... 目录1. REQUIRED 的定义2. REQUIRED 下的回滚机制2.1 异常触发回滚2.2 回

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日