Je vais essayer de répondre à la question pourquoi: La Java tableau est très simple et rudimentaire par rapport à des classes comme ArrayList, qui sont plus dynamiques. Java veut savoir au moment de la déclaration de combien de mémoire à allouer pour le tableau. Une ArrayList est beaucoup plus dynamique et la taille de celui-ci peut varier au fil du temps.
Si vous initialisez votre tableau avec la longueur de deux, et plus tard, il s'avère que vous avez besoin d'une longueur de trois, vous avez à jeter ce que vous avez, et greate un tout nouveau tableau. Par conséquent, le mot clé new.
Dans les deux premiers exemples, vous dites au moment de la déclaration de combien de mémoire à allouer. Dans le troisième exemple, le nom du tableau devient un pointeur vers rien du tout, et à cet effet, lorsqu'il est initialisé, vous devez créer explicitement un nouveau tableau pour allouer la quantité de mémoire.
Je dirais que (et si quelqu'un sait mieux, merci de me corriger) le premier exemple
AClass[] array = {object1, object2}
signifie en fait
AClass[] array = new AClass[]{object1, object2};
mais ce que le Java concepteurs a été de faire de façon plus rapide à écrire, si vous créez le tableau au moment de la déclaration.
Les solutions de contournement proposées sont bonnes. Si le temps ou l'utilisation de la mémoire est essentielle à l'exécution, d'utiliser des tableaux. Si ce n'est pas essentiel, et que vous voulez le code qui est plus facile à comprendre et à travailler avec, utiliser ArrayList.