Java - Modulsystem
Einführung in das Java-Modulsystem
Hallo, aspirierende Java-Programmierer! Heute werden wir auf eine aufregende Reise in die Welt des Java-Modulsystems aufbrechen. Als euer freundlicher Nachbar und Informatiklehrer bin ich hier, um euch Schritt für Schritt durch dieses faszinierende Thema zu führen. Keine Sorge, wenn ihr neu bei der Programmierung seid – wir beginnen mit den Grundlagen und arbeiten uns gemeinsam nach oben!
Was ist ein Modul?
Lassen Sie uns mit einer einfachen Analogie beginnen. Stellt euch vor, ihr baut einen LEGO-Burg. Jeder LEGO-Stein repräsentiert einen Code-Baustein, und die Anleitung zeigt euch, wie ihr sie zusammenbaut. In Java ist ein Modul wie ein vorgefertigter Abschnitt eurer Burg – es ist eine Sammlung von verwandtem Code, die zusammenarbeitet, um spezifische Funktionen auszuführen.
In technischer Sprache ist ein Modul in Java eine selbstständige Einheit des Codes, die Folgendes umfasst:
- Klassen und Schnittstellen
- Ressourcen (wie Bilder oder Konfigurationsdateien)
- Eine klare Definition davon, was es von anderen Modulen benötigt
- Eine Deklaration davon, was es anderen Modulen bietet
Stellt euch vor, es wäre eine gut organisierte Werkzeugkiste, in der alles seinen Platz und Zweck hat.
Funktionen des Java-Modulsystems
Das Java-Modulsystem, das in Java 9 eingeführt wurde, bringt mehrere aufregende Funktionen mit sich. Lassen Sie uns sie eine nach der anderen erkunden:
1. Starke Encapsulation
Erinnert euch, wenn ihr Kind warst und eine Geheimkiste hattet, in der ihr eure Schätze aufbewahrtest? Module funktionieren ähnlich. Sie lassen euch entscheiden, welche Teile eures Codes für andere sichtbar sind und welche Teile eure "geheimen Schätze" sind.
module com.myapp.secretbox {
exports com.myapp.secretbox.api;
}
In diesem Beispiel sind nur die Klassen im Paket com.myapp.secretbox.api
für andere Module sichtbar. Alles andere ist versteckt!
2. Zuverlässige Konfiguration
Module geben klar an, was sie von anderen Modulen benötigen. Es ist wie das Erstellen einer Einkaufsliste, bevor ihr zum Supermarkt geht – ihr wisst genau, was ihr benötigt und vergisst nichts!
module com.myapp.kitchen {
requires com.myapp.fridge;
requires com.myapp.stove;
}
Hier sagt unser kitchen
-Modul, dass es die Module fridge
und stove
benötigt, um richtig zu funktionieren.
3. Verbesserte Leistung
Mit Modulen kann Java intelligenter darin sein, nur den Code zu laden, den es benötigt. Es ist wie nur die Kleidung zu packen, die ihr tatsächlich auf einer Reise tragen werdet, anstatt euren gesamten Kleiderschrank!
Das Deklarieren eines Moduls
Nun rollen wir die Ärmel hoch und erstellen unser erstes Modul. Wir beginnen, indem wir eine Datei namens module-info.java
im Stammverzeichnis unseres Quellcode-Verzeichnisses erstellen.
module com.myapp.greetings {
exports com.myapp.greetings.api;
}
Diese einfache Deklaration erstellt ein Modul namens com.myapp.greetings
und macht das Paket com.myapp.greetings.api
für andere Module verfügbar.
Hinzufügen abhängiger Module
Manchmal benötigt unser Modul möglicherweise Code von anderen Modulen. Wir können diese Abhängigkeiten mit dem Schlüsselwort requires
angeben.
module com.myapp.greetings {
requires com.myapp.translations;
exports com.myapp.greetings.api;
}
In diesem Beispiel benötigt unser greetings
-Modul das translations
-Modul, um korrekt zu funktionieren.
Hinzufügen optionaler Module
Was ist, wenn wir ein Modul haben, das schön ist, aber nicht unbedingt notwendig? Hier kommen optionale Module ins Spiel!
module com.myapp.greetings {
requires com.myapp.translations;
requires static com.myapp.fancyfonts;
exports com.myapp.greetings.api;
}
Das Schlüsselwort static
sagt Java, dass das fancyfonts
-Modul optional ist. Unser greetings
-Modul funktioniert ohne es, aber es kann fancyfonts
verwenden, wenn es verfügbar ist.
Hinzufügen transitischer Module
Manchmal möchten wir unsere Abhängigkeiten an Module weiterreichen, die von uns abhängen. Dies können wir mit dem Schlüsselwort transitive
tun.
module com.myapp.greetings {
requires transitive com.myapp.translations;
exports com.myapp.greetings.api;
}
Nun erhält jedes Modul, das com.myapp.greetings
benötigt, automatisch Zugang zu com.myapp.translations
auch.
Exportieren öffentlicher Klassen
Wenn wir bestimmte Pakete für andere Module verfügbar machen möchten, verwenden wir das Schlüsselwort exports
.
module com.myapp.greetings {
exports com.myapp.greetings.api;
exports com.myapp.greetings.utils to com.myapp.testing;
}
In diesem Beispiel machen wir das Paket api
für alle Module verfügbar, aber das Paket utils
ist nur für das Modul com.myapp.testing
verfügbar.
Erlauben von Reflexion
Manchmal müssen wir anderen Modulen erlauben, Reflexion auf unsere Klassen anzuwenden. Dies können wir mit dem Schlüsselwort opens
tun.
module com.myapp.greetings {
exports com.myapp.greetings.api;
opens com.myapp.greetings.internal to com.myapp.testing;
}
Dies erlaubt dem Modul com.myapp.testing
, Reflexion auf Klassen im Paket com.myapp.greetings.internal
anzuwenden.
Erstellen und Verwenden von Java-Modulen
Jetzt, da wir die Grundlagen abgedeckt haben, lassen wir es uns zusammenstellen und eine einfache modulare Anwendung erstellen. Wir werden zwei Module erstellen: com.myapp.greetings
und com.myapp.main
.
Erstellen wir zuerst das Modul com.myapp.greetings
:
// module-info.java
module com.myapp.greetings {
exports com.myapp.greetings;
}
// com/myapp/greetings/Greeter.java
package com.myapp.greetings;
public class Greeter {
public static String greet(String name) {
return "Hallo, " + name + "!";
}
}
Jetzt erstellen wir das Modul com.myapp.main
, das unser greetings
-Modul verwendet:
// module-info.java
module com.myapp.main {
requires com.myapp.greetings;
}
// com/myapp/main/Main.java
package com.myapp.main;
import com.myapp.greetings.Greeter;
public class Main {
public static void main(String[] args) {
System.out.println(Greeter.greet("Java Module"));
}
}
Um diese modulare Anwendung zu kompilieren und auszuführen, verwenden wir die folgenden Befehle:
javac -d mods --module-source-path src $(find src -name "*.java")
java --module-path mods -m com.myapp.main/com.myapp.main.Main
Und voilà! Ihr habt gerade eure erste modulare Java-Anwendung erstellt und ausgeführt.
Fazit
Herzlichen Glückwunsch, dass ihr diese Einführung in das Java-Modulsystem geschafft habt! Wir haben viel Land zurückgelegt, von der Verständnis, was Module sind, bis hin zum Erstellen und Verwenden in einer realen Anwendung. Bedenkt, dass das Meistern von Modulen wie das Fahrradfahren übenсяt – es erfordert Praxis. Habt nicht Angst, zu experimentieren und Fehler zu machen – so lernen wir am besten!
Wenn ihr weiterhin auf eurer Java-Reise geht, werdet ihr feststellen, dass Module euch helfen, mehr organisierte, sichere und effiziente Anwendungen zu erstellen. Sie sind wie das geheime Ingrediens, das eure Programmierfähigkeiten von gut zu großartig macht.
Lasst weiterhin coden, lasst weiterhin lernen und vor allem, habt Spaß! Bis zum nächsten Mal, happy modulating!
Credits: Image by storyset