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/