· Tarek El-Sibay · Development  · 3 min read

Java 24: Anfängerfreundlicher mit Simple Source Files

Java 24 führt ein spannendes neues Preview-Feature ein, das die Sprache für Anfänger zugänglicher macht und gleichzeitig ihre Leistungsfähigkeit für erfahrene Entwickler beibehält. Mit JEP 495 wird Java zugänglicher für Anfänger durch Simple Source Files und Instance Main Methods

Java 24 führt ein spannendes neues Preview-Feature ein, das die Sprache für Anfänger zugänglicher macht und gleichzeitig ihre Leistungsfähigkeit für erfahrene Entwickler beibehält. Mit JEP 495 wird Java zugänglicher für Anfänger durch Simple Source Files und Instance Main Methods

Die zwei Gesichter von Java

Java zeichnet sich besonders bei der Entwicklung großer, komplexer Anwendungen aus, die über Jahre hinweg von großen Teams gepflegt werden. Die Sprache bietet umfangreiche Funktionen für Datenkapselung, Wiederverwendbarkeit, Zugriffskontrolle und Modularität. Diese Eigenschaften ermöglichen es, Komponenten sauber zu strukturieren und unabhängig voneinander zu entwickeln.

Gleichzeitig soll Java auch als Einsteigersprache genutzt werden. Einsteiger beginnen aber nicht mit komplexen Teamprojekten, sondern mit kleinen, eigenständigen Programmen und alleine. Sie brauchen zunächst nur die einfachsten Grundlagen der Programmierung: Variablen, Kontrollfluss und einfache Unterprogramme.

Das Problem mit “Hello World”

Die für große Systeme ausgelegten Features erschweren Neueinsteigern den Start. Jahrelang erforderte selbst das einfachste Java-Programm erheblichen Boilerplate-Code. Hier das für Einsteiger beliebte Hello World

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}

Dieses scheinbar simple Programm führt bereits mehrere fortgeschrittene Konzepte ein, die Anfänger zunächst nicht verstehen müssen:

  • Klassen und objektorientierte Programmierung
  • Zugriffsmodifikatoren (public)
  • Statische Methoden
  • Kommandozeilenargumente
  • System-Ausgabeströme

Der neue Ansatz

Mit JEP 495 kann dasselbe Programm nun einfach so geschrieben werden:

void main() {
println("Hello, World!");
}

Diese vereinfachte Syntax erreicht mehrere Dinge:

  • Keine explizite Klassendeklaration mehr nötig
  • Entfernt die Anforderung für den static-Modifikator
  • Macht den String[] args Parameter optional
  • Importiert automatisch gängige I/O-Methoden wie println()

Hauptfunktionen

1. Vereinfachte main Methode

Das JEP lockert die traditionellen Anforderungen für main-Methoden. Sie müssen nicht mehr:

  • public sein
  • static sein
  • einen String[] Parameter haben

2. Einfache Quell-Dateien

Dateien mit Methoden und Feldern die nicht innerhalb einer class Definition sind, erzeugen nun automatisch eine implizite Klasse, sofern sie eine main Methode besitzt. Diese Klasse

  • ist final und erweitert Object
  • befindet sich im unbenannten Paket
  • hat einen Standard-Konstruktor ohne Parameter

Hierbei muss man noch beachten, dass man die impliziten Klassen nicht mittels new instanziieren kann.

3. Vereinfachte Konsolen-E/A

Gerade für Anfänger ist die Arbeit mit der Konsole in Java gewöhnungsbedürftig. Um dies zu vereinfachen, werden fünf Kernmethoden für die Konsoleninteraktion automatisch importiert:

  • println(Object)
  • println()
  • print(Object)
  • readln(String prompt)
  • readln()

4. Automatischer Import vieler Utility-Klassen

Alle öffentlichen Klassen aus dem java.base-Modul sind automatisch verfügbar, wodurch häufige Imports wie java.util.List oder java.io.BufferedReader entfallen.

Warum das wichtig ist

Dieses Feature stellt eine bedeutende Änderung in Javas Ansatz für Anfänger dar. Statt Neueinsteiger zu zwingen, komplexe Programmierkonzepte von Anfang an zu verstehen, können sie sich zunächst auf die Grundlagen konzentrieren:

  • Grundlegende Programmierkonstrukte
  • Variablen und Kontrollfluss
  • Einfache Ein-/Ausgabeoperationen
  • Methodenaufrufe und Parameter

Mit wachsendem Verständnis können sie nach und nach fortgeschrittenere Features wie Klassen, Pakete und Module einbauen.

Mit dem Code wachsen

Einer der wichtigsten Aspekte dieses Features ist, dass es einen sanften Weg zum Wachstum bietet. Wenn Programme komplexer werden, können Entwickler schrittweise fortgeschrittenere Konzepte einführen. Eine einfache Quelldatei kann problemlos zu einer traditionellen klassenbasierten Datei weiterentwickelt werden, ohne ihre Kernfunktionalität zu ändern.

Verwendung des Features

Da Java 24 Stand heute noch nicht veröffentlicht wurde, kann man, sofern man sich den early-access build nicht installieren will, das Feature (bzw. das Vorgänger JEP477) in Java 23 ausprobieren. Da es sich um ein Preview-Feature handelt, muss es explizit aktiviert werden. Im Folgenden wird angenommen, dass der Code-Schnipsel in der Datei HelloWorld.java gespeichert ist.

Terminal window
java --enable-preview HelloWorld.java

Oder mittels Docker und einem echten Java 24:

Terminal window
# starten eines Containers mit jdk24
docker run --rm -it -v .:/workspace openjdk:24-jdk-bookworm bash
# innerhalb des Containers
cd workspace
java --enable-preview HelloWorld.java

Ausblick

Obwohl es sich derzeit um ein Preview-Feature in JDK 24 handelt, zeigt es Javas Engagement für Weiterentwicklung bei gleichzeitiger Rückwärtskompatibilität. Es bietet einen einladenden Einstiegspunkt für neue Programmierer und behält dabei alle Stärken und Flexibilität bei, die Java erfolgreich gemacht haben.

Back to Blog

Related Posts

View All Posts »
Flexible Konstruktorkörper in Java 24

Flexible Konstruktorkörper in Java 24

Java 24 bringt mit flexiblen Konstruktorkörpern eine lang erwartete Verbesserung in der Objekterstellung. Dieses Feature, nun in der dritten Preview, verspricht robustere und lesbarere Konstruktoren und steht möglicherweise kurz vor der Finalisierung.

Java 24: Primitive Types in Patterns, instanceof and switch

Java 24: Primitive Types in Patterns, instanceof and switch

Java 24 erweitert das Pattern Matching mit Unterstützung primitiver Typen und revolutioniert damit die Typisierung und Verarbeitung von Daten. Entwickler können nun Primitive in instanceof, switch und Patterns verwenden und gewinnen dadurch mehr Flexibilität und Lesbarkeit bei Typumwandlungen.