java——异常与错误处理

java异常体系

在这里插入图片描述

Exception vs Error

在Java里面,所有的异常都是继承自java.lang.Throwable类,Throwable有两个直接子类,Error和Exception。

二者最大的区别:异常能被程序本身处理,而错误不能处理

1、Exception
Exception表示程序中的异常,可能是由于程序不严谨导致的,比如NullPointerException。

2、Error
Error用来表示程序底层或者硬件有关的错误,这种错误和程序本身无关,比如常见的OOM异常。这种异常和程序本身无关,所以不需要检查,属于非受检异常。

编译期异常 vs 运行时异常

Exception 又分为编译期异常 和 运行期异常
编译时异常必须显示处理,所以也叫受检异常
运行时异常交给java虚拟机,不用程序员手动处理,所以也叫非受检异常

之所以在Java中要设计一些强制检查的异常,我认为主要原因是考虑到程序的正确性、稳定性和可靠性

比如数据库异常、文件读取异常,这些异常是程序无法提前预料到的,但是一旦出现问题,就会造成资源被占用导致程序出现问题。

所以这些异常我们需要主动捕获,一旦出现问题,我们可以做出相应的处理,比如关闭数据库连接、文件流的释放等。

try-catch、throw、throws

各自特点

  • throws
    如果一个方法可能会有异常,但你并不想处理这个异常,就在方法名后面用throws,这样这个异常就会抛出,谁调用了这个方法谁就要处理这个异常,或者继续抛出.允许throws后面跟着多个异常类型,用逗号隔开;
  • throw
    一般会用于程序出现某种逻辑时程序员主动抛出某种特定类型的异常,throw只会出现在方法体中,当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw出去。
  • try/catch
    就是用catch 捕获 try 中的异常并处理,当try中有异常抛出时不是中断执行,而是转而执行catch中的代码;一般在catch中throw自定义异常,

throw和throws对比
1、throws出现在方法头;而throw出现在方法体中。
2、throws表示出现异常的一种可能性,异常并不一定会发生。而throw表示异常已经发生了。
3、两者都是消极处理异常的方式,只是抛出异常,交给上层调用函数处理。

try…catch和throws/throw的对比
try…catch将异常自己解决掉,而throws/throw是自己不解决,抛出exception让别人去捕获,当然别人也可以不解决继续抛出。

异常处理的建议

只在必要使用异常的地方才使用异常,异常使用过多会影响正常程序的执行
抛出的异常信息尽可能准确,不要图方便随便抛出一个exception,到排查问题时就惨了的。
一定记得在finally中释放资源!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值