运行时异常和普通异常的区别

本文详细介绍了Java中的异常处理机制,包括Error与Exception的区别,检查异常与运行时异常的特点及应用场景,以及如何正确地进行异常捕获与处理。

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

运行时异常和普通异常的区别:

Java中提供了两种错误的异常类,分别为ErrorException,且它们拥有共同的父类—Throwable

Error表示程序运行期间出现了非常严重的错误,并且该错误不可恢复,由于这属于JVN层次的严重错误,因此这种错误是会导致程序终止执行的。此外,编译器不会检查Error是否被处理,因此在程序中不推荐去捕获Error类型的异常,主要的原因是运行时异常多是由逻辑错误导致的,属于应该解决的错误,也就是说一个正确的程序的程序是不应该存在Error的。当这些异常发生时,JVM一般会选择将线程终止。

Exception表示可恢复异常,是编译器可以捕获到的。它包含两种类型,检查异常和运行时异常;

检查异常

检查异常是程序中最经常碰到的异常,所以继承自Exception并且不是运行是异常的都是检查异常。,比如常见的IO异常和SQL异常,这种异常发生在编译阶段,java编译器强制程序去捕获此类型的异常,即把可能会出现这些异常的代码放在try块中,把对异常处理的代码放在catch块中,这种异常一般在如下几种情况中使用:

异常并不会导致程序出错,进行处理后可以继续执行后续的操作,例如,当连接数据库失败后,可以重新连接后进行后续操作。

程序依赖不可靠的外部条件,例如系统的IO

运行时异常

运行时异常不同于编译时异常,编译器没有对其进行强制的捕获并处理。如果不对这种异常进行处理,当这种异常出现时,会有JVM来处理,例如NullPointerException异常,它是运行时异常,常见的运行时异常包括:ClassCastException(类型转换异常),ArrayIndexOutOfBoundsException(数组越界异常),ArrayStoreException(数组存储异常),BufferOverflowException(缓冲区溢出异常),ArithmeticException(算术异常)等。

出现运行时异常后,系统会把异常一直往上层抛出,直到遇到处理的代码为止,若没有遇到处理块,则抛到最上层;如果是多线程就用Thread.run()方法抛出,如果是单线程,就用main()方法抛出;抛出之后,如果是线程,那么这个线程也就退出了。如果是主线程抛出的异常,那么整的程序也就退出了,所以不对运行时异常进行处理,后果非常严重,一旦发生,要么是线程终止,要不是主程序终止;

在使用异常处理时:还需要注意以下几个问题:

Java异常处理时,还用的多态的机制,如果在异常处理的过程中,如果先捕获父类的异常,然后在捕获子类的异常,那么捕获子类的代码将永远不会被执行。因此,在捕获时,正确的写法是:先捕获子类在捕获父类的异常信息。

可以根据实际的需求自定义异常,这些异常只需要继承Exception类即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值