有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

那么,Java main方法究竟是如何工作的呢?

public static void main(String [] args)

自从我开始编程以来,这件事一直是个谜。我知道它将字符串数组传递给命令行,但它究竟在哪里执行此操作,以及如何解释它

我很确定我错了,但我目前的理解是,在main方法中编写的任何内容都会被转换成机器,并作为字符串传递到计算机中。好吧,这很好,但如果一切都是字符串,它如何理解数值呢

而且,在方法上也有点奇怪。通常,在设计一个方法时,您会编写要传递给它的形式参数,以及您想用这些参数做什么。但是对于main方法,当您在main方法中编写代码时,您正在定义参数!这到底是怎么回事


共 (3) 个答案

  1. # 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. # 2 楼答案

    I'm pretty sure I'm wrong here, but my current understanding is that whatever you write in the main method is then translated into machine and passed into the computer as a string. Well, that's all fine and dandy, but then how does it understand numeric values if everything is a String?

    这句话没有什么特别的意义。是的,该类(可能包含main方法)被编译成字节码,可以由JVM读取/解释并在机器上执行

    当执行JVM时(通过运行java命令),它会在指定的类中查找main方法(或者如果您正在执行jar文件,则查找由Main-Class清单项指定的类)。如果找到,它将把命令行参数作为String数组传递给main方法

    Also, it's a bit weird when it comes to methods. Usually, when designing a method, you would write the formal parameters that you'd pass to it, and what you want to do with those parameters. But with the main method, you are defining the parameters while you're writing the code inside the main method! how does that even work?

    因为JVM不可能知道哪些参数可以从命令行发送给它,所以它将所有参数封装在一个String数组中,这意味着,可以向main方法发送很多不同的参数

    由您根据程序的需要解释这些参数,并确定它们是否适合继续执行

    看看:

    更多细节

    从历史上看,main方法来自C/C++,因为它们也有一个以类似方式运行的main函数的概念

  3. # 3 楼答案

    Java中的public static void main(String[] args)方法是用户开始运行程序时调用的方法。在这个方法中,您可以编写使程序工作所需的任何代码(类和方法)

    是的,此方法的参数是字符串,但这是因为当从命令行执行程序时,这些参数是用户在要执行的类名称之后键入的参数。如果您需要,则由您的代码将它们解析为数字