传递参数的不同方法:String args []或-D?

时间:2014-12-17 07:13:38

标签: java

我看到许多Java使用-D选项来传递一些参数。

更熟悉的方法是将带有String[] args的参数传递给main方法。

那么这两种方法之间的区别是什么?

ADD 1

是否有任何情况我们必须更喜欢一个到另一个?

4 个答案:

答案 0 :(得分:6)

-D开关用于设置系统属性,而不是将参数传递给程序。事实上,这两种方法甚至不会将信息发送到同一个地方:String[]参数被发送到您的程序,而交换机被发送到虚拟机(如果您的程序可以从中访问属性,它需要)。

除非您清楚知道需要命令行切换的原因,否则请使用参数。

答案 1 :(得分:1)

Program arguments是传递给应用程序的参数,可以通过main方法的"args" String数组参数访问。 VM arguments是诸如传递给Java S W解释器的系统属性之类的参数。

VM arguments在调用Java解释器(即' java')之后和Java类之前。 Program arguments继续学习Java课程。

VM arguments将传递给虚拟机,旨在指示V M to do something。您可以执行控制堆大小等操作。

Program args可通过args[]方法的main(String args[])

获取

答案 2 :(得分:1)

我同意上述两个答案,但其背后的主要思想是遵循 ==>假设您正在构建模块或功能等。现在你的模块有一些默认设置,这些默认设置可以被用户指定的值覆盖。现在这里是catch .. main(String [] args)的范围只是main函数。这些值只能在“main”函数中访问...假设您的模块在一个单独的线程中运行,那么您的模块将如何检索用户指定的值?因此,在这种情况下,您将使用-D开关传递参数。可以使用System.getProperty()方法访问这些值。您可以将它们视为用户指定的全局值。希望这有帮助

答案 3 :(得分:-1)

使用Maven一段时间之后,我想分享一下我的想法。

Maven本质上是一个插件执行框架。当我使用Maven时,我发现它经常通过-D选项将参数作为系统属性传递给插件。例如:

mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main -Dexec.args="70112"

mvn archetype:generate -DgroupId=org.sonatype.mavenbook -DartifactId=simple -Dpackage=org.sonatype.mavenbook -Dversion=1.0-SNAPSHOT

在上述命令中,exec:javaarchetype:generate是Maven plugin:goal部分。

假设我们不使用-D方法。然后我们必须将参数作为命令行参数传递,这意味着我们的主程序(在Maven场景中,它是mvn.bat必须包含所有参数的解析逻辑各种插件。每次创建新插件并需要新参数时,必须修改主程序以反映该情况。这是主程序和插件之间不需要的耦合。使用-D选项,插件可以从系统属性中自行选取 参数,这是从主程序中解除自身的快捷方式。