Pelo que entendi, um array sempre tem que ter seu tamanho definido (fixo) ao inicializá-lo.
Entretanto, para arrays multidimensionais encontrei uma referência a um tipo de array chamado de Jagged Array ou Ragged Array (https://en.wikipedia.org/wiki/Jagged_array e http://stackoverflow.com/documentation/java/99/arrays/496/multidimensional-and-jagged-arrays), em que apenas o tamanho da primeira dimensão é necessária:
int [][] a = new int[5][];
Não entendi como para arrays multidimensionais, o tamanho dos outros arrays (a partir da segunda dimensão) não precisam ser definidos, já que a alocação de espaço do array é definida no momento de sua inicialização e necessariamente deve ser fixo.
Sem definir o tamanho da dimensão 2 em diante, eu posso a qualquer tempo definir um novo array de qualquer tamanho para estas dimensões, algo como:
a[0] = new int[10];
a[0] = new int[15];
Inclusive, eu posso fazer algo como:
int[][][] a = new int[5][][];
a[0] = new int[10][];
a[1] = new int[15][];
Vocês podem explicar melhor isso, por favor?