我目前正在教学生作为导师编程惯例。我告诉他们,他们可以在the 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[][];
但这对于会议问题没有帮助。
所以它们是相同的(不是规格,但这里是source)。 它们在一个小例子中产生相同的字节码,所以我非常确定它们在实践中也是相同的。
答案 0 :(得分:19)
这不是来自甲骨文,但我认为这会有所帮助。
来自Kathy Sierra的书 SCJP Sun认证程序员Java 6
int[] key;
int key [];
声明数组引用时,应始终放置数组括号 紧接在声明的类型之后,而不是在标识符之后(变量 名称)。这样,任何阅读代码的人都可以很容易地说出,例如,密钥是一个 引用int数组对象,而不是int原语。
答案 1 :(得分:2)
Oracle's Code Conventions没有明确说明它,但在所有示例中,它们都在声明的类型之后立即使用括号。
在他们的示例代码中(在此上下文中应该被认为具有权威性),他们使用:
private Object[] instanceVar3;
同样在page detailing the initialization个变量上,他们有这个例子,演示了将括号放在变量名后面的可能问题:
int foo, fooarray[]; //WRONG!
人们可能会想要这样做,并认为有人正在声明几个阵列。虽然这在语法上是正确的(正如评论中指出的brimborium),甲骨文没有把大写字母放在那里。通过将支架放在类型后面以清楚地显示您想要声明的内容,可以更安全,更清晰并且更少打字。
答案 2 :(得分:0)
后期括号有一个模糊的用例:
int x, xs[], xxs[][];
这多少有用,我让读者成为法官。
答案 3 :(得分:0)
在数组类型之后立即使用[]的一个优点是: 如果你想声明多个数组,那么你就像这样写: int [] a,b,c; 但是如果在数组名后面使用[],那么我们必须在每个数组变量之后使用[],如: int a [],b [],c [];