【问题标题】:Java array convention: String[] args vs. String args[]Java 数组约定:String[] args 与 String args[]
【发布时间】:2012-10-21 22:18:12
【问题描述】:

我目前正在以导师的身份教授学生编程约定。我告诉他们,他们可以在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 []. 

但也在第页。 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)。 它们在一个小例子中产生相同的字节码,所以我很确定它们在实践中也是相同的。

【问题讨论】:

  • 顺便说一句,我通常使用public static void main(String... args) ;)
  • @JBNizet OP 询问约定而不是正确的语法。
  • @assylias 不,我不认为这是链接问题的重复。
  • @Puce:如果两者都是正确的,但每个人都只使用一种公认的语法,这是事实上的约定,不是吗?这就是约定的定义。
  • @brimborium:来自dictionary.reference.com/browse/convention5。通过使用建立的规则、方法或实践。每个人都使用这个符号,所以这是一个约定。

标签: java coding-style conventions


【解决方案1】:

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

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

int[] key;
int key [];

当声明一个数组引用时,你应该总是把数组括号放在 紧跟在声明的类型之后,而不是在标识符之后(变量 姓名)。这样,任何阅读代码的人都可以轻松判断,例如,key 是 引用一个 int 数组对象,而不是一个 int 原语。

【讨论】:

  • +1,我也认为数组括号属于类型而不是变量名。
【解决方案2】:

Oracle's Code Conventions 没有明确声明它,但在所有示例中,它们在声明的类型之后立即使用括号。

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

private Object[] instanceVar3;

在变量的page detailing the initialization 上,他们也有这个例子,展示了将括号放在变量名后面可能出现的问题:

int foo, fooarray[]; //WRONG!

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

【讨论】:

  • “错误的语法”是什么意思?编译器没有问题......否则很好的答案。
  • @brimborium:感谢您指出这一点,我更正了答案。由于甲骨文添加的评论,我确实认为这是不正确的。
  • 你说得对,//WRONG! 具有误导性。它应该是//AVOID! 或类似的东西。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • OTOH - Sun 风格指南建议不要使用多个声明。
    • @StephenC 你能给出那个风格指南的链接吗?那会很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2015-09-06
    • 2018-04-26
    相关资源
    最近更新 更多