16 Java – Pakete und Imports
Mit Sicherheit sind euch am Anfang in euren Dateien oder auch hier im Tech-Archive bestimmte Zeilen wie package kesares.techarchive
oder import java.util.List
aufgefallen.
In Java werden Klassen in sogenannten Paketen (Packages) organisiert. Ein Package ist eine Sammlung von zusammengehörigen Klassen, Interfaces, Enums, etc. die logisch gruppiert sind. Sie helfen dabei, den Code zu strukturieren und Namenskonflikte zu vermeiden. Zudem fördern Pakete auch die Zugriffskontrolle.
Package-Zugriff aus anderem Package
Es gibt drei Möglichkeiten, um von außerhalb auf ein Package zuzugreifen.
import package.*
import package.className
Angabe des vollständig qualifizierten Namens
Verwendung von import package.*
Wird import package.*
verwendet, erhält die Klasse Zugriff auf sämtliche Klassen und Schnittstellen innerhalb dieses Packages, jedoch nicht auf Subpackages.
Verwendung von import package.className
Wenn jedoch package.className
importiert wird, hat die Klasse nur auf die deklarierte Klasse des Packages Zugriff.
Verwendung des vollständig qualifizierten Namens
Auch wenn der vollständige qualifizierte Name einer Klasse angegeben wird, ist nur diese deklarierte Klasse zugänglich.
Hierbei ist import
nicht notwendig. Allerdings muss jedes Mal der vollständig qualifizierte Name angegeben werden, wenn auf diese Klasse zugegriffen wird.
Es wird meistens verwendet, wenn zwei Packages denselben Klassennamen haben. Die Packages java.util
und java.sql
enthalten z. B. jeweils eine Date
-Klasse.
Subpackages
Subpackages sind Unterpakete eines Hauptpakets und dienen dazu, den Code besser zu strukturieren und organisieren. Ein Paket kann beliebig viele Subpackages enthalten und diese wiederum ebenfalls weitere Subpackages.
Im vorherigen Abschnitt Package-Zugriff aus anderem Package haben wir die Subpackages kesares.techarchive
und kesares.print
verwendet. Die Struktur der Subpackages folgt dabei einer hierarchischen Ordnung, die durch Punkte getrennt wird. In einem Dateisystem fungieren alle Packages wie normale Verzeichnisse oder Ordner. Das vorherige Beispiel würde auf der Festplatte dann folgendermaßen aussehen.
Anderes Beispiel: Sun Microsystems hat ein Hauptpaket java
definiert, welches zahlreiche Klassen wie System
, String
, Reader
, Writer
, Proxy
, Socket
und noch viele mehr enthält. Diese Klassen sind thematisch in verschiedene Gruppen kategorisiert. Reader
und Writer
dienen dabei als Ein- und Ausgabe von Zeichenströmen (character streams), während Socket
und Proxy
Klassen für die Netzwerkkommunikation bereitstellen.
Um die Verwaltung zu erleichtern, wurde das java
-Package in mehrere Subpackages unterteilt, darunter java.lang
, java.io
und java.net
. Die Klassen Reader
und Writer
sind dabei dem java.io
-Package und die Klassen Socket
und Proxy
dem java.net
-Package zugeordnet.
Das java.lang
-Package
Das java.lang
-Package ist eines der zentralen und wichtigsten Pakete in der Java-Standardbibliothek. Es wird automatisch in jedem Java-Programm importiert, sodass die darin enthaltenen Klassen ohne expliziten Import verwendet werden können.
java.lang
stellt unter anderem die folgenden grundlegenden Klassen zur Verfügung, die essenziell für die Programmierung mit Java sind.
Object
: Kennen wir bereits aus Kapitel 14 – OOP: Die Mutter aller Klassen – Object. Von dieser Klasse erben alle anderen Klassen direkt oder indirekt.String
: Auch diese Klasse kennen wir bereits aus Kapitel 5 – Zeichenketten, welche zur Arbeit mit Zeichenketten dient.Math
: DieMath
-Klasse wurde bereits in Kapitel 09 – Methoden: DieMath
-Klasse vorgestellt und bietet unter anderem mathematische Funktionen für Logarithmen und Exponentialrechnung.System
: Ermöglicht den Zugriff auf Systemressourcen, wie die Standard-Ein- und Ausgabe oder den Zugriff auf Umgebungsvariablen.Thread
: Dient zur Erstellung und Verwaltung von Threads für die Parallelverarbeitung.
Statischer Import – import static
Die statische Importfunktion wurde in Java 5 hinzugefügt und erleichtert das häufige Arbeiten mit statischen Klassenmitgliedern (Klassenmethoden, Klassenvariablen und Konstanten).
Die Syntax ähnelt der regulären Importanweisung hinsichtlich der durch Punkte getrennten Liste von Paket- und Unterpaketnamen und es können ebenso einzelne bzw. alle statischen Mitglieder einer Klasse importiert werden.