那么,Java main方法究竟是如何工作的呢?
public static void main(String [] args)
自从我开始编程以来,这件事一直是个谜。我知道它将字符串数组传递给命令行,但它究竟在哪里执行此操作,以及如何解释它
我很确定我错了,但我目前的理解是,在main方法中编写的任何内容都会被转换成机器,并作为字符串传递到计算机中。好吧,这很好,但如果一切都是字符串,它如何理解数值呢
而且,在方法上也有点奇怪。通常,在设计一个方法时,您会编写要传递给它的形式参数,以及您想用这些参数做什么。但是对于main方法,当您在main方法中编写代码时,您正在定义参数!这到底是怎么回事
# 1 楼答案
我不熟悉JVM的内部结构,但假设它运行在典型的Linux/Unix系统上,以下是一些可能性:
1)JVM本身是调用的实际程序,为其提供。类名称作为输入(包含主方法)以及其他参数(如果需要)-例如:
java SomeProgram input1 input2
哪里有什么节目。类是从某个程序编译的。java,它是具有常用main()方法的类
2)现在,典型Linux/Unix环境中的JVM是一个“ELF二进制文件”(可执行文件和链接格式),定义了“main”方法。这里描述了所有血腥的细节,包括如何将输入从shell传递到正在运行的可执行文件(在Intel平台上):
http://linuxgazette.net/84/hawk.html
3)简而言之,JVM获得(2)中所述的输入,然后有效地运行Someclass。方法,将所有输入复制到字符串[]数组
4)所有输入都被视为字符串,因此如果需要将某些输入视为数字,则需要根据需要显式转换它们
尽管ELF标准是Linux/Unix系统的一部分,但我假设在其他支持Java的平台上也会发生类似的事情
如果我错了,我希望对JVM内部有更多了解的人能够纠正我
# 2 楼答案
这句话没有什么特别的意义。是的,该类(可能包含
main
方法)被编译成字节码,可以由JVM读取/解释并在机器上执行当执行JVM时(通过运行
java
命令),它会在指定的类中查找main
方法(或者如果您正在执行jar文件,则查找由Main-Class
清单项指定的类)。如果找到,它将把命令行参数作为String
数组传递给main
方法因为JVM不可能知道哪些参数可以从命令行发送给它,所以它将所有参数封装在一个
String
数组中,这意味着,可以向main
方法发送很多不同的参数由您根据程序的需要解释这些参数,并确定它们是否适合继续执行
看看:
更多细节
从历史上看,
main
方法来自C/C++,因为它们也有一个以类似方式运行的main
函数的概念# 3 楼答案
Java中的
public static void main(String[] args)
方法是用户开始运行程序时调用的方法。在这个方法中,您可以编写使程序工作所需的任何代码(类和方法)是的,此方法的参数是字符串,但这是因为当从命令行执行程序时,这些参数是用户在要执行的类名称之后键入的参数。如果您需要,则由您的代码将它们解析为数字