原来这就是Java中的异常(abnormal),小白看完也懂了,学习总结③

自定义异常类

我们可已使用Java内置的异常类来描述在编程时发现的大部分异常情况。同样有些时候也可以自定义异常去描述特定业务产生的异常类型,所谓的自定义异常,就是定义一个类,继承Throwables类或者他的子类。


案例紧跟案例模块

在方法中,我们限制18岁以下必须由亲友的陪同在可以入住,在Exception中我们设立了提示异常的信息。那么如果一个异常频繁出现,或者需要特定类型针对特定业务描述,那么我们就可以自己编造一个测试类来执行。

现在我们新建一个test类,HotelAgeException。让他继承自Exception类

在这人我们需要构建一个无参构造方法,并用super来调用父类Exception的代餐构造,传递信息。

然后在父类,需要修订新的throw语句,

然后在上面的main方法中,补全提示异常信息。如果可以还可以添加多重catch语句,补全更多其他类型的异常

让我们看看运行结果:

 


异常链

有时我们捕获异常后会在抛出另一个异常对象。

场景

比如有三个方法,testOne,testTwo,testThree三个方法,testOne方法抛出异常给testTwo,在此基础上,testTwo又抛出方法给testThree。

在我们的工程中,我们创建一个新的test类,新建是那个方法 testOne,testTwo,testThree,然后

  • 在testOne方法中抛出酒店第一个年龄的异常,并且用throws语句抛出去
  • 在testTwo,捕获testOne的异常,并且抛出新的异常,并且throws向外声明
  • 在testThree中,捕获testTwo的异常,并且循环
  • 最后在main方法中调用testThree的异常信息。

运行报错信息后发现,我们的异常报错之有Exception2,那么ex1 哪里去了呢?这是由于新抛出异常导致异常信息丢失。

解决

让我们先看看Java API的文档信息。

可以看到,它提供了这几种处理机制。可以通过构造方法单独增加参数也可以一起使用。其中,initCause(Throwable cause); 方法和上面的Throwable(Throwable cause);机制是一样的。

那么这样来说我们就可以这样做:

 

可以看到,异常发生的过程,以及原因都记录保留下来了。

异常链就是将异常信息一个一个串联起来,将底层的异常信息传递给上层,逐层抛出,形成的一种链条;


总结

异常在我们的程序中总是发生一些意外的情况,这些就是异常。利用java的异常处理机制,我们可以更好的提高程序的牢固性能。

在实际工作中,我们应当尽量去处理异常,而不是一贯的使用PrintStackTrace()打印输出异常。而且具体处理异常则需要根据业务的需求和异常的类型去做决定,最后尽量学会添加finally语句块去释放占用的资源。

 

👺👺:Java异常学习总结 一

👺👺:Java异常学习总结 二

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值