java Exception

本文深入探讨Java中的异常处理机制,包括Exception与Error的区别、常见异常类型、如何处理异常及自定义异常,帮助开发者理解并有效应对程序运行时可能出现的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是Exception

Exception是在程序运行时发生的意外情况,如果不能正确处理可能导致程序终止或直接崩溃
比如试图打开一个根本不存在的文件。

二、Exception的分类

在这里插入图片描述

Throwable是所有异常的共同祖先,异常都是从Throwable继承而来的。Throwable有两个子类,ErrorException

  1. Error是错误,表示运行应用程序中出现了严重的问题,都是通过Error抛出的,一般是程序不能处理的系统错误。错误是没法处理的。

    • 一般标识代码运行时JVM出现的问题,如内存溢出、栈溢出等这类错误与硬件有关,通常由系统进行处理,程序本身无法捕获和处理。
    • 常见的Error有OutOfMemoryErrorNoClassDefFoundErrorStackOverflowError
  2. Exception是异常,表示程序运行时,程序本身可以捕获并且可以处理的问题。异常是可以被处理的。可分为两类 Unchecked ExceptionsChecked Exceptions

    • Unchecked Exceptions 在编译时不进行检查。继承自RuntimeException的类,便是unchecked exceptions
    • Checked Exceptions 在编译时进行检查的异常。继承Exception的类 ,除了UncheckedException以外都是checked exceptions。 如果程序中存在这类异常 则编译器强制开发者在编译时编写异常处理程序 可以通过 try catch捕获 也可以通过throws抛出

思考ClassNotFoundException与NoClassDefFoundError的区别

ClassNotFoundExceptionNoClassDefFoundError
继承java.lang.Exception继承java.lang.Error
当动态加载Class的时候找不到类会抛出该异常当编译成功以后执行过程中Class找不到导致抛出该错误
一般在执行Class.forName()、ClassLoader.loadClass()或ClassLoader.findSystemClass()的时候抛出由JVM的运行时系统抛出
三、常见的Exception
Exception描述类型
IOException输入输出异常checked
NullPointerException空指针异常类unchecked
ClassCastException类型强制转换异常unchecked
SQLException操作数据库异常checked
FileNotFoundException文件未找到异常checked
ArrayIndexOutOfBoundsException数组下标越界异常unchecked
NumberFormatException字符串转换为数字异常unchecked
NoSuchMethodException方法未找到异常checked
ArithmeticException算术异常类unchecked
四、如何处理Exception

在这里插入图片描述

在这里插入图片描述

找到异常出现的逻辑、使用完整的数据测试、形成有针对性的异常处理

五、自定义Exception

在复杂业务环境下,java自带的异常可能满足不了我们业务的需求, 这个时候我们可以自定义异常来进行对业务异常的处理;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qQEy8t2q-1595489463706)(en-resource://database/2237:0)]

可以在上层针对自己定义的异常做catch以及特殊的业务处理

六、注意

有异常但是没有堆栈信息
出于性能优化考虑 ,从JDK5之后对于频繁抛出的异常 在JIT重新编译后会抛出没有堆栈的异常 只打印摘要信息。在使用server模式下 这个优化是开启的
解决方法:重启服务 或者查看之前的老日志

现象:程序执行异常 但是使用try catch(Exception e)没有抓到异常
实际抛出的是Error 类型的错误 使用Exception抓不到对应的异常 改成 try catch(Throwable e)
抓到的报错:java.lang.NoSuchMethodError: io.netty.util.concurrent.SingleThreadEventExecutor 错误原因是netty包冲突 实际使用时用了版本低的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值