JEP 445, Unnamed Classes and Instance Main Methods (Preview)
Contexte
L’objectif de cette JEP est de faciliter l’apprentissage du langage Java pour les étudiants, en enlevant certaines "cérémonies" du langage.
Cela permet à l’étudiant d’appréhender plus facilement le langage et d’ajouter les fonctionnalités et la complexité au fûr et à mesure de son apprentissage.
Pour rappel, un exemple de premier programme correspond au code suivant :
public class Bonjour {
public static void main(String[] args) {
System.out.println("Bonjour à tous !");
}
}
Exemple de syntaxe qui peut dérouter l’étudiant
-
Déclaration d’une classe publique avec le mot réservé
class
-
Utilisation de
String[]
pour les paramètres -
Le modificateur
static
est généralement troublant au début.
Pour autant, il ne faut pas avoir
-
Un langage différent pour l’apprentissage
-
Un ensemble d’outils différents pour la construction ces programmes
Principe
Le premier principe est de ne pas obliger que la méthode main
soit statique (static
). C’est à dire qu’il est possible d’avoir une simple méthode d’instance. (d’où le nom : Instance Main Methods)
De même, le terme public
n’est plus nécessaire et le paramètre String[]
devient optionnel.
Le second principe est de considérer une classe sans nom qui sera créé automatiquement (d’où le nom : Unnamed Classes).
Cela donne le code suivant comme résultat :
void main() {
System.out.println("Bonjour à tous !");
}
Exécution
Nous pouvons passer par le compilateur, puis par la JVM. N’oubliez pas que c’est une fonctionnalité en aperçu, donc il faudra l’option --enable-preview
L’utilisation de l’option --enable-preview
demandera de préciser le niveau de la source ou de la release.
Nous avons avec le schéma classique avec le compilateur
javac --release 21 --enable-preview Bonjour.java
java --enable-preview Bonjour
Depuis la JEP 330 (Launch Single-File Source-Code Programs), disponible depuis le JDK 11, nous pouvons passer par une et une seule commande:
java --source 21 --enable-preview Bonjour.java
Dans les deux cas, nous obtenons l’exécution suvante :
Note: Main.java uses preview features of Java SE 21.
Note: Recompile with -Xlint:preview for details.
Bonjour à tous!
Détails sur le lancement
Lors du lancement d’un programme, la méthode m̀ain
exécutée est choisie parmi les méthodes suivantes en respectant cet ordre :
-
static void main(String[])
-
static void main()
-
void main(String [])
-
void main()
La méthode doit être déclarée comme une méthode non privée (c’est à dire avec la visibilité publique, protégée ou package).
Détails sur la classe sans nom
Il est possible de définir des variables. Ils seront traduits par attributs de la classe.
String bonjour = "Bonjour à tous!";
void main() {
System.out.println(bonjour);
}
De même, pour les fonctions.
String bonjour() { return "Bonjour à tous!"; }
void main() {
System.out.println(bonjour());
}
Moteur de recherche
"Eduquer, ce n'est pas remplir des vases mais c'est d'allumer des feux." - Michel Montaigne
Billets récents
- Eclipse plante systématiquement sous Debian (et autres distribution Linux)
- JEP 463, Implicitly Declared Classes and Instance Main Methods (Second Preview)
- Debian - Montée de version de Debian 11 (Bullseye) à Debian 12 (Bookworm)
- JEP 451, Prepare to Disallow the Dynamic Loading of Agents
- JEP 444, Virtual Threads