不需要命令行参数的程序是不是需要 String args[] 参数?

Posted

技术标签:

【中文标题】不需要命令行参数的程序是不是需要 String args[] 参数?【英文标题】:Is the String args[] parameter needed for programs that do not require command line arguments?不需要命令行参数的程序是否需要 String args[] 参数? 【发布时间】:2015-10-07 15:50:07 【问题描述】:

据我所知,String args[] 接受 String 类型的元素数组 - 运行时系统通过该机制将信息传递给应用程序。

如果我们采用这样一个简单的加法程序:

class Add 

    public static void main(String args[]) 
        int x = 10;
        int y = 30;
        int c = x + y;
        System.out.println(c);
    

很明显,程序不需要任何命令行参数来计算结果。没有值传递给 args 数组。那么,是否有必要包含这个数组,还是 main() 语法要求我们不这样做?

【问题讨论】:

你不会在 c# 中。我会说尝试一下... “合理”是指“必要”吗? 主函数必须有那个签名。 如前所述,您无法更改方法签名,但您可以忽略args[] 的内容(或缺少这些内容),假设您不需要使用它们。 【参考方案1】:

必须拥有一个名为 public static void main(String[] args) 的函数作为 Java 程序的入口点。

如果您查看实际 java command 的文档,它会明确说明:

java 命令启动 Java 应用程序。它通过启动 Java 运行时环境 (JRE)、加载指定的类并调用该类的 main() 方法来完成此操作。该方法必须声明为 public 和 static,它不能 返回任何值,并且它必须接受一个字符串数组作为参数。方法声明的形式如下:

public static void main(String[] args)

这和JavaFX程序是有区别的; its initial entry point 位于start() 函数中。

【讨论】:

为了记录,如果你尝试使用varargs feature,写public static void main(String... args),你会发现这也有效。【参考方案2】:

来自The Java Tutorials:

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

public static void main(String[] args)

【讨论】:

【参考方案3】:

是的 - 如果你忽略参数,你会得到以下错误:

错误:在 nl.magnus.test.Test 类中找不到主方法,请将主方法定义为: public static void main(String[] args)

main 的此要求由 Oracle 在 Java SE specifications 中指定:

最后,在Test类的初始化完成后(在此期间可能发生了其他相应的加载、链接和初始化),调用Test的main方法。

方法 main 必须声明为 public、static 和 void。它必须指定一个声明类型为字符串数组的形式参数(第 8.4.1 节)。因此,可以接受以下任一声明:

public static void main(String[] args)

public static void main(String...args)

【讨论】:

【参考方案4】:

简短的回答 - 是的。你的main 方法必须有一个String[] 参数,即使它不使用它。

如果它没有这样的参数,Java 只是将其视为任何其他 public static 方法,而不是程序的入口点。

【讨论】:

【参考方案5】:

这是Java中程序入口点的必需定义。你必须拥有它。

【讨论】:

【参考方案6】:

无论你是否从命令行发送运行时参数,它都是main() 方法的语法。

任何程序的执行都只会以main()这个签名开始:-

public static void main(String args[])

【讨论】:

以上是关于不需要命令行参数的程序是不是需要 String args[] 参数?的主要内容,如果未能解决你的问题,请参考以下文章

Python命令行选项参数解析策略

如何知道 std::string/Cstring 中的值是不是为数字

Qt Creator调试命令行参数

将包含命令行参数的字符串拆分为 Java 中的 String[]

Go语言-获取命令行参数

简单的Python GUI界面框架