{"id":578,"date":"2025-01-10T19:46:19","date_gmt":"2025-01-10T18:46:19","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=578"},"modified":"2025-02-25T19:48:27","modified_gmt":"2025-02-25T18:48:27","slug":"das-modulsystem-von-java-9-eine-einfuehrung","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=578","title":{"rendered":"Das Modulsystem von Java 9+: Eine Einf\u00fchrung"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Einleitung<\/h2>\n\n\n\n<p>Mit der Einf\u00fchrung von Java 9 wurde das Modulsystem als ein bedeutendes neues Feature hinzugef\u00fcgt. Das Modulsystem zielt darauf ab, die Modularit\u00e4t von Java-Anwendungen zu verbessern, die Entwicklung und Wartung von Software zu vereinfachen und die Leistung von Java-Anwendungen zu optimieren. In diesem Artikel werden wir die Grundlagen des Modulsystems von Java, seine Struktur, Vorteile und die wichtigsten Konzepte n\u00e4her betrachten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was ist ein Modul?<\/h2>\n\n\n\n<p>Ein Modul ist eine Sammlung von Paketen, Klassen und Ressourcen, die zusammengeh\u00f6ren und als Einheit betrachtet werden k\u00f6nnen. Ein Modul definiert seine Schnittstellen (public APIs) und seine Abh\u00e4ngigkeiten zu anderen Modulen. In Java wird ein Modul durch eine <code>module-info.java<\/code>-Datei beschrieben, die sich im Stammverzeichnis des Moduls befindet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Struktur eines Moduls<\/h3>\n\n\n\n<p>Die grundlegende Struktur eines Moduls umfasst:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>module-info.java<\/strong>: Diese Datei enth\u00e4lt die Definition des Moduls, einschlie\u00dflich seiner Abh\u00e4ngigkeiten und exportierten Pakete.<\/li>\n\n\n\n<li><strong>Pakete<\/strong>: Die Pakete innerhalb eines Moduls k\u00f6nnen entweder exportiert oder verborgen sein. Exportierte Pakete sind f\u00fcr andere Module sichtbar, w\u00e4hrend verborgene Pakete nur innerhalb des Moduls zug\u00e4nglich sind.<\/li>\n\n\n\n<li><strong>Ressourcen<\/strong>: Module k\u00f6nnen auch Ressourcen wie Konfigurationsdateien oder Bilder enthalten.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Beispiel f\u00fcr eine module-info.java-Datei<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-built_in\">module<\/span> com.example.myapp {\n    exports com.example.myapp.api;\n    requires com.example.utils;\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel definiert das Modul <code>com.example.myapp<\/code>, dass es das Paket <code>com.example.myapp.api<\/code> exportiert und von dem Modul <code>com.example.utils<\/code> abh\u00e4ngt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vorteile des Modulsystems<\/h2>\n\n\n\n<p>Das Modulsystem bringt mehrere Vorteile mit sich:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Bessere Kapselung<\/strong>: Durch die Definition von Modulen k\u00f6nnen Entwickler sicherstellen, dass nur die erforderlichen Teile ihrer Software f\u00fcr andere Module sichtbar sind. Dies erh\u00f6ht die Sicherheit und verhindert, dass interne Implementierungsdetails von anderen Modulen verwendet werden.<\/li>\n\n\n\n<li><strong>Einfache Verwaltung von Abh\u00e4ngigkeiten<\/strong>: Mit dem Modulsystem k\u00f6nnen Entwickler explizit angeben, welche Module ben\u00f6tigt werden. Dies erleichtert die Verwaltung von Abh\u00e4ngigkeiten und reduziert das Risiko von Konflikten zwischen verschiedenen Versionen von Bibliotheken.<\/li>\n\n\n\n<li><strong>Optimierte Laufzeit<\/strong>: Das Modulsystem erm\u00f6glicht eine verbesserte Laufzeitleistung, da der Java Virtual Machine (JVM) nur die ben\u00f6tigten Module l\u00e4dt. Dies kann zu einer schnelleren Startzeit und einem geringeren Speicherverbrauch f\u00fchren.<\/li>\n\n\n\n<li><strong>Bessere Wartbarkeit<\/strong>: Durch die Modularisierung des Codes wird die Wartung und Erweiterung von Anwendungen erleichtert. Entwickler k\u00f6nnen Module unabh\u00e4ngig voneinander aktualisieren oder ersetzen, ohne dass dies Auswirkungen auf die gesamte Anwendung hat.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Hauptkomponenten des Modulsystems<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Module<\/h3>\n\n\n\n<p>Ein Modul ist die grundlegende Einheit des Modulsystems. Es ist eine Sammlung von Paketen und kann andere Module importieren oder von anderen Modulen importiert werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pakete<\/h3>\n\n\n\n<p>Pakete sind die Organisationsstruktur innerhalb eines Moduls. Jedes Modul kann mehrere Pakete enthalten, und diese Pakete k\u00f6nnen als \u00f6ffentliche oder private Schnittstellen definiert werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Module Descriptor<\/h3>\n\n\n\n<p>Der Module Descriptor (<code>module-info.java<\/code>) ist eine spezielle Datei, die Informationen \u00fcber das Modul enth\u00e4lt. Sie definiert:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Exportierte Pakete<\/strong>: Pakete, die anderen Modulen zur Verf\u00fcgung gestellt werden.<\/li>\n\n\n\n<li><strong>Abh\u00e4ngigkeiten<\/strong>: Module, die f\u00fcr den Betrieb dieses Moduls erforderlich sind.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Anforderungen und Exporte<\/h3>\n\n\n\n<p>Das Modulsystem erm\u00f6glicht es, Anforderungen und Exporte klar zu definieren. Durch die Verwendung von <code>requires<\/code> und <code>exports<\/code> in der <code>module-info.java<\/code>-Datei k\u00f6nnen Entwickler die Sichtbarkeit und Abh\u00e4ngigkeiten von Modulen steuern.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erstellung eines Moduls<\/h2>\n\n\n\n<p>Um ein Modul zu erstellen, folgen Sie diesen Schritten:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Erstellen Sie das Verzeichnis<\/strong>: Erstellen Sie ein Verzeichnis f\u00fcr Ihr Modul. Zum Beispiel <code>com.example.myapp<\/code>.<\/li>\n\n\n\n<li><strong>Erstellen Sie die module-info.java-Datei<\/strong>: Erstellen Sie eine Datei namens <code>module-info.java<\/code> im Stammverzeichnis Ihres Moduls.<\/li>\n\n\n\n<li><strong>Definieren Sie das Modul<\/strong>: F\u00fcgen Sie die erforderlichen Informationen in die <code>module-info.java<\/code>-Datei ein.<\/li>\n\n\n\n<li><strong>F\u00fcgen Sie Pakete hinzu<\/strong>: Erstellen Sie Unterverzeichnisse f\u00fcr Ihre Pakete und f\u00fcgen Sie die entsprechenden Klassen hinzu.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Beispiel<\/h3>\n\n\n\n<p>Angenommen, Sie m\u00f6chten ein einfaches Modul namens <code>calculator<\/code> erstellen:<\/p>\n\n\n\n<p><strong>Verzeichnisstruktur:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">calculator\/\n\u251c\u2500\u2500 <span class=\"hljs-built_in\">module<\/span>-info.java\n\u2514\u2500\u2500 com\/\n    \u2514\u2500\u2500 example\/\n        \u2514\u2500\u2500 calculator\/\n            \u2514\u2500\u2500 Calculator.java\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>module-info.java:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-built_in\">module<\/span> com.example.calculator {\n    exports com.example.calculator;\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Calculator.java:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">package com.example.calculator;\n\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Calculator<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> int add(int a, int b) {\n        <span class=\"hljs-keyword\">return<\/span> a + b;\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Das Modulsystem von Java bietet eine leistungsstarke M\u00f6glichkeit, Software modular zu gestalten, die Kapselung zu verbessern und die Wartbarkeit zu erh\u00f6hen. Mit der Einf\u00fchrung von Modulen in Java 9 haben Entwickler nun die Werkzeuge zur Hand, um komplexe Anwendungen effizient zu organisieren und zu verwalten. Das Verst\u00e4ndnis der Konzepte des Modulsystems ist entscheidend f\u00fcr die Entwicklung moderner Java-Anwendungen und tr\u00e4gt dazu bei, qualitativ hochwertige Software zu erstellen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung Mit der Einf\u00fchrung von Java 9 wurde das Modulsystem als ein bedeutendes neues Feature hinzugef\u00fcgt. Das Modulsystem zielt darauf ab, die Modularit\u00e4t von Java-Anwendungen zu verbessern, die Entwicklung und Wartung von Software zu vereinfachen und die Leistung von Java-Anwendungen zu optimieren. In diesem Artikel werden wir die Grundlagen des Modulsystems von Java, seine Struktur, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-578","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=578"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/578\/revisions"}],"predecessor-version":[{"id":579,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/578\/revisions\/579"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}