Ouais non, j'ai vérifié, il ne lit pas que des expressions, il lit :
- des expressions, avec affichage du résultat
- des instructions, et il les exécute. Notamment des déclarations de variable
- des déclarations de classe et méthodes
- des commandes internes de son shell
Après déclaration d'une variable/classe/méthode, on peut la redéclarer.
On peut déclarer des classes et méthodes qui font appel à des classes, méthodes ou variables qui n'existent pas ou qui ne sont pas du bon type. Auquel cas on obtient une liste, chaque fois qu'on est dans cette situation, de ce qu'on doit faire pour réparer la situation (déclarer telle variable, changer son type...)
Bref, le shell REPL lui-même n'est pas du Java à proprement parler mais il fait son boulot de permettre de jouer avec la syntaxe Java.