自定义异常的问题

自定义异常的问题

http://img1.sycdn.imooc.com//climg/5d42c0dd0001e2be05390281.jpg

我在这里建立了一个自定义异常然后在另一个类中进行测试

http://img1.sycdn.imooc.com//climg/5d42c1180001b73a04730323.jpg

这里没有报错

http://img1.sycdn.imooc.com//climg/5d42c1380001cbff05270308.jpg


这里报错了

http://img1.sycdn.imooc.com//climg/5d42c1540001b65905310315.jpg


这里也没有报错,请问报错的原因是什么,而且我创建的自定义异常那里为什么有警告?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕珊 2019-08-02 10:32:51

你好!下面分别回答你的两个问题:

1、尝试了一下代码,如果catch后面小括号中的内容是下面的运行时异常,是不会报错的。但如果是检查异常比如IOException,如果此时try块中没有内容就会报错。Exception是RuntimeException和IOException的父类,也就是Exception包括了检查异常和运行时异常,所以写Exception没有报错。但是如果是通过继承Throwable自定义的异常,报错的原因和检查异常一样的。Throwable是Exception的父类,继承Throwable的自定义异常应该是当作检查异常处理了,所以try块中必须有内容。

http://img1.sycdn.imooc.com//climg/5d439f08000122d004280150.jpg

2、Serializable是一个序列化的接口,实现序列化接口主要是为了保存在内存中的各种对象的状态。将在后面的输入输出流课程中介绍,到时候可以再理解一下这个接口。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小班 2019-08-01 20:02:47

        同学你好,1、这里自定义的异常类需要先throw抛出,才能捕获哦,例如:

http://img1.sycdn.imooc.com//climg/5d42d2b60001fd2b04900207.jpg

因为如果没有throw  new Test2(); 程序中的报错信息为

          Unreachable catch block for Test2. This exception is never thrown from the try statement body-->Test2的无法到达的catch块。这个异常永远不会从try语句主体中抛出

因为没有Test2的异常产生,对应在catch中也就不能捕获这个异常哟!

        2、这里报出的警告信息是:The serializable class Test2 does not declare a static final serialVersionUID field of type long-->可序列化类Test2不声明类型为long的静态最终serialVersionUID字段!

        当一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个提示功能告诉你去定义它。 这里 Throwable实现了Serializable 接口,对应在Eclipse中就会提示可以定义的这个警告!

http://img1.sycdn.imooc.com//climg/5d42d46d0001309a03460328.jpg

        如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕UI5285863 #1
    1.第三个图报错,而第四张图同样没抛出异常而没有报错,想知道这两者的区别是为什么 2.serializable接口好像还没在课程上接触过,不太明白这里面的关系
    2019-08-01 20:17:22
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师