22

我目前正在以导师的身份教授学生编程约定。我告诉他们,他们可以在Oracle 代码约定中找到大多数约定。

在我的上一个教程中,一个学生问:

public static void main(String args[])

或者

public static void main(String[] args)

是按惯例写的,或者如果有区别。我以前从未见过第一个版本,所以我很确定第二个是约定。但我没有那个来源。

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

两个表达式的等价

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

JLS 7,页。292 条状态:

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

但也在第。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[][];

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

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

4

4 回答 4

20

这不是来自 Oracle,但我认为它会有所帮助。

它来自 Kathy Sierra 的书SCJP Sun Certified Programmer for Java 6

int[] key;
int key [];

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

于 2012-11-01T10:35:49.280 回答
2

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

在他们的示例代码(在这种情况下应该被认为是权威的)中,他们使用:

private Object[] instanceVar3;

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

int foo, fooarray[]; //WRONG!

有人可能会想这样做,并认为自己声明了几个数组。尽管这在语法上是正确的(正如 brimborium 在评论中指出的那样),但甲骨文并没有将大写字母放在那里。通过将括号放在类型后面以清楚地显示您想要声明的内容,最好是安全,清晰并且减少类型。

于 2012-11-01T10:40:26.533 回答
0

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

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

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

于 2012-11-01T10:41:56.857 回答
0

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

于 2012-11-01T11:01:52.520 回答