@Ted Hoppの回答と合わせて読んでください。
あなたが与えた例が有効なJavaではない理由を説明したいだけです。
int[][] a = {{1,2,3}}
これは (現在) 有効です (最後のセミコロンがないことを除けば)
int[][][] b = {{1,2,3}}
配列初期化子が 2 次元配列を指定しており、それを 3 次元配列に割り当てているため、これは無効です。
int[][][][] c = {{1,2,3}}
配列初期化子が 2 次元配列を指定し、それを 4 次元配列に割り当てているため、これは無効です。
実際、これにより、これらの場合に何が起こるかについての懸念が解消されるはずです。答えは何もありません。コードは違法です。宣言された配列型と初期化子の次元は同じでなければなりません。
このように作成された長方形配列(またはN次元の類似物)に関して。
int[][][][] d = new int[4][5][6][7];
各次元の長さは、初期化子から簡単に読み取ることができます。つまり、4x5x6x7
4 次元行列に相当する Java を宣言しています。これはコードでも実行できます。
System.out.println(d.length); // prints 4
System.out.println(d[0].length); // prints 5
System.out.println(d[0][0].length); // prints 6
System.out.println(d[0][0][0].length); // prints 7
不規則な配列でもこれを行うことができます...ただし、さまざまなサブ配列の長さが均一ではないことがわかります。むしろ、それぞれのサブ配列が初期化子にあった大きさなどに依存します。
これは、私が読んだすべての教科書に、2 次元配列以上の配列が記述されていないためです。
教科書の著者を弁護するために:
実際の Java プログラムが 2 次元を超える配列を使用することは珍しく、{{{...}}}
スタイル初期化子を使用して配列を初期化することはさらに異常です。
実際、1 次元および 2 次元の配列に使用される同じパターンは、自然で明白な方法でより高次元の配列に拡張されます。(または、少なくとも、ほとんどの Java プログラマーにとってそれは自然で明白なことです...)
したがって、教科書の余分なページを使って「明白」で「めったに使用されない」ものを説明することは、正当化するのが困難です。
そして FWIW、典型的な Java の教科書は、ラベルへのブレーク、初期化ブロック、変数名の「$」、Java の名前解決規則など、Java 言語の他のあいまいなコーナーについても言及していません。これはおそらく A GOOD THING 1です。
1 - うん... 「1066 とそのすべて」をもう一度読んでいます。