4

Java 中方法声明的语法如下所示:

Java方法声明BNF:

method_declaration 
    ::= 
    { modifier } type identifier 
    "(" [ parameter_list ] ")" { "[" "]" } 
    ( statement_block | ";" ) 

我想知道方括号是什么意思。

  1. 谁能给我一个例子?
  2. Java 中的方法声明是否像上面那样(泛型呢)?
  3. 在哪里可以找到适用于 Java 的完整且实际的 BNF 语法?
4

5 回答 5

6

方括号表示该方法返回一个数组。例如,您可以编写一个返回 int 数组的方法:

int method()[] { … }

不过,很多人不熟悉这种语法,最好避免使用。

您可以在此处找到 java 7 的完整语法:http: //docs.oracle.com/javase/specs/jls/se7/html/jls-18.html

于 2013-03-23T10:11:28.670 回答
3

这是一个遗留结构。从 JLS(§8.4. 方法声明):

为了与旧版本的 Java SE 平台兼容,允许返回数组的方法声明将(部分或全部)空括号对放置在形参列表之后,这些空括号对构成数组类型的声明。以下过时的产品支持这一点,但不应在新代码中使用。

MethodDeclarator:
     MethodDeclarator [ ]

因此,它是有效的 Java(尽管我从未见过在实际代码中使用过这种结构)。

至于你引用的语法,它似乎不完整。例如,它似乎不包含可选throws子句。此外,它只允许一对方括号,method_declaration而官方语法允许任意数量的这样的对。

权威参考是 Java 语言规范,第 18 章语法

于 2013-03-23T10:18:28.670 回答
1

{ ... }代表0..*(零次或多次)

由于您链接的文档已有 17 年历史,因此缺少泛型。

官方Java 语言规范使用这种特殊语法:http ://docs.oracle.com/javase/specs/jls/se7/html/jls-2.html#jls-2.4

我找不到真正的 Java BNF 语法,它比你的更过时。

于 2013-03-23T10:15:16.260 回答
0

括号用于作为数组的返回类型,例如:

Sting myMethodThatRetrunsStringArray[] {
//Implementation
// return a String array
}
于 2013-03-23T10:13:00.950 回答
0

我们说 } 记号在 { 记号的右侧,尽管它在这个二维表示中出现在 { 记号的下方和左侧。这种关于使用单词 left 和 right 的约定允许我们谈论例如二元运算符的右侧操作数或赋值的左侧。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-2.html

http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html

于 2013-03-23T10:13:46.777 回答