Java 11 kurz angetestet

Da diese Woche Java 11 erschienen ist (wie kürzlich hier berichtet), konnte ich es nicht lassen, ein klein wenig damit herumzuspielen.

Insbesondere war ich neugierig auf JEP-330, also der Möglichkeit, Java-Dateien direkt auszuführen zu können, ohne sie vorher kompilieren zu müssen. Voraussetzung ist, dass sich das komplette Programm innerhalb einer einzigen Java-Datei befindet.

Da ich das neue JDK nicht extra auf meinem Windows-Rechner installieren wollte, und außerdem die „Shebang“-Funktionalität für UNIX/Linux-Systeme testen wollte, habe ich kurzerhand einen Docker-Container mit OpenJDK 11 gestartet:

Anschließend habe ich die folgende Datei namens Hello.java erstellt:

Anmerkungen:

  • Die Klasse heißt HelloJava11, im Unterschied zum Dateinamen Hello.java.
  • Die Klasse ist nicht public.
  • In Zeile 11 verwende ich ein weiteres neues Feature von Java 11, und zwar var in der Variablendeklaration eines Lambdas (JEP-323).

Diese Datei habe ich in den Dockercontainer kopiert:

Im Anschluss konnte ich die Datei direkt im Dockercontainer ausführen:

Und voilà, es hat geklappt, der String „Hello Java 11“ wurde ausgegeben. Trotz abweichendem Dateinamen und nichtöffentlicher Klasse!

Beim Anzeigen der Dateien im Container mit ls fällt auf, dass keine .class-Datei angelegt worden ist. Das bedeutet, dass die Klasse lediglich im Speicher kompiliert und ausgeführt wurde.

Nun noch ein kurzer Test der „Shebang“-Funktionalität. Dazu erstellte ich die folgende Shell-Scriptdatei namens hello_java.sh , die unter der „Shebang“-Zeile (Zeile 1) dasselbe Programm beinhaltet:

Datei in den Docker-Container kopieren…

… und innerhalb des Containers starten:

Auch das hat funktioniert, wie man an der Ausgabe sieht.

So kann man recht schnell ein Java-Programm ohne den Zwischenschritt des Kompilierens zum Laufen bringen, was vor allem Anfängern den Einstieg erleichtern dürfte.

Oder man „scriptet“ mal kurz Funktionalität in der Sprache die man am besten beherrscht, sollte dies zufüllig Java sein ;-) Wobei „scriptet“ bewusst in Anführungszeichen steht, denn die Datei wird nicht wie in herkömmlichen Skriptsprachen interpretiert, sondern im Hintergrund ins .class-Format kompiliert, das letztendlich von der JVM ausgeführt wird.

 

 

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*Pflichtfelder

*