java - Exception 子类中 `Super` 关键字的影响

标签 java super

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

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

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

最佳答案

您的问题与异常无关。

类的存在使您可以使用它们或(在大多数情况下)扩展它们以使其对​​您自己的利益更有用。 Exception 只是标准 Java 库中的另一个类,根据您尝试建模的异常类型,它可以是已检查的也可以是未检查的。阅读 Oracle's documentation 中有关异常的信息.

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

如果捕获异常会发生什么 - 好吧,使用 try{...} catch(Exception e) block ,您实际上捕获了 Exception 对象。让我们假设您自己的异常类称为“DontKnowException”。如果您执行以下操作:

try {
    // My code

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

如果您仔细查看代码,您在哪里说您正在捕获“DontKnowException”对象?答案是——无处可去。但是你是否捕获了“Exception”对象 - 是的。一个世俗的(可能很愚蠢)的例子 - “你的爷爷有一辆自行车,但没有汽车。你的爸爸有一辆自行车和一辆汽车。爷爷,我可以拥有你的汽车吗?不,我没有。”

Java SO 用户也会同意,如果您的异常是“Unchecked”类别,则无需执行 try-catch。那么,如果你的异常是“未检查的”,为什么还要费心使用 super 呢?那么可能是一个好的做法?

如果您坚持编写自己的 Exception 类,我强烈建议您了解您是否正在处理未经检查/检查的异常。编写类后, try catch Exception 类对象,而不是父类(super class) Exception。

关于java - Exception 子类中 `Super` 关键字的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27003242/

相关文章:

java - 调用 Java 关键字 super

java - 在调用父类(super class)型构造函数之前无法引用 roomNumber

java.io.File.setReadable(false) 在 docker 中无效

java - 个性化 JTabbedPane 水平方向内的高度选项卡

java - Java 中的字符测试器(大写 A-Z,小写 a-z,数字 0-9,其他)

java - 从对象类型的角度来看,子类是否等同于它们的 racine 类?

java - Gson避免反射

java - 我需要关闭 'PreparedStatement' 吗?

Javascript - 对 parent 的 parent 打电话 super ?

Java - 理解克隆