Java方法声明中的方括号是什么意思?

时间:2013-03-23 10:06:38

标签: java context-free-grammar bnf

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

Java method declaration BNF:

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

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

  1. 有谁能举个例子?
  2. Java中的方法声明如上所示(泛型怎么样)?
  3. 我在哪里可以找到Java的完整和实际的BNF语法?

5 个答案:

答案 0 :(得分:6)

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

int method()[] { … }

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

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

答案 1 :(得分:3)

这是一个遗留构造。来自JLS(§8.4. Method Declarations):

  

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

MethodDeclarator:
     MethodDeclarator [ ]

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

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

最终参考是Java语言规范Chapter 18. Syntax

答案 2 :(得分:1)

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

缺少泛型,因为您链接的文档已有17年。

官方Java Language Specification使用以下特定语法:http://docs.oracle.com/javase/specs/jls/se7/html/jls-2.html#jls-2.4

我无法为Java找到真正的BNF语法,这种语法不如你的过时。

答案 3 :(得分:0)

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

Sting myMethodThatRetrunsStringArray[] {
//Implementation
// return a String array
}

答案 4 :(得分:0)

我们说}令牌位于{令牌的右侧,即使它出现在这个二维表示中,也在{令牌的左下方。这个关于使用左和右单词的约定允许我们说出例如二元运算符的右手操作数或赋值的左手边。

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

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