java 为什么我不能在catch [duplicate]中使用抛出异常的try catch来 Package super

lymnna71  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(151)

此问题在此处已有答案

Why do this() and super() have to be the first statement in a constructor?(22个答案)
20小时前关门了。
此帖子在14小时前编辑并提交审查。
为什么下面的代码没有被编译。通常super不允许被 Package 在try-catch中,因为如果在super中抛出异常表明super没有完成,所以它不应该被 Package ,但是如果我在try catch块中抛出异常怎么办,这仍然表明类的构造不完全正确。所以java开发者可以允许这种情况,当他们在超级右周围的try catch块中抛出异常时。有什么原因不允许这样做吗?另一个问题是为什么super必须是构造函数中的第一条语句,但是这个问题是关于抛出不同的异常,而不是超类抛出的异常。

class AA
{
    AA() throws FileNotFoundException
    {
        throw new FileNotFoundException();
    }
}
class BB extends AA
{
    BB() throws Exception
    {
        try
        {
            super();
        }
        catch(Exception e)
        {
            throws new Exception();
        }
    }
}
oaxa6hgo

oaxa6hgo1#

JLD不允许这样做。他们不允许这样做的原因可能有很多,但我猜是因为构造函数不是一个方法,它不返回任何值。所以这意味着创建类时出了问题。在这种情况下,类的初始化出错,不能保证它能正常工作,因此应检查为构造函数提供的所有参数是否都在调用之前更正。

相关问题