Java异常详解

Java 异常处理 -- Java 语言的异常、异常链与断言 世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确处理好意外情况,才能保证程序的可靠性。 阅读详情

1、首先来看一张图:

              

2、概念

  1. Throwable:是所有异常的祖先,有两个重要的子类,Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
  2. Error :  是程序无法处理的错误,例如程序运行时JVM出现的问题,像 OutOfMemoryError(内存溢出),出现这种状况时,与程序无关,我们也无需试图去处理这些问题。
  3. Exception :  指程序可以处理的异常,分为下面两种类型:   

1、运行时异常(RuntimeExceptio):如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)、ArithmeticException(除数为零)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。

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

这种情况大家使用mybatis框架肯定有所体会,有时sql写错了,程序运行就报错,必需是正确的SQL语句。

3、Java异常的处理机制

1、使用try-catch语句进行捕获

         1.1、 当没有对异常进行捕获时,程序会中断执行,代码如下:

         程序直接抛出异常,当然这个异常是JVM抛的,并且没有输出"程序继续执行!",证明程序并没有运行到这一步,也就是说产生异常之后,后面的语句都不会执行,效果如下:

         1.2、使用try-catch对异常进行捕获,程序不会因为异常的产生而中断执行,代码如下:

         程序输出结果中有"程序继续执行!"这段话,证明程序有执行到这一步,运行效果如下:

2、使用try-catch-finally,finally语句块中的代码无论try中是否有异常产生,都必须要执行,如下图:

        程序运行结果如下:

                由上图可知,产生异常之后的语句就不会被执行到,程序执行到catch语句,然后执行finally语句,如果我们有                     必须要执行的代码,那就可以放到finally中,比如使用分页插件时,关闭分页插件的语句,以及在使用JDBC对数据                     库进行操作时,关闭数据库连接的代码都可以放到finally中,避免出现异常导致资源浪费。

3、throws和throw关键字

      出现异常处了使用try-catch捕获处理外,也可以选择抛出异常,让调用的方法去处理。 

      throws:  用来声明方法,表示此方法不处理异常,而是交给方法调用处进行处理。下图所示的异常是由test1函数产生的,但是由main函数进行处理

      throw:使用throw关键字则可以人为的抛出一个异常,如下图:

4、自定义异常类

            首先我们来看看JDK异常类的源码,以算术异常类ArithmeticException为例,可以看到就两个构造方法,一个有参,一个无参

            

           接下来自定义一个异常类MyException,如下图示:

           

           

           结果如下:

           

5、建议

1、 由于运行时异常(RuntimeException)的不可查性,为了更合理、更容易地实现应用程序,Java规定,运行时异常将由Java运行时系统自动抛出,允许应用程序忽略运行时异常,也就是说可以不使用try-catch处理,如果出现异常,则由JVM处理,但是开发时为了程序可控最好使用try-catch处理。

2 、对于所有的可查异常,即非RuntimeException异常,Java规定:一个方法必须捕捉,或者声明抛出方法之外。也就是说,当一个方法选择不捕捉可查异常时,它必须声明将抛出异常

3、对于方法运行中可能出现的Error,当运行方法不欲捕捉时,Java允许该方法不做任何抛出声明。因为,大多数Error异常属于永远不能被允许发生的状况,也属于合理的应用程序不该捕捉的异常,简而言之,就是你不需要管!

4、从方法中抛出的任何异常都必须使用throws声明; 任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的throw语句抛出异常

5、总体来说,Java规定:对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。

 

6、列举一些常见的异常类

RuntimeException子类:

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

其他的异常类

字符串转换为数字异常:NumberFormatException

操作数据库异常:SQLException

输入输出异常:IOException

方法未找到异常:NoSuchMethodException

字段未找到异常:NoSuchFieldException

类型转换异常类:ClassCastException    

字符串索引超出范围抛出的异常:StringIndexOutOfBoundsException

不允许访问某类异常:IllegalAccessException  

​​​​​​​找不到类异常:java.lang.ClassNotFoundException

InstantiationException  当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常

 

 

                          

SAP ABAP Cloud 发展简史 其中用于云开发的 ABAP,官方术语是 「ABAP in the Cloud」,本文后续叙述方便起见,简称为 「ABAP Cloud」. 它涵盖了标准 ABAP 语言范围的一个子集,只能访问受限的 API,用于构建 SAP BTP ABAP 环境以及 SAP S/4HANA Cloud ABAP 环境上的云解决方案。SAP ABAP 平台是用于 SAP ECC、SAP S/4HANA 和 SAP BTP 等产品的技术平台,也是 ABAP 应用程序的开发和运行环境。 阅读详情

相关推荐

保姆级!n8n 公众号自动化:从 0 搭 “写文案 + 生图 + 发草稿” 全流程

