Java异常

本文详细介绍Java异常处理机制,包括异常层次结构、受检查异常与不受检查异常的区别、Throwable类的常用方法以及try-catch-finally语句的用法。此外还介绍了finally块在特定情况下的执行行为。

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

本文借鉴于JavaGuide,用于学习记录

Java异常层次结构图

在这里插入图片描述
在java中,所有的异常都有一个共同的祖先Java.long包中的Throwable类。Throwable类有两个重要的子类Exception(异常)和Error(错误)。Exception能被程序本身处理(try-catch),Error是无法处理的(只能尽量避免)。

ExceptionError二者都是Java异常处理的重要子类,各自都包含大量子类。

  • Exception:程序本身可以处理的异常,可以通过catch来进行捕获。Exception又可以分为受检查异常(必须处理)和不受检查异常(可以不处理)。
  • ErrorError属于程序无法处理的错误,我们没办法通过catch来进行捕获。例如,Java虚拟机运行错误(VirtualMachineError)、虚拟机内存不够错误(OutofMemoryError)、类定义错误(NoClassDefFoundError)等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

受检查异常

Java代码在编译过程中,如果受检查异常没有被catch/throw处理的话,就没办法通过编译。

除了RuntimeException及其子类以外,其它的Exception类以及其子类都属于受检查异常。常见 的受检查异常有:IO相关的异常、ClassNoFoundExceptionSQLException

不受检查异常

Java代码在编译过程中,我们即使不处理不受检查异常也可以正常通过编译
RuntimeException及其子类都统称为非受检查异常,例如:NullPointerExceptionNumberFormatException(字符串转换为数字)、ArrayIndexOutBoundsException(数组越界)、ClassCastException(类型转换错误)、ArithmeticException(算术错误)等

Throwable类常用方法

  • public String getMessage():返回异常发生时的简要描述
  • public String toString():返回异常发生时的详细信息
  • public String getLocalizedMessage():返回异常对象的本地化信息。使用Throwable的子类覆盖这个方法,可以生成化信息,如果子类没有覆盖该方法,则该方法返回的信息与getMessgae()返回的结果相同
  • public void printStackTrace() :在控制台上打印Throwable对象封装的异常信息

try-catch-finally

  • try块:用于捕获异常。其后可接零或多个catch块,如果没有catch块,则必须跟一个finally
  • catch块:用于处理 try 捕获到的异常
  • finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块在方法返回之前被执行

在以下3种特殊情况下,finally块不会被执行

  1. tryfinally块中用了System.exit(int)退出程序。但是,如果System.exit(int)在异常语句之后,finally还是会执行的
  2. 程序所在的线程死亡
  3. 关闭CPU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值