Convención de matriz Java: String args vs. String args

Actualmente estoy enseñando a estudiantes como tutor de convenciones de progtwigción. Les he dicho que pueden encontrar la mayoría de las convenciones en las Convenciones del Código de Oracle .

En mi último tutorial, un estudiante me preguntó si:

public static void main(String args[]) 

o

 public static void main(String[] args) 

está escrito por convención o si hay una diferencia. Nunca había visto la primera versión, así que estoy muy seguro de que la segunda es una convención. Pero no tengo una fuente para eso.

¿Puede darme una fuente (preferiblemente de Oracle, como la página que he vinculado anteriormente) que deja en claro cuál de las dos es convencional?

Equivalencia de ambas expresiones

Sé que ambas expresiones son equivalentes:

El JLS 7 , p. 292 estados:

 An array type is written as the name of an element type followed by some number of empty pairs of square brackets []. 

pero también en 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[][]; 

Pero esto no ayuda para la convención-quesiton.

Entonces son idénticos (no especificados, pero aquí hay una fuente ). Producen el mismo bytecode en un pequeño ejemplo, así que estoy muy seguro de que también son idénticos en praxis.

Esto no es de Oracle, pero creo que ayudará.

Es del libro SCJP Sun Certified Programmer de Kathy Sierra para Java 6

 int[] key; int key []; 

Al declarar una referencia de matriz, siempre debe colocar los corchetes de la matriz inmediatamente después del tipo declarado, en lugar de después del identificador (nombre de la variable). De esta forma, cualquiera que lea el código puede decir fácilmente que, por ejemplo, key es una referencia a un objeto int array, y no a una primitiva int.

Las Convenciones del Código de Oracle no lo establecen explícitamente, pero en todos los ejemplos usan los corchetes inmediatamente después del tipo declarado.

En su código de ejemplo (que debe considerarse autoritativo en este contexto) utilizan:

private Object[] instanceVar3;

También en la página que detalla la inicialización de variables tienen este ejemplo que demuestra los posibles problemas de poner los corchetes detrás del nombre de la variable:

int foo, fooarray[]; //WRONG!

Uno podría tener la tentación de hacer esto y pensar que uno declaraba varias matrices. Aunque esto es sintácticamente correcto (como señaló el brimborium en los comentarios), Oracle no puso las letras mayúsculas allí por nada. Es mejor estar seguro, claro y también escribir menos colocando los corchetes detrás del tipo para mostrar claramente lo que quiere declarar.

Hay un caso de uso oscuro para los corchetes finales:

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

Cuánto es útil, dejo que el lector sea el juez.

Una ventaja de usar [] inmediatamente después del tipo de matriz es: Si quiere declarar varias matrices, escriba como: int [] a, b, c; Pero si usa [] después del nombre de la matriz, entonces tenemos que usar [] después de cada variable de matriz como: int a [], b [], c [];