Java数组约定:String args与String args

我目前正在教学生作为导师编程惯例。 我告诉他们,他们可以在Oracle Code Conventions中找到大多数约定。

在我上一篇教程中,一名学生询问:

public static void main(String args[]) 

要么

 public static void main(String[] args) 

是按惯例书写的,或者是否存在差异。 我之前从未见过第一个版本,所以我非常确定第二个版本是一个约定。 但我没有这个来源。

你能给我一个来源(最好是来自oracle,就像我上面链接过的页面一样),这清楚地说明了哪一个是常规的?

两种表达方式的等价性

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

JLS 7 ,p。 292州:

 An array type is written as the name of an element type followed by some number of empty pairs of square brackets []. 

而且还在p。 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[][]; 

但这对于会议问题没有帮助。

所以它们是相同的(不是规格,但这是一个来源 )。 它们在一个小例子中产生相同的字节码,所以我非常确定它们在实践中也是相同的。

这不是来自甲骨文,但我认为这会有所帮助。

它来自Kathy Sierra的书籍SCJP Sun认证程序员Java 6

 int[] key; int key []; 

声明数组引用时,应始终将数组括号放在声明的类型之后,而不是在标识符(变量名称)之后。 这样,任何阅读代码的人都可以很容易地告诉我,例如,key是对int数组对象的引用,而不是int原语。

Oracle的代码约定没有明确说明它,但在所有示例中,它们在声明的类型之后立即使用括号。

在他们的示例代码中(在此上下文中应该被认为是权威的),他们使用:

private Object[] instanceVar3;

另外在详细说明变量初始化的页面上,他们有这个例子,演示了将括号放在变量名后面的可能问题:

int foo, fooarray[]; //WRONG!

人们可能会想要这样做,并认为有人正在声明几个arrays。 虽然这在语法上是正确的(正如评论中指出的brimborium),甲骨文没有把大写字母放在那里。 通过将支架放在类型后面以清楚地显示您想要声明的内容,可以更安全,更清晰并且更少打字。

对于后期括号,有一个模糊的用例:

 int x, xs[], xxs[][]; 

多少有用,我让读者成为法官。

在数组类型之后立即使用[]的一个优点是:如果要声明多个数组,那么您可以像:int [] a,b,c; 但是如果在数组名后面使用[],那么我们必须在每个数组变量之后使用[],如:int a [],b [],c [];