Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java解释器如何拾取主函数,即使它被放置在内部类中?_Java - Fatal编程技术网

java解释器如何拾取主函数,即使它被放置在内部类中?

java解释器如何拾取主函数,即使它被放置在内部类中?,java,Java,我们将main函数声明为public和static,因为Java解释器应该可以访问它,并且不需要类的对象来调用main函数。当我在内部类中创建main函数并运行该类时,也执行了main函数。 解释器如何在内部选择main函数并执行 首先,我来解决你的问题。正如@August已经提到的,java不是一种解释语言。我相信,询问解释器就是询问JVM(Java虚拟机) 现在是答案。我猜JVM使用反射调用来执行main()方法,即使用与以下类似的代码: Class mainClass = Class.fo

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

首先,我来解决你的问题。正如@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

Java中main方法的签名

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

公共静态void main(字符串args[])

如果一个程序没有这个签名,那么JVM将无法找到main方法

在此签名中

public
定义此方法可以在类外访问,
static
显示无需创建任何类对象即可访问此方法,
void
显示此方法不会返回任何值,
String args
定义用户传递的参数数量


如果上述签名不匹配,JVM将返回main method not found exception。

Java不是解释语言。您有任何代码支持您的解释吗。我不清楚真正的问题是什么。那不完全是真的。。Java可以是一种解释语言,事实上,大多数JVM都附带了一个解释器(用于快速启动)和一个JIT,用于优化“热点”。@August并非如此。Java是一种“混合”:代码被编译成字节码,然后由JVM进行解释。如果有一天这个链接断了,答案将是无效的。输入一些答案,然后你可以参考该网站。Ok@Cold我修改答案