此问题在此处已有答案:
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();
}
}
}
1条答案
按热度按时间oaxa6hgo1#
JLD不允许这样做。他们不允许这样做的原因可能有很多,但我猜是因为构造函数不是一个方法,它不返回任何值。所以这意味着创建类时出了问题。在这种情况下,类的初始化出错,不能保证它能正常工作,因此应检查为构造函数提供的所有参数是否都在调用之前更正。