Java - Pakete
Pakete werden in Java verwendet, um Namenskonflikte zu vermeiden, den Zugriff zu kontrollieren, das Suchen/Auffinden und die Verwendung von Klassen, Schnittstellen, Aufzählungen und Anmerkungen zu erleichtern usw.
Ein Paket kann als Gruppierung verwandter Typen (Klassen, Schnittstellen, Aufzählungen und Anmerkungen) definiert werden, die Zugriffsschutz und Namensraumverwaltung bieten.
Einige der existierenden Pakete in Java sind −
-
java.lang − bündelt die grundlegenden Klassen
-
java.io − Klassen für Eingabe- und Ausgabefunktionen sind in diesem Paket gebündelt
Programmierer können ihre eigenen Pakete definieren, um Gruppen von Klassen/Schnittstellen usw. zu bündeln. Es empfiehlt sich, von Ihnen implementierte verwandte Klassen zu gruppieren, damit ein Programmierer leicht feststellen kann, dass die Klassen, Schnittstellen, Aufzählungen und Anmerkungen verwandt sind.
Da das Paket einen neuen Namensraum erstellt, gibt es keine Namenskonflikte mit Namen in anderen Paketen. Durch die Verwendung von Paketen ist es einfacher, eine Zugriffskontrolle bereitzustellen, und es ist auch einfacher, die zugehörigen Klassen zu finden.
Paket erstellen
Beim Erstellen eines Pakets sollten Sie einen Namen für das Paket wählen und ein Paket einschließen -Anweisung zusammen mit diesem Namen oben in jeder Quelldatei, die die Klassen, Schnittstellen, Aufzählungen und Anmerkungstypen enthält, die Sie in das Paket aufnehmen möchten.
Die Paketanweisung sollte die erste Zeile in der Quelldatei sein. In jeder Quelldatei kann es nur eine Paketanweisung geben, und sie gilt für alle Typen in der Datei.
Wenn keine Paketanweisung verwendet wird, werden die Klassen, Schnittstellen, Aufzählungen und Anmerkungstypen in das aktuelle Standardpaket gestellt.
Um die Java-Programme mit Paketanweisungen zu kompilieren, müssen Sie die Option -d wie unten gezeigt verwenden.
javac -d Destination_folder file_name.java
Dann wird ein Ordner mit dem angegebenen Paketnamen im angegebenen Ziel erstellt und die kompilierten Klassendateien werden in diesem Ordner abgelegt.
Beispiel
Sehen wir uns ein Beispiel an, das ein Paket namens animals erstellt . Es empfiehlt sich, Paketnamen mit Kleinbuchstaben zu verwenden, um Konflikte mit den Namen von Klassen und Schnittstellen zu vermeiden.
Das folgende Paketbeispiel enthält eine Schnittstelle namens animals −
/* File name : Animal.java */ package animals; interface Animal { public void eat(); public void travel(); }
Lassen Sie uns nun die obige Schnittstelle im gleichen Paket animals implementieren −
package animals; /* File name : MammalInt.java */ public class MammalInt implements Animal { public void eat() { System.out.println("Mammal eats"); } public void travel() { System.out.println("Mammal travels"); } public int noOfLegs() { return 0; } public static void main(String args[]) { MammalInt m = new MammalInt(); m.eat(); m.travel(); } }
Kompilieren Sie nun die Java-Dateien wie unten gezeigt −
$ javac -d . Animal.java $ javac -d . MammalInt.java
Jetzt ein Paket/Ordner mit dem Namen Tiere wird im aktuellen Verzeichnis erstellt und diese Klassendateien werden darin abgelegt, wie unten gezeigt.
Sie können die Klassendatei innerhalb des Pakets ausführen und erhalten das unten gezeigte Ergebnis.
Mammal eats Mammal travels
Das Importschlüsselwort
Wenn eine Klasse eine andere Klasse im selben Paket verwenden möchte, muss der Paketname nicht verwendet werden. Klassen im selben Paket finden einander ohne besondere Syntax.
Beispiel
Hier wird dem Gehaltsabrechnungspaket, das bereits „Employee“ enthält, eine Klasse namens „Boss“ hinzugefügt. Der Boss kann dann auf die Employee-Klasse verweisen, ohne das Payroll-Präfix zu verwenden, wie die folgende Boss-Klasse demonstriert.
package payroll; public class Boss { public void payEmployee(Employee e) { e.mailCheck(); } }
Was passiert, wenn die Employee-Klasse nicht im Payroll-Paket enthalten ist? Die Boss-Klasse muss dann eine der folgenden Techniken verwenden, um auf eine Klasse in einem anderen Paket zu verweisen.
- Der vollqualifizierte Name der Klasse kann verwendet werden. Zum Beispiel −
payroll.Employee
-
Das Paket kann mit dem Schlüsselwort import und dem Platzhalter (*) importiert werden. Zum Beispiel −
import payroll.*;
- Die Klasse selbst kann mit dem Schlüsselwort import importiert werden. Zum Beispiel −
import payroll.Employee;
Hinweis − Eine Klassendatei kann beliebig viele import-Anweisungen enthalten. Die Importanweisungen müssen nach der Paketanweisung und vor der Klassendeklaration stehen.
Die Verzeichnisstruktur von Paketen
Zwei Hauptergebnisse treten auf, wenn eine Klasse in ein Paket platziert wird −
-
Der Name des Pakets wird Teil des Namens der Klasse, wie wir gerade im vorherigen Abschnitt besprochen haben.
-
Der Name des Pakets muss mit der Verzeichnisstruktur übereinstimmen, in der sich der entsprechende Bytecode befindet.
Hier ist eine einfache Möglichkeit, Ihre Dateien in Java zu verwalten −
Fügen Sie den Quellcode für eine Klasse, eine Schnittstelle, eine Aufzählung oder einen Anmerkungstyp in eine Textdatei ein, deren Name der einfache Name des Typs ist und deren Erweiterung .java ist .
Zum Beispiel −
// File Name : Car.java package vehicle; public class Car { // Class implementation. }
Legen Sie nun die Quelldatei in ein Verzeichnis, dessen Name den Namen des Pakets widerspiegelt, zu dem die Klasse gehört −
....\vehicle\Car.java
Nun wären der qualifizierte Klassenname und Pfadname wie folgt:−
- Klassenname → Fahrzeug.Auto
- Pfadname → Fahrzeug\Car.java (in Windows)
Im Allgemeinen verwendet ein Unternehmen seinen umgekehrten Internetdomänennamen für seine Paketnamen.
Beispiel − Der Internetdomänenname eines Unternehmens ist apple.com, dann würden alle seine Paketnamen mit com.apple beginnen. Jede Komponente des Paketnamens entspricht einem Unterverzeichnis.
Beispiel − Das Unternehmen hatte ein com.apple.computers-Paket, das eine Dell.java-Quelldatei enthielt, sie würde in einer Reihe von Unterverzeichnissen wie diesem enthalten sein −
....\com\apple\computers\Dell.java
Zum Zeitpunkt der Kompilierung erstellt der Compiler für jede darin definierte Klasse, Schnittstelle und Aufzählung eine andere Ausgabedatei. Der Basisname der Ausgabedatei ist der Name des Typs und seine Erweiterung ist .class .
Zum Beispiel −
// File Name: Dell.java package com.apple.computers; public class Dell { } class Ups { }
Kompilieren Sie diese Datei nun wie folgt mit der Option -d −
$javac -d . Dell.java
Die Dateien werden wie folgt kompiliert −
.\com\apple\computers\Dell.class .\com\apple\computers\Ups.class
Sie können alle Klassen oder Schnittstellen importieren, die in \com\apple\computers\ definiert sind wie folgt −
import com.apple.computers.*;
Wie die .java-Quelldateien sollten sich die kompilierten .class-Dateien in einer Reihe von Verzeichnissen befinden, die den Paketnamen widerspiegeln. Der Pfad zu den .class-Dateien muss jedoch nicht mit dem Pfad zu den .java-Quelldateien identisch sein. Sie können Ihre Quell- und Klassenverzeichnisse separat als −
anordnen<path-one>\sources\com\apple\computers\Dell.java <path-two>\classes\com\apple\computers\Dell.class
Auf diese Weise ist es möglich, anderen Programmierern Zugriff auf das Klassenverzeichnis zu gewähren, ohne Ihre Quellen preiszugeben. Sie müssen auch Quell- und Klassendateien auf diese Weise verwalten, damit der Compiler und die Java Virtual Machine (JVM) alle Typen finden können, die Ihr Programm verwendet.
Der vollständige Pfad zum Klassenverzeichnis,
Angenommen,
Ein Klassenpfad kann mehrere Pfade umfassen. Mehrere Pfade sollten durch ein Semikolon (Windows) oder einen Doppelpunkt (Unix) getrennt werden. Standardmäßig durchsuchen der Compiler und die JVM das aktuelle Verzeichnis und die JAR-Datei mit den Java-Plattformklassen, sodass diese Verzeichnisse automatisch im Klassenpfad enthalten sind.
Setzen Sie die Systemvariable CLASSPATH
Um die aktuelle CLASSPATH-Variable anzuzeigen, verwenden Sie die folgenden Befehle in Windows und UNIX (Bourne-Shell) −
- Unter Windows → C:\> CLASSPATH setzen
- Unter UNIX → % echo $CLASSPATH
Um den aktuellen Inhalt der CLASSPATH-Variablen zu löschen, verwenden Sie −
- In Windows → C:\> setzen Sie CLASSPATH =
- In UNIX → % unset CLASSPATH; KLASSENPFAD exportieren
Um die CLASSPATH-Variable zu setzen −
- In Windows → setze CLASSPATH =C:\users\jack\java\classes
- In UNIX → % CLASSPATH =/home/jack/java/classes; KLASSENPFAD exportieren
Java