自定义异常类的问题

自定义异常类的问题

在课程里,定义了一个继承Exception的子类HotelAgeException。类里有一个方法:

public HotelAgeException() {

super("18岁以下,80岁以上的住客必须由亲友陪同");

}

老师,1、这个方法是无参构造吗?因为名字方法名和类名相同。

2、super调用的是父类Exception的方法吗?

3、throw new HotelAgeException();,这抛出的是自定义异常类的实例对象吗?

4、catch里的System.out.println(e.getMessage());老师,e.getMessage();是什么?

5、catch里的System.out.println("酒店前台工作人员不允许办理入住登记");这句话可以跟"18岁以下,80岁以上的住客必须由亲友陪同"写在一起,为什么非要分开写呢?

6、自定义异常属于检查异常还是非检查异常?

正在回答

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

3回答

同学你好,

  1. super(message);调用的是Exception的父类Throwable的带参构造方法,同学这里知道就好,目前无需深入了解。同学想看源码的话,如下图所示:

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

  2. getMessage方法是获得错误信息,即返回错误信息,返回值需要使用System.out.println();方法进行输出。

    super(message);是使用带参构造方法为属性message赋值,只有赋值成功后,才能通过getMessage方法获得错误信息。

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

  • 鱼儿0001 提问者 #1
    好的,谢谢老师!
    2019-06-16 10:39:54
吃吃吃鱼的猫 2019-06-14 14:28:47

       同学你好,

       1、调用的是Exception的带参构造方法,点击查看Exception类,可以看到如下图所示的构造方法,所以,这里调用的是带有异常信息参数的Exception类的构造方法。

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

       2、是的。

       3、e.getMessage():只会获得具体的异常名称。比如说空指针异常,就告诉你说是NullPointException。

       e.printStackTrace():会打印详细异常,异常名称,出错位置,便于调试用。一般一个异常至少几十行。

       同学输入年龄为5,会出现“18岁以下,80岁以上的住客必须由亲友陪同”的提示吗?

       提示就是1中传入的message,在调用e.getMessage()之后输出。

       4、非检查异常称为:UnchecekedException。那么非检查异常有哪些呢?有:

RuntimeException(即:运行时异常)与其子类,以及错误(Error)。

所以说RuntimeException是非检查异常下的一个分类。

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

  • 提问者 鱼儿0001 #1
    谢谢老师的回复。我有几点疑问:1、public Exception(String message){ super(message)},这里的super调的又是谁的方法,老师能把具体代码打出来吗,谢谢!2、老师说:同学输入年龄为5,会出现“18岁以下,80岁以上的住客必须由亲友陪同”的提示吗?老师,之所以会打印这句话,和e.getMessage()没有关系,这句话是写在HotelAgeException的无参构造方法里的,你说e.getMessage打印异常名称,可是并没有打印,课程里就是这样。
    2019-06-15 14:16:15
  • 提问者 鱼儿0001 #2
    老师我试了一下,少了System.out.println(e.getMessage());,HotelAgeException里的无参构造的super("18岁以下,80岁以上的住客必须由亲友陪同")里的这句话不会被打印,这里的关系到底是什么呢?
    2019-06-15 14:29:58
好帮手慕阿莹 2019-06-13 14:29:36

1、是的,同学理解的没错,这个是无参构造。

2、是的,super调用的是父类Exception 的方法。

3、是的,throw new HotelAgeException();是抛出的自定义异常类的实例对象。

4、e.getMessage()作用是获得异常的错误信息

5、同学也可以写在一起呦,老师这里只是想先展示一下抛出异常的错误信息,与后边的执行语句

如果同学觉的放在一起合适,也可以放在一起哦。

6、自定义异常继承Exception 时属于检查异常,如果想定义非检查异常,可使其继承RuntimeException

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


 


  • 提问者 鱼儿0001 #1
    好的,谢谢老师的耐心回复。将课程与代码重新温习一遍,发现自己是在这几点上有疑问:1、自定义异常类public HotelAgeException extends Exception{}里的无参构造方法public HotelAgeException(){},方法里的super调用的是父类Excepion里的什么方法?看代码的模样:super("18岁以下,80岁以上的住客必须由亲友陪同");,好像调的是Exception的带参构造方法。2、在每次实例化HotelAgeException时,它的无参构造方法里的super后的参数:18岁以下,80岁以上的住客必须由亲友陪同,这句话都会打印一遍吗?3、老师说:e.getMessage()作用是获得异常的错误信息。这么说,e.getMessage()与e.printStackTrace()的功能差不多啦?可是当我在运行程序时,输入年龄:5,最后运行结果没有错误信息提示啊。。4、老师,非检查异常的英文名称到底是UnchecekedException还是RuntimeException,它俩是啥关系?
    2019-06-14 11:38:59
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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