Java 为什么异常类不是';不抽象?

Java 为什么异常类不是';不抽象?,java,exception,Java,Exception,一旦程序中可能发生的所有异常都来自异常类或错误类的特定具体子类,那么为什么不将异常类定义为抽象类呢 我们的程序中可能出现的所有异常都来自特定的 异常类的具体子类 这是不对的。如果在代码中不需要创建新的特定异常类,但需要通过泛型异常,则始终可以执行以下操作: throw new Exception("Generic Exception"); 类对象也是如此。为什么对象不声明为抽象?因为如果需要,您可以直接使用它。例如,作为同步代码块的锁。因为您可以引发新的异常:)您的语句不太正确。所有可丢弃的异

一旦程序中可能发生的所有异常都来自异常类或错误类的特定具体子类,那么为什么不将异常类定义为抽象类呢

我们的程序中可能出现的所有异常都来自特定的 异常类的具体子类

这是不对的。如果在代码中不需要创建新的特定异常类,但需要通过泛型异常,则始终可以执行以下操作:

throw new Exception("Generic Exception");

对象
也是如此。为什么
对象
不声明为抽象?因为如果需要,您可以直接使用它。例如,作为同步代码块的锁。

因为您可以引发新的异常:)您的语句不太正确。所有可丢弃的异常都是的子类。这个类也不是抽象的,问题是:为什么要抽象?这个类中没有抽象方法。@Turing85考虑到异常的使用方式,有一个明确的例子支持OP的建议。所有的
Throwable
Excepton
Error
可能都是抽象类。抽象方法在这里是不相关的,但是实例化。@VishalZanzrukia你把它弄得面目全非:因为
异常
不是抽象的,你可以实例化它。@MarkoTopolnik我认为这是一种设计哲学。如果抽象类没有任何抽象方法,那么它有什么好处?您只是在没有任何(好的)理由的情况下拒绝这些对象的用户实例化,这很不方便(如果您在使用构建器模式时明确拒绝实例化,这是不同的)。我知道我们有这样做的权限,但最终是谁做的?这在我的脑海里很模糊opinion@TheodoraBaxevani问题是这种设计选择非常非常古老。回想起来,异常可能应该以另一种方式设计,但当时,他们可能认为能够抛出
newexception()
是个好主意。因为这是可能的,很多程序都这样做。由于Java非常关心向后兼容性,所以他们不能再改变这种设计:它会破坏现有代码。我必须同意OP的观点,即检查过的泛型异常是Java允许的最愚蠢的行为之一。Davide,抽象类是不允许实例化的类。拥有一个抽象方法是一个充分的条件,但决不是阻止实例化的必要条件。一个类应该是抽象的,因为它在概念上是正确的,而不是因为其中有一些抽象方法。从概念上讲,有一些非常好的论据可以使
异常
抽象化,而没有一个论据可以使它成为一个可实例化的类。