Toilet Paper 109

Probieren geht über Studieren

Problem

Die Funktionalität der Java SE Bibliothek ist sehr gut in der API-Dokumentation beschrieben. Trotzdem bleibt für manche Methoden die Frage, wie der Rückgabewert für ganz konkrete Parameterwerte aussieht. Die hieraus resultierende Unsicherheit wird gerne durch einfaches Ausprobieren beseitigt. Die benötigte Laufzeitumgebung wird flink mit einer static void main (String[] args) Methode zur Verfügung gestellt. Jetzt noch den Testcode einfügen, compilieren und ausführen, Ergebnis bewerten. Je nachdem, wie schnell man zu dem richtigen Ergebnis kommt, muss man die 'Testcode ändern, compilieren, ausführen, bewerten'-Schleife mehr oder weniger oft durchlaufen, bevor man die main-Methode samt Testcode wieder löschen kann. Klingt aufwendig? Ist es auch.

Lösung

Um hier Abhilfe zu schaffen, enthält das JDK seit der Freigabe von Java 9 im Herbst 2017 die JShell. Mit Hilfe dieser Read-Evaluate-Print Loop (kurz REPL) können Deklarationen, Ausdrücke und Statements evaluiert werden. Die Eingaben werden unmittelbar ausgewertet und die Ergebnisse angezeigt.

Wenn also ein JDK ab der Version 9 installiert und JAVA_HOME gesetzt ist, kann die JShell gestartet werden:

$ jshell
|  Welcome to JShell -- Version 11.0.1
|  For an introduction type: /help intro

jshell>

Für dich ist die JShell uninteressant, weil in deinem Projekt Java 8 verwendet wird? Viele Klassen und Methoden sind über mehrere Java-Versionen unverändert geblieben. Diese Klassen bzw. Methoden können mit einer JShell ohne Weiteres getestet werden.

Beispiel

jshell> import java.text.SimpleDateFormat

jshell> new SimpleDateFormat("yyyy-mm-dd hh:MM").format(new Date())
$3 ==> "2019-39-30 06:01"            //--> whoops, something's wrong

jshell> new SimpleDateFormat("yyyy-MM-dd hh:mm").format(new Date())
$5 ==> "2019-01-30 06:39"            //--> ahhh, now it fits
JShell ToiletPaper

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.