每当你在一个类中声明main方法时,你总是必须做一个名为"args"的String
数组。有什么意义?除非我生活在岩石下,否则Java中的命令行参数几乎不再使用了。当我试着运行这个时…
//this program won't compile
public class SomeClass {
public static void main(){
System.out.println("This text will never be displayed :(");
}
}
输出以红色文本显示:
如果有人告诉我为什么需要在main方法中输入该参数,作为Java新手程序员的我将非常感激。错误:在类 someeclass 中找不到主方法,请将主方法定义为:
public static void main(String[] args)
因为这是执行Java类时调用的主方法的签名。需要有一些约定哪个方法将被执行。按照惯例,它是
public static void main(String[] args) method
是的,你确实生活在岩石下,有很多情况下使用命令行参数。为什么不使用它们呢?
你可以问:为什么需要它?为什么不选择其他主要方法呢?答案是,增加复杂性没有任何好处。就像现在一样,main函数看起来与众不同。如果你看一下它,你就知道它会被调用。如果要调用任何main,您必须总是问自己:我正在查看的是要调用的main,还是这个类中有另一个优先调用的main ?
简短的回答:因为Java就是这样的。
命令行参数一直在使用,但由于启动脚本或程序在服务器上运行等原因,您并不总是看到它们。
也就是说,很多时候命令行参数是-D
类型的,在到达main
之前被JVM吞掉。但这取决于你在做什么。
Java应用程序可以从命令行接受任意数量的参数。这允许用户在启动应用程序时指定配置信息。(来自命令行参数),正如其他人在这里所说的那样,它就是这样!
看在上帝的份上,请不要说如果我不需要这个,没有人需要这个!:)
因为
- 命令行参数仍然被使用,甚至被许多 UI程序使用(你知道Microsoft Outlook支持一些非常方便的命令行参数吗?)*;和:
- 这就是Java的工作原理(TM)。除此之外,它还降低了代码(通过禁止多个表单和可能的意外阴影)和运行时(通过不需要找出要调用的"哪个main")的复杂性。允许不带"args"的二级表单只会增加太少的功能。
快乐编码…
*是的,Outlook不是Java。然而,如果Outlook有命令行参数,那么,它们一定还是有价值的——这是夸张的;-)
几乎每个处理打开读取文件的UI程序都允许通过命令行参数指定打开哪个文件(Gimp, Notepad, Firefox,等等)。除此之外,这允许在Windows资源管理器和类似的项目上集成"双击打开"。
我实际上不知道为什么需要它,除了说它是一个语法约定。与Lisp/Scheme中的函数(defined function-name())或Ruby中的do..end块相同,Java Main函数的语法是String[] args。
至于不使用命令行参数,这完全取决于程序。完全。我一直在用java写程序,使用命令行参数;这只是一个你想要完成的事情的问题。
我能想到的一种情况是,当您希望为您的软件提供命令行驱动的界面以及GUI时。一个例子是Android工具,它们都有控制台驱动的界面。
命令行参数支持在编程语言中基本上是标准的。即使在这个gui时代,也有各种隐藏的方式来运行带有命令行参数的程序。我知道Windows为高级用户提供了快捷配置,例如,您可以在其中使用一组给定的命令行参数运行程序。
Java还强制类型,并通过扩展函数签名(如果您不知道这些是什么,请在Google上查找)。main函数应该接受一个string数组——如果你定义的main函数不匹配那个参数签名(1个参数,string数组),那么它会导致不兼容。
Java支持函数重载(可以用不同的参数多次定义相同的函数名)。为了找到要调用的函数,Java接受输入参数类型,并寻找接受匹配参数的可应用的已定义函数。
当程序运行时,Java专门查找一个名为main的函数,它有一个参数(String[])。您的程序没有定义带有该参数规范的main函数,因此查找失败并显示错误消息。