带有方括号语法的Java函数定义


问题内容

在寻找的源代码中ByteArrayOutputStream,我看到了以下功能:

public synchronized byte toByteArray()[] {
    return Arrays.copyOf(buf, count);
}

该语法在哪里记录?我的意思[]是功能的前面。这与声明一个常规数组相同,在该常规数组中括号可以位于数组名称之后或之前,但是在这种情况下,括号可以位于函数名称之后?

String[] args;

VS

String args[];

编辑:2018-05-22

我在这里发现了这种疯狂语法的更多用法:关于Java的十件事

#3是他们提到可以利用上述语法的所有方式的地方


问题答案:

JLS第8.4节中

MethodDeclarator:
    Identifier ( [FormalParameterList] ) [Dims]

返回数组的方法的声明允许将表示数组类型的部分或全部括号对放在形式参数列表之后。支持此语法以与Java编程语言的早期版本兼容。强烈建议在新代码中不要使用此语法。