【问题标题】:Effect of `Super` keyword in Exception subclassesException 子类中 `Super` 关键字的作用
【发布时间】:2014-11-19 04:42:57
【问题描述】:
public class AccountException extends Exception {
    public AccountException(String str) {
      super(str);
     }
   }

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

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

【问题讨论】:

标签: java super


【解决方案1】:

您的问题与异常无关。

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

“Super”关键字的使用一直是 SO 和其他 Java 程序员网站中的热门话题。我不会通过再次重复这些词来污染这个线程。总之,“你想要子类,你需要super - 不需要,不要使用”。

如果你捕捉到异常会发生什么 - 好吧,使用 try{...} catch(Exception e) 块你实际上是捕捉到 Exception 对象。让我们假设您自己的异常类称为“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。

【讨论】:

    【解决方案2】:

    使用super 调用超类构造函数。这与异常无关。

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 2018-09-18
      • 1970-01-01
      • 2018-06-23
      • 2022-12-09
      • 2016-10-29
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      相关资源
      最近更新 更多