在Java中的构造函数中使用super()有什么问题?

时间:2009-07-07 16:36:52

标签: java debugging constructor static-analysis

当我对以下代码运行静态分析时:

  public ExtractDBScripts(String resBundleName)
    {
        super();
        m_mainBundle = ResourceBundle.getBundle(resBundleName);
    }

我收到以下错误:

  

“JAVA 0058构造函数'ExtractDBScripts'调用super()”。

从构造函数调用super()有什么问题?

5 个答案:

答案 0 :(得分:13)

可能只是因为它完全没有必要 - 这是java的默认行为(它会为你调用super)。如果需要将参数传递给非默认构造函数,则需要使用对super()的显式调用。

静态分析工具通常会指出代码完全没有任何作用或者没有必要帮助您减少混乱。它还会指出a = a;说a = a没有错;但它实际上并没有做任何事情。

答案 1 :(得分:2)

绝对没有错误与它 - 虽然如果你没有自己声明它(即没有必要声明它),它隐含在构造函数的第一行(

答案 2 :(得分:2)

我假设您使用的工具反对该行代码,因为它不是必需的 - 如果您删除它,编译器将自动插入它。

请参阅“子类构造函数”部分here

答案 3 :(得分:0)

在构造函数中调用super()没有任何问题,只要它是构造函数中的第一行,只要您实际扩展具有非私有构造函数的类即可。

如果你扩展的类只有一个构造函数,而且它是私有的,那么就不能调用super()。

答案 4 :(得分:0)

我建议故意在你的代码中调用super(),以便其他编码人员明白你想做什么。它是我工作的编程实践的一部分,似乎有意义。您可以根据软件设置静态分析工具来忽略对super()的调用。 IntelliJ具有在进行静态分析时忽略特定事物的注释。