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