gpt4 book ai didi

java - java中如何处理父类(super class)构造函数抛出的异常?

转载 作者:行者123 更新时间:2023-12-02 20:02:56 25 4
gpt4 key购买 nike

我收到的错误是“未处理的异常类型异常”。所以我有一个问题,我们如何在子类中处理这个抛出的异常。

class A 
{

A() throws Exception
{
System.out.println ("Executing class A constructor");
throw new IOException();
}
}

public class B extends A
{
B() //error
{
System.out.println ("Executing class B constructor");

}

public static void main ( String args[] )
{
try
{
A a = new B();
}
catch ( Exception e)
{
System.out.println( e.getMessage() );
}
}
}

最佳答案

子类的构造函数无法处理其父类(super class)构造函数抛出的异常。

您唯一能做的就是将子类构造函数声明为抛出与父类(super class)构造函数声明相同的(已检查的)异常;例如

    B() throws Exception {
System.out.println ("Executing class B constructor");
}

这意味着如果 A() 抛出异常,您无法打印“Executing class B constructor”消息。

如果你仔细想想,这是一件好事。如果您能够在子类构造函数中捕获来自 super(...) 的异常,则必须处理可能尚未完全初始化的对象。这可能是有问题的。

或者,如果您确实想处理来自父类(super class)构造函数的异常,则隐藏子类构造函数(即使其私有(private))并使用工厂方法来创建子类实例。该方法可以处理从父类(super class)或子类构造函数发出的异常。但请注意,除非构造函数做了一些卑鄙的事情(例如通过异常走私this),否则您仍然看不到对部分初始化/损坏的对象的引用。

<小时/>

我想这只是一个例子,但值得指出的是,将方法声明为抛出 Exception (或 Throwable )。您应该将该方法声明为抛出实际抛出的异常。

关于java - java中如何处理父类(super class)构造函数抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23932442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com