“超级”关键字在异常子类中的作用

时间:2014-11-18 20:17:01

标签: java super

public class AccountException extends Exception {
    public AccountException(String str) {
      super(str);
     }
   }

这是示例程序中的第一个类。我不明白的是为什么我们使用超级关键字。我知道从异常类扩展这个类但我不明白为异常创建方法。当我们捕获异常时会发生什么?

我得到了我的问题的答案  super只需调用方法Exception(String message)即可 使用指定的详细消息构造新的异常。  这是制作我们自己的异常类的一个例子。

2 个答案:

答案 0 :(得分:0)

您的问题与“例外”无关。

类是存在的,因此您可以使用它们,或者(在大多数情况下)扩展它们以使其对​​您自己的利益更有用。异常只是标准Java库中的另一个类,根据您尝试建模的异常类型,它可以是Checked或Unchecked。请阅读Oracle's documentation中的例外情况。

"超级"关键字使用一直是SO和其他Java程序员网站中的热门话题。我再次重复这些话,不会污染这个话题。总而言之,"你想要子类,你需要super - 不需要,不要使用"。

如果你捕到异常会发生什么 - 好吧,使用try{...} catch(Exception e)阻止你实际上正在捕获异常对象。让我们假设您自己的异常类被调用" DontKnowException"。如果您执行以下操作:

try {
    // My code

} catch (Exception e) {
   // Print stack trace
   // Do whatever you want using "Exception" object e
}

如果仔细查看代码,你在哪里说你正在捕捉" DontKnowException"宾语?答案是 - 无处可去。但是你是否正在追赶"例外"对象 - 是的,你是。一个世俗的(可能是愚蠢的)例子 - "你的爷爷有一辆自行车,但没有车。你爸爸有一辆自行车和一辆车。爷爷,我可以开车吗?不,我没有。"

由于Java SO用户也会同意,如果你的例外是"未选中"你不需要尝试try-catch。类别。如果您的例外是"未经检查"那么为什么还要使用super呢?那可能是好习惯吗?

如果您坚持编写自己的Exception类,我强烈建议您了解您是否正在处理未经检查/已检查的异常。编写类后,尝试捕获Exception类对象,而不是超类Exception。

答案 1 :(得分:0)

使用super调用超类构造函数。这与例外无关。