什么是正确的Java main()方法参数语法?

jam*_*mes 5 java syntax

这些方法之间是否存在功能差异?

public static void main(String[] args) { }

public static void main(String args[]) { }
Run Code Online (Sandbox Code Playgroud)

编辑(从其他贡献者添加此语法):

public static void main(String... args) { }
Run Code Online (Sandbox Code Playgroud)

sta*_*lue 13

不,但首先是首选的风格.

编辑: 另一种选择是

public static void main(String... args)
Run Code Online (Sandbox Code Playgroud)

这还允许调用者使用varargs语法.

  • (并且`main(String ... args)`只是怪异,虽然至少语法有一些有效的用例.) (4认同)

Sea*_*oyd 10

不同的数组表示法

符号

String args[]
Run Code Online (Sandbox Code Playgroud)

对C程序员来说只是一个方便,但它与这个表示法相同:

String[] args
Run Code Online (Sandbox Code Playgroud)

以下是Sun Java教程所说的内容:

您还可以在数组名称后面放置方括号:

float anArrayOfFloats[]; // this form is discouraged

但是,公约不鼓励这种形式; 括号标识数组类型,并应显示类型名称.

参考: Java教程>数组

VARARGS

BTW,一个鲜为人知的事实是主要方法也支持varargs,所以这也没关系:

public static void main(String ... args) { }
Run Code Online (Sandbox Code Playgroud)

原因是varargs方法在内部与支持指定类型的单个数组参数的方法相同.这样就不会编译:

public static void main(final String... parameters){}
public static void main(final String[] parameters){}
// compiler error: Duplicate method main(String[])
Run Code Online (Sandbox Code Playgroud)

参考: Java教程>任意数量的参数


Viv*_*ath 7

没有区别,但第一个是按标准.


Fra*_*ank 7

其他答案是正确的,因为它没有任何区别.我再补充两点:

String ... args 现在也有效,在这种情况下再次没有区别.

当您定义多个变量时,放置括号的不同选项会产生影响.在下面的示例中,变量a不是String数组,而是b一个并且c是字符串数组的数组.

String a, b[], c[][];

但是,我必须建议不要将此样式用于您的代码,因为它很快就会变得非常混乱.例如,String [] b, c[];对于bc以上都意味着相同,但特别是对于c这是不明显的.


Cri*_*ian 6

不,他们没有区别.虽然......我过去常常使用第二种方式,直到我的女朋友威胁要打破,如果我继续这样做(不是开玩笑).所以现在我更喜欢第一种方式,我觉得它看起来好多了.