【问题标题】:How java interpreter picks up main function even when it is placed in inner class?java解释器如何拾取main函数,即使它被放置在内部类中?
【发布时间】:2014-11-23 18:08:25
【问题描述】:

我们将main 函数声明为publicstatic,因为Java 解释器应该可以访问它并且不需要类的对象来调用main 函数。当我在内部类中创建main 函数并运行该类时,main 函数也被执行。 解释器如何在内部工作以选择 main 函数并执行?

【问题讨论】:

  • Java 不是解释型语言。
  • 你有任何代码来支持你的解释。我不清楚实际的问题是什么。
  • @August 这并不完全正确。Java 可以是一种解释型语言,事实上大多数 JVM 都带有解释器(用于快速启动)和用于优化“热点”的 JIT。
  • @August 不是真的。 Java 是一个“混合体”:代码被编译为字节码,然后被 JVM解释

标签: java


【解决方案1】:

Java 中 main 方法的签名

main 方法必须严格遵循它的语法;否则 JVM 将无法找到它,您的程序将无法运行。这是 main 方法的确切签名:

public static void main(String args[])

如果程序没有此签名,则 JVM 将无法找到 main 方法。

在这个签名中............

public 定义该方法可以在类外访问, static 表明无需创建任何类对象即可访问此方法, void 表示这个方法不会返回任何值, String args 定义没有。参数由用户传递。

如果上面的签名不匹配,JVM会返回main method not found异常。

【讨论】:

  • 如果某天此链接断开,答案将无效。回答一些问题,然后您可以参考该网站。
  • 好的@Cold我修改答案
【解决方案2】:

首先,让我解决您的问题。正如@August 已经提到的那样,java 不是解释语言。我相信询问解释器您想询问 JVM(Java 虚拟机)。

现在答案。我猜JVM使用反射调用来执行main()方法,即使用类似于以下的代码:

Class mainClass = Class.forName(mainClassName); // mainClassName is taken from the command line argument. 
Method main = mainClass.getMethod("main", String[].class);
method.invoke(args); // args are taken from command line

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多