【问题标题】:main method as final in javajava中的main方法作为final
【发布时间】:2014-12-29 21:52:32
【问题描述】:

我在一次认证考试中看到了这段代码:

public class SimpleClass 
{
    int num;
    final static void main(final String args[])
    {
        String s1="new";
        String s2="String";
        String s3="Creation";
        System.out.println(s1+s2+s3);
    }
}

我知道最终方法是无法覆盖的。我也知道,如果main 方法的通常签名被更改,它将被JVM 视为任何其他普通方法,而不是main()

但是,给我的选项是:

1>  Code  won't  compile
2>  Code  will  throw  an  exception
3>  will  print  newStringCreation.

无法在 Eclipse IDE 上运行此程序。谁能解释一下答案应该是什么以及为什么?

好吧,让我这样提出我的问题 - 当我执行我的程序时,会发生什么?我应该选择以上 3 个选项中的哪一个?

【问题讨论】:

  • 讨厌的问题。 final 应该没关系。但是main 也不是公开的,这让我很担心。
  • 是的,代码会编译,只是不会运行。
  • 好吧,定义“运行”;如果这意味着您使用java SimpleClass 启动它,那么它将引发异常,因为正如您自己提到的那样,实际上没有main() 可以运行。此外,您不能以任何方式、形状或形式覆盖 static 方法,因此将它们声明为 final 是多余的。
  • @fge 声明静态方法 IS NOT 是多余的。如果您没有在超类中将静态方法声明为 final,您可以在子类中隐藏静态方法。
  • 您是否尝试自己编译和运行它? “无法在 Eclipse IDE 上运行此程序”是什么意思?当你尝试时会发生什么?您是否尝试在命令行上运行它?

标签: java main


【解决方案1】:

final static void main 不会运行,因为 main 不是公开的。

public final static void main 可以工作。

至少在我的 Eclipse IDE 上是这样的。

【讨论】:

    【解决方案2】:

    代码将毫无问题地编译,但会抛出运行时异常,提示“main method not public”。 main 方法必须是公共的,因为它必须由超出包范围的 JVM 调用,因此需要访问说明符-public。如果您无法在 eclipse 中运行它,请尝试使用 filename.java 将文件保存在记事本中的古老方法。转到 cmd 并到达文件位置。如果在桌面上,请使用 cd desktop!使用以下命令运行文件-

    javac filename.java
    
    java filename
    

    您将看到我上面提到的所需的运行时异常。

    【讨论】:

    • 我同意 Stefan 的回答,我无法作为评论给出详细的描述,因此单独回答。 @Gpar,试试这个方法,你可能会找到你要找的东西:)
    • 感谢@hchawla,我确实尝试了您的建议,但在 cmd 中收到名为“javac 未被识别为内部或外部命令”的错误。请告诉我下一步该怎么做?
    • 执行 javac 注释时,您是否在 cmd 中文件所在的同一目录中?
    • @Gpar 这个链接应该有助于修复此类错误,如果有的话:)docs.oracle.com/javase/tutorial/getStarted/problems/index.html
    【解决方案3】:

    main 方法必须可以从外部访问。因此,在您的情况下,应用程序将编译但在运行时抛出执行。

    【讨论】:

    • 如果它抛出异常,它可能是什么异常?抱歉,我无法像在 Eclipse IDE 上那样执行该程序。
    【解决方案4】:

    你有 main 方法,但是由于修饰符是 final JVM 将无法运行程序的 main 方法。你不会看到任何编译错误。

    final的修饰符更改为public

    ,即可在eclipse中运行程序

    【讨论】:

    • 主要方法可以是最终的。它应该是公开的最终结果。
    猜你喜欢
    • 2019-07-04
    • 2019-06-20
    • 2011-05-08
    • 2014-03-26
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多