Das Java 9-Modul ist die neue Einheit, die als Sammlung von Paketen eingeführt wird, um ein bestimmtes Feature oder eine bestimmte Funktionalität bereitzustellen. Das Java 9-Modul ist die erste Version des Java Development Kit nach der Neuanordnung und Kategorisierung von Paketen in Module. Es ist auch als Java 9 Platform Module System (JPMS) bekannt. In Java 9 können Sie die Laufzeitgröße reduzieren, indem Sie nur die erforderlichen Module einbinden. Beispielsweise können Sie für ein Gerät, das keine GUIs unterstützt, eine Laufzeit erstellen, ohne die GUI-Module einzubeziehen.
Starten Sie Ihren kostenlosen Softwareentwicklungskurs
Webentwicklung, Programmiersprachen, Softwaretests und andere
Wichtige Highlights
- Das Java 9-Modul ist die Implementierung einer Abstraktion von Paketen auf hoher Ebene.
- Alle funktionsbezogenen Pakete sind in einem Modul mit insgesamt 95 Modulen zusammengefasst. Es bietet eine größere Plattformintegrität und eine starke Kapselung.
- Es ermöglicht die Erstellung eines separaten Java-Moduls als modulare JAR-Datei für Java-Anwendungen oder Java-API.
Java 9-Modulsystem
- In Java 9-Modulen werden die funktionsbezogenen Pakete in wiederverwendbaren Gruppen, sogenannten Modulen, zusammengefasst.
- Das Java 9-Modul kann Ressourcen enthalten (z. B. Bilder und XML-Dateien). Das java.base-Modul ist ein unabhängiges Modul, das für jedes Modul erforderlich ist.
- Die Systemmodule sind Standard und ihre Namen beginnen mit java.
- Zum Beispiel JavaFX-Module (Namen beginnen mit JavaFX), JDK-Module (Namen beginnen mit jdk), Oracle-Module (Namen beginnen mit oracle).
Typen von Java 9-Modulen
1. Anwendungsmodule
- Diese Module werden von Programmierern erstellt.
- Das inoffizielle JAR mit zusammengestelltem Pfad enthält die kompilierte Klassendatei module-info.a, die den Namen und die Definition des Moduls enthält.
2. Automatische Module
- Wenn dem Modul vorhandene JAR-Dateien hinzugefügt werden, werden automatische Module erstellt.
- Der Name der JAR wird zum Namen des Moduls.
3. Unbenanntes Modul
- Es handelt sich um eine Klasse oder JAR, die in den Klassenpfad, aber nicht in den Modulpfad geladen wird.
- Es handelt sich um ein Sammelmodul, um die Abwärtskompatibilität mit zuvor geschriebenem Java-Code aufrechtzuerhalten.
Modularer Deskriptor
- Die Datei module-info.java enthält die Moduldefinition oder Metadaten, die das Modul beschreiben.
- Beim Kompilieren von module-info.java erhalten wir module-info.class, das den Moduldeskriptor enthält, der im Stammordner des Moduls gespeichert ist.
- Modularer Deskriptor besteht aus einem oder mehreren Exporten und erfordert eine Klausel.
- Es ist ein unabhängiges Modul, da es die Pakete in andere Module exportieren und die Pakete anderer Module verwenden kann.
- Die Metadaten umfassen drei Dinge: einen eindeutigen Namen, eine Exportklausel und eine Required-Klausel.
- Eindeutiger Name: Name des Moduls.
Code:
module eg.com.module1
{
}
- Exportklausel: Die Pakete im Modul können exportiert werden, da andere Module sie verwenden können.
Code:
module eg.com.module1
{
exports eg.com.module1.service;
}
- Requires-Klausel: Sie wird verwendet, wenn Sie Pakete aus anderen Modulen benötigen.
Code:
{
requires eg.com.module1;
}
Module der Java 9-Modulsystemanwendung
- Zum Auflisten der Module des JDK-Sets aus dem bin-Ordner von jdk. Führen Sie den folgenden Befehl in CLI Java aus –list-modules
- Das Schlüsselwort module wird zum Deklarieren des Moduls verwendet. Der Modulkörper ist in geschweifte Klammern eingeschlossen, wie in: Modul Modulname { }
- Eine Export-Modulanweisung macht das Paket des Moduls für den Code in allen anderen Modulen zugänglich.
- Ein Export…um einen qualifizierten Bericht zu definieren. Die Liste der Pakete, die auf das exportierte Paket zugreifen können, kann in einer durch Kommas getrennten Liste genau angegeben werden.
Code:
module com.educba.util
{
exports com.educba.app;
exports com.educba.security to com.educba.client, com.educba.producer;
}
- Wenn eine Open-Module-Direktive verwendet wird, werden alle Pakete in einem bestimmten Modul zur Laufzeit und über Reflektion für alle anderen Module zugänglich. Um den reinen Laufzeitzugriff auf alle Pakete in einem Modul zu ermöglichen, können Sie das gesamte Modul öffnen, wie in:
Code;
open module <em>modulename</em>
{
// module directives
}
- To allow runtime-only access to packages in a module. An open module directive of the form opens package- can be used. The code in other modules can access the public types of a package and its nested public and protected types at runtime only. Reflection can be used to access all the types and the types’ members in the specified package.
- The code in the listed modules can access the public types of a package and its nested public and protected types at runtime only. Reflection to code in the specified modules can be used to access all of the types and types’ members in the specified package.
How to Create a New Java 9 Module?
- Create a directory structure
src\com.educba\com\educba
mkdir –r src\com.educba\com\educba
- Create a new module in a text editor and save it as a java file module-info.java.
module com.educba
{ }
- Set the environment variable JAVA_HOME to the path where Java is installed.
For example, JAVA_HOME C:\Program Files\Java\jdk-9\bin
Add %JAVA_HOME% to PATH in control Panel->system->advanced system setting->environment variables.
- To see the compiled module descriptor in the CLI.
Code:
>javap mods/com.educba/module-info.class
Output:
It shows requires java.base in the modules definition, though we had created an empty module. It is because java.base is the basic and independent module. All other modules depend on it.
Comparison Table of JDK 8 and JDK 9
The most obvious difference between JDK 8 and JDK 9.
Feature |
Java 8 |
Java 9 |
Top Level component |
Package |
Module |
New features launched |
● Lambda Expressions
● Stream API
● Date API
|
● Java Module System (Jigsaw Project)
● Java REPL
● Milling Project Coin
|
Performance |
Compromised performance due to big size of jdk |
Improved performance |
Testing and maintaining applications |
Difficult with large size of JRE |
Easy with REPL and reduced size depending on modules included. JShell or REPL: Read and evaluate Print Loop for easy execution and testing of Java Constructs like class, interface, enum, object, and statements easily. |
Security |
It is compromised because of no encapsulation. Internal APIs can be accessed easily by users and potential hackers. Reflection could be used to learn about private members too. |
String security as Reflection does not provide access to private members. Only those exposed by export keywords are available through reflection. |
Packaging format |
JAR |
JMOD can include native code and configuration files. |
Fazit
Java 9 ist in der Tat die am meisten angestrebte Umstrukturierung von Java-Code, um ihn mit den neuen Codierungstechniken der verteilten Architektur kompatibel zu machen. Es hat dazu beigetragen, die Größe ausführbarer Dateien durch die Auswahl der erforderlichen Module zu reduzieren und so die Leistung zu verbessern. Die starke Kapselung hat eine höhere Sicherheit ermöglicht, da potenziellen Hackern weniger Klassen zur Verfügung stehen. Die Modularität hat für Transparenz bei der Deklaration und Bestimmung von Abhängigkeiten gesorgt.
FAQs
Q1. Wie migriere ich meine Legacy-Anwendung in JAVA 9?
Antwort: Sie können Ihre Legacy-Anwendung in Java 9 kompilieren. Beim Kompilieren treten Fehler für diejenigen Codeteile auf, die nicht in der modularen Struktur von Java 9 enthalten sind. Hier müssen Sie einige Ausgaben tätigen Zeit, die erforderlichen Module einzubinden. Sie können Ihren neuen Code mit Jshell auf die erforderliche Ausgabe testen.
Q2. Woher weiß ich, welche Module das System bereitstellt?
Antwort: Mit den Java-Listenmodulen können die Module aufgelistet werden. Sie müssen die Dokumentation zu Rate ziehen, um mehr über ihre Funktionen zu erfahren.
Q3. Ist es notwendig, IDE zu installieren, um in JAVA zu funktionieren?
Antwort:Nein. Es hängt davon ab, wie gut Sie mit der Befehlszeilenschnittstelle vertraut sind. IDEs erledigen viele Aufgaben im Backend, die den Benutzern nicht bekannt sind. CLI ist die beste Option, um das Problem zu identifizieren und zu beheben.
F4. Wie greife ich auf ein öffentliches Paket in meinem Modul zu?
Antwort: Sie müssen in der Moduldefinition Ihres Moduls Folgendes hinzufügen, um auf das öffentliche Paket zuzugreifen: info.java und required_package_name.
Das obige ist der detaillierte Inhalt vonJava 9-Module. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!