我猜jvm是有问题的,但是jvm是如何识别它的呢?是识别main这个名字,还是识别static属性?这是我的小困惑。
nlejzf6q1#
当JVM通过指定类来运行应用程序时,它将查找签名为public static void main(String[])的main方法。
public static void main(String[])
mzillmmw2#
Java main方法是任何java程序的入口点,它的语法总是public static void main(String[] args)。当java运行时启动时,类的对象不存在。这就是为什么main方法必须是静态的,这样JVM才能将类加载到内存中并调用main方法。如果main方法不是静态的,JVM就不能调用它,因为类的对象不存在你可以找到详细的解释here。
public static void main(String[] args)
mwkjh3gx3#
TLDR;根据Java语言规范(JLS)的规定,main方法和static方法都不能满足要求,方法必须同时满足这两种要求。如果有关于JVM的东西,那么它通常在Java语言规范中被指定。在这种情况下,它是12.1节,它指定了一个主方法的要求:
main
static
或
public static void main(String... args)
因此,除了 static 之外,它还需要是公共的,并具有void返回类型(整数可能更有意义,但Java是多线程的,因此返回值使用System.exit(int))。此外,正如您所期望的,它必须接受String参数。注意,main方法被设计为在CLI环境中使用,例如Windows中的命令行或Linux / Unix / MacOS中的许多shell之一。它类似于C/C++ main方法; Java是基于C/C++语言的。我还对照Java 18检查了这个,文本仍然是一样的。
void
System.exit(int)
String
3条答案
按热度按时间nlejzf6q1#
当JVM通过指定类来运行应用程序时,它将查找签名为
public static void main(String[])
的main方法。mzillmmw2#
Java main方法是任何java程序的入口点,它的语法总是
public static void main(String[] args)
。当java运行时启动时,类的对象不存在。这就是为什么main方法必须是静态的,这样JVM才能将类加载到内存中并调用main方法。如果main方法不是静态的,JVM就不能调用它,因为类的对象不存在
你可以找到详细的解释here。
mwkjh3gx3#
TLDR;根据Java语言规范(JLS)的规定,
main
方法和static
方法都不能满足要求,方法必须同时满足这两种要求。如果有关于JVM的东西,那么它通常在Java语言规范中被指定。在这种情况下,它是12.1节,它指定了一个主方法的要求:
或
因此,除了 static 之外,它还需要是公共的,并具有
void
返回类型(整数可能更有意义,但Java是多线程的,因此返回值使用System.exit(int)
)。此外,正如您所期望的,它必须接受String
参数。注意,
main
方法被设计为在CLI环境中使用,例如Windows中的命令行或Linux / Unix / MacOS中的许多shell之一。它类似于C/C++main
方法; Java是基于C/C++语言的。我还对照Java 18检查了这个,文本仍然是一样的。