【问题标题】:What is the purpose of specifying the type of argument a main method takes in?指定 main 方法接受的参数类型的目的是什么?
【发布时间】:2015-08-17 22:51:31
【问题描述】:

public static void main (string[] args) 是一个 main 方法,必须给定一个字符串数组作为参数。

但是,当我运行程序时,main 方法会自动运行,而无需我显式地使用参数调用它。

因此,我有以下问题:

  • main 方法的参数类型是否重要?
  • 是否存在显式调用带有参数的主方法的情况?如果是这样,这种情况的例子是什么?

【问题讨论】:

    标签: java oop types arguments


    【解决方案1】:

    主方法的参数类型重要吗?

    是的。 JVM 使用public static main(String[] args) 作为一般Java 应用程序的执行入口点。换句话说,这是 JVM 将把执行从它自己的内部加载和初始化例程移交给你自己的字节码的地方。除非您在容器(例如 GlassFish)或框架(例如 JavaFX)内执行应用程序,否则您的代码将需要此入口点。按照惯例,它是public static main(String...)

    是否存在显式调用 main 带参数的方法?如果是这样,这种情况的例子是什么?

    main(...) 的参数主要来自两个地方:

    • 命令行。当您从 shell 或 Windows cmd.exe 内的命令行启动 Java 应用程序时,您可以在要执行的 JAR 文件的名称后面输入一些附加数据。这些附加数据被处理成一个字符串数组,传递给您的main() 方法。

    • 配置设置。大多数 IDE 允许您为项目指定命令行参数。您可以在此设置中将参数传递给入口点(在构建和运行项目时),就像在命令行中一样。

    正如 Dave 所说,您自己的代码不会调用 main(...) 方法本身。它实际上只是作为入口点。

    【讨论】:

    • 当我在命令行中输入 java FileFile 没有任何参数时,我只是给 main 一个空字符串作为参数吗?
    • 旨在从命令行执行的 Java 项目必须以这种方式构建,并在其 JAR 文件中使用 MANIFEST.INF 文件打包。一旦构建为可执行文件,它就可以作为java -jar <jar-file-name>.jar <par1 par2 ... parn> 执行。在这种情况下,pars 将被处理成一个 String 数组并传递给main(...) 方法。
    【解决方案2】:
    1. 当然; JVM 只会自动调用main(String[])。它专门用于从命令行获取字符串参数。
    2. 这只是另一种方法:虽然它几乎总是用作入口点,但没有技术原因不能像任何其他静态方法一样使用它。我不会,因为它是非典型的和非交流性的。

    【讨论】:

    • 对不起。让我澄清一下。当我在命令提示符中键入java *File**File* 后面没有任何参数时,调用main 方法的字符串是什么?它只是一个空字符串吗?
    • @qaz 这不是“字符串”,而是字符串数组。如果没有任何命令行参数,则数组将没有任何元素。顺便说一句,这对测试来说是微不足道的。
    • 啊,是的,我的错。我会记住自己测试这样容易测试的东西
    【解决方案3】:

    在 Java 编程语言中,每个应用程序都必须包含一个 main 方法,其签名是:

    public static void main(String[] args)

    修饰符 public 和 static 可以按任意顺序编写(public static 或 static public),但约定是使用 public static,如上所示。您可以为参数命名任何您想要的名称,但大多数程序员选择“args”或“argv”。

    main方法类似于C和C++中的main函数;它是您的应用程序的入口点,随后将调用您的程序所需的所有其他方法。

    main 方法接受一个参数:String 类型的元素数组。

    public static void main(String[] args)

    此数组是运行时系统将信息传递给您的应用程序的机制。`

    您可以阅读更多here 和主要的Java 文档,非常实用,是here

    关于你的第二个问题,是的,你可以这样做,但我不建议这样做。

    【讨论】:

      猜你喜欢
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 2019-04-04
      • 2010-10-18
      • 2021-02-14
      • 2011-04-13
      相关资源
      最近更新 更多