Java 数组约定:String[] args 与 String args[]

问题描述 投票:0回答:5

我目前正在作为导师教授学生编程约定。我告诉他们,他们可以在“Oracle 代码约定”中找到大多数约定。 在我的上一篇教程中,一位学生问是否:

public static void main(String args[])

public static void main(String[] args)

是按照惯例编写的,或者如果有差异的话。我以前从未见过第一个版本,所以我非常确定第二个版本是一个约定。但我没有这方面的资料。

你能给我一个来源(最好来自oracle,就像我上面链接的页面),明确说明两者中哪一个是约定?

两种表达式的等价性

我知道这两个表达式是等价的:

JLS 7

,第 17 页292 个州: An array type is written as the name of an element type followed by some number of empty pairs of square brackets [].

但也在第 12 页上。 293:

The [] may appear as part of the type at the beginning of the declaration, or as part of the declarator for a particular variable, or both. For example: byte[] rowvector, colvector, matrix[]; This declaration is equivalent to: byte rowvector[], colvector[], matrix[][];

但这对约定问题没有帮助。

所以它们是相同的(不是规格,但这里有

来源

)。 它们在一个小示例中生成相同的字节码,因此我非常确定它们在实践中也是相同的。

java coding-style conventions
5个回答
20
投票

来自 Kathy Sierra 的书

SCJP Sun Certified Programmer for Java 6

int[] key; int key [];

声明数组引用时,应始终将数组括号括起来
紧接在声明的类型之后,而不是在标识符(变量
姓名)。这样,任何阅读代码的人都可以轻松看出,例如,key 是
对 int 数组对象的引用,而不是 int 原语。


2
投票
Oracle 的代码约定

没有明确说明,但在所有示例中,它们在声明的类型之后立即使用括号。 在他们的示例代码(在这种情况下应该被认为是权威的)中,他们使用:

private Object[] instanceVar3;


还在详细介绍变量初始化的

页面上,他们有这个示例,演示了将括号放在变量名称后面可能出现的问题:

int foo, fooarray[]; //WRONG!

有人可能会尝试这样做,并认为正在声明多个数组。尽管这在语法上是正确的(正如 brimborium 在评论中指出的那样),Oracle 并没有无缘无故地将大写字母放在那里。为了安全、清晰并且减少键入,最好将括号放在类型后面以清楚地显示您想要声明的内容。 

后期括号有一个晦涩的用例:

0
投票
int x, xs[], xxs[][];

这个有多大用处,让读者来评判吧。
    

在数组类型之后立即使用 [] 的一个优点是: 如果你想声明多个数组,那么你可以这样写: int[] a,b,c; 但是如果在数组名称后使用 [],那么我们必须在每个数组变量后使用 [],如下所示: int a[],b[],c[];

0
投票


0
投票
中,第 4.8.3.2 节明确指出

方括号构成

类型
的一部分,而不是变量:

String[] args,而不是String args[]

我想如果你遵循谷歌的惯例,那么它显然是

String[] args

© www.soinside.com 2019 - 2024. All rights reserved.