【摘要】本文介绍如何利用n8n搭建全自动公众号内容发布流程,涵盖AI文案生成、封面图制作到自动发布的全链路解决方案。通过对接OpenRouter大模型、阿里云百炼生图API及微信官方接口,实现从内容创作到发布的自动化。重点包括:1)n8n微信节点安装配置;2)大模型API授权与提示词优化技巧;3)图片生成与格式转换处理;4)公众号接口授权注意事项;5)草稿自动生成参数设置要点。特别提醒首次配置时需关闭自动发布功能以检查效果,避免格式错误导致发布失败。该方案无需复杂编程,适合运营人员快速搭建自动化内容生产流程

Jacket0603的博客 1595

JAVA基础——异常详解

什么是异常?异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域的情况,称之为异常。java中异常的体系是怎么样的呢?1.Java中的所有不正常类都继承于Throwable类。Throwable主要包括两个大类,一个是Error类,另一个是Exception类;2.其中Error类中包括虚拟机错误和线程死锁,一旦Error出现了,程序就彻底的挂了,被称为程序终结者;3.Exception类,也就是通常所说的“异常”。

woaimx_1314的博客 1万+

别只当玩具!聊聊这个555金属探测器电路背后的电磁感应与RLC调谐原理

本文深入解析了555金属探测器电路的工作原理,重点探讨了电磁感应与RLC调谐原理。通过分析电感线圈的电磁特性、RLC谐振电路的行为以及555定时器的多重功能,揭示了这一看似简单的装置如何实现金属检测。文章还提供了灵敏度优化方案和常见问题解决方法,帮助读者从科学角度理解这一实用技术。

weixin_29204205的博客 478

(java)异常 (详解)

Exception:异常产生后程序员可以通过代码进行处理,使程序继续执行。我们平时所说的异常就是Exception(具体类型参考异常的体系结构图下面那一堆)Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError(栈溢出)和OutOfMemoryError(堆溢出)ps:CloneNotSupported处理过程。

iiiiiihuang的博客 6241

用Matlab搞定Delta并联机器人运动学:从建模到正逆解完整流程(附代码)

本文详细介绍了如何使用Matlab实现Delta并联机器人的运动学分析,包括几何建模、正逆解求解及可视化验证。通过符号计算和数值迭代法,解决非线性方程组问题,并提供完整代码示例,帮助读者快速掌握Delta机器人的运动学计算与应用。

weixin_30955617的博客 177

光线追踪渲染实战:蒙特卡洛路径追踪及其c++实现

光线追踪超越了传统的图形流水线,是一种现代的渲染。光线追踪是一种基于物理的渲染方法,通过模拟光在介质中的真实表现来输出足以逼近现实的图像。光线从光源出发,经过各种反射折射,进入摄像机。通过渲染方程描述一点的颜色,并且通过蒙特卡洛方法求解渲染方程来获取最终的像素颜色。

AKGWSB 's blog 1万+

Java异常 (很详细)

在 Java 中,异常是在程序运行期间发生的不正常情况或错误。就是自己定义的异常。第二张图片就是我自己写的一个自定义异常,里面的方法,你可以直接使用父类的,按着Ctrl点击那个RuntimeException出现了这个,根据需求选择可以直接使用的。我使用的是上面这两个,改一下名字就可以直接使用。Exception是RuntimeException的父类,为什么会报错呢?因为根据体系图我们可以知道,Exception包括运行时异常和非运行时的异常,非运行时的异常必须在运行之前就声明异常。

shajjs的博客 7134

一文读懂 SAP BTP Application Router 的 Resource Files:从 xs-app.json 到本地开发的默认设置

本文详解SAP BTP中Application Router的资源文件配置与本地开发实践。核心包括:xs-app.json定义路由规则与安全策略,package.json声明依赖与启动脚本,resources/存放静态资源,default-services.json和local-destinations.json用于本地模拟云服务。文章通过真实案例展示如何配置静态资源直出、反向代理后端服务,并强调本地开发时的注意事项与常见问题解决路径。关键配置均提供示例代码,帮助开发者快速实现业务应用的部署与联调。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 180

Java中的异常

java中的异常 1. 异常产生的原因和分类 1.1 异常产生的原因 1.2 异常分类 2. 异常的处理 2.1 防御式编程 2.2 异常的抛出(throw) 2.3 异常的捕获 2.3.1 throws异常声明 2.3.2 try-catch捕获异常并处理 2.3.3 finally 3.自定义异常类

m0_58761900的博客 2万+

第一章 电力电子仿真软件 PLECS简介

PLECS是瑞士Plexim公司开发的电力电子仿真软件,具有快速仿真、丰富元件库和热分析功能。软件提供单机版和嵌入MATLAB的版本,支持多平台安装且流程简单。首次运行需获取授权文件,提供60分钟演示模式。界面包含模型创建、帮助文档和元件库浏览器等功能区域,操作便捷。该软件是专业高效的电力电子系统仿真工具。

502

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 475

Java常见异常及处理办法(持续更新)

空指针异常,操作一个 null 对象的方法或属性时会抛出这个异常。这个异常的常见原因是程序中存在空指针,即调用了未经初始化或不存在的对象。这些代码经常出现在对象创建和数组调用中,例如对象未初始化或图片路径错误时。对数组代码中出现空指针,是把数组的初始化和数组元素的初始化搞混淆了。数组的初始化是对数组分配空间,而数组元素的初始化,是给数组中的元素赋初始值。内存出现异常的一种异常,这不是程序能控制的,是指要分配的对象的内存超出了当前最大的堆内存,需要调整堆内存大小(-Xmx)以及优化程序。

m0_69765493的博客 5973

ADS基础教程20 - 电磁仿真(EM)参数化仿真

一、引言二、参数化设置1.参数定义2.参数赋值3.创建EM模型和符号四、总结1)在Layout视图,菜单栏中选中EMComponent2)在弹出的参数编辑框中,采用标称/扰动()设计。使用子网(Subnetwork)参数。这些方法是互斥的,在为单个组件定义参数时不能将它们组合起来。标称/扰动(Nominal/Perturbed)参数使用平面化布局场景,并且只包含端口和原始图形形状(如多边形、矩形和圆形)时定义。

XZ_ZC的博客 4031

详解Java之异常

捕获异常,抛出异常,关于finally的注意事项,自定义异常。

. 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JAVA异常详解

异常的定义 异常就是有异于常态,和正常情况不一样,有错误出现。在java中,阻止当前方法或作用域的情况,称之为异常。 异常的分类 Error:是程序中无法处理的错误,表示运行应用程序中出现了严重的错误。此类错误一般表示代码运行时JVM出现问题。通常有Virtual MachineError(虚拟机运行错误)、NoClassDefFoundError(类定义错误)等。比如说当j...

路人甲的专栏 5万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java异常类详解

Java

qq_50692350的博客 7909

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java异常详解及自定义异常

认识异常,掌握异常处理主要的5个关键字:throw、try、catch、final、throws并掌握自定义异常

m0_73107796的博客 3286

Java 异常详解

Java 内置的异常类覆盖了大部分常见错误,但在实际开发中,我们可能需要业务相关的异常(如“用户不存在”“余额不足”),这时可以通过自定义异常类实现。继承Exception(自定义受检异常)或(自定义非受检异常)。提供构造方法(通常至少实现无参构造和带消息的构造)。// 自定义受检异常(继承 Exception)// 无参构造super();// 带消息的构造// 调用父类构造,传递异常信息// 自定义非受检异常(继承 RuntimeException)

2501_91241024的博客 2066

Java——异常详解

本章需掌握:throw、try、catch、finally、throws、Exception、RuntimeException 异常处理核心:EAFP

Yuan_o_的博客 1035

Java中常见的RunTime异常及异常详解

常见的RunTime异常几种如下: NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常。 IllegalArgumentException - 传递非法参数异常。 ArithmeticException - 算术运算异常 ArrayStoreException - 向数组中存放与声明类型不兼容对象异常 IndexOutOfBoundsException - 下标越界异常 NegativeArraySizeException - 创建一

MyBlog 3万+

java 异常详解

1、 java异常的主要回答了三个问题: what:异常类型回答了什么被抛出; where:异常堆栈跟踪回答了在哪被抛出; why:异常信息回答了为什么被抛出; 2、 java 异常分类   Error:程序无法处理的异常,编译器不做检查。一般指和jvm相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法栈溢出等; Exception:程序可以处理的异常,捕获后可能恢复。 总结...

hj12312的博客 1万+

Java异常之抛出异常详解和代码举例

Java语言的异常 异常处理机制 异常处理类 异常的处理 抛出异常 自定义异常类 抛出异常 1.在捕获异常之前,必须有一段代码生成并抛出一个异常对象。 2.异常类型不同,抛出异常的方法也不同,分为:系统自动抛出的异常、指定方法抛 出的异常。 3.系统定义的异常由系统抛出;指定方法抛出的异常需使用关键字throw或throws; 我们主要讨论由方法抛出的异常用法。 1.抛出异常的方法与调用方法处理异常 1.异常的产生和处理可以在一个方法内进行; 2.异常的产生和处理也可以不在

kaszxc的博客 1万+

Java中异常详解

Java中异常详解 异常体系: 异常的分类 : Java 默认处理异常的方式(报错) : 异常处理方法: 异常对象的常见方法: 抛出异常Thorw 重点理解 : throw 和 throws 的区别 : 自定义异常 :

Eternity的博客 2156

Java异常详解——一篇文章搞定Java异常

文章目录1. 异常的体系结构2. 常见的异常2.1 运行时异常2.2 编译时异常 (编译时异常必须进行处理否则无法运行)3. 异常的抓抛模型原理4. 异常的处理4.1 try - catch - finally4.2 throws + 异常类型5. 重写方法异常抛出的规则6. 开发中如何选择使用try-catch-finally 还是throws?7. 手动抛出异常 throw8. 自定义异常类 1. 异常的体系结构 定义:异常就是有异于常态,和正常情况不一样,有错误出现。在java中,将程序执行过程中的不

brokyz 755
上一篇: IDEA中通过Ctrl+O查看类中所有方法
下一篇: Java基础之——反射
GL60708
博客等级 码龄10年 5粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值