Java - Pakete
Pakete werden in Java verwendet, um Namenskonflikte zu vermeiden, den Zugriff zu steuern, das Suchen / Suchen und Verwenden von Klassen, Schnittstellen, Aufzählungen und Anmerkungen zu vereinfachen usw.
EIN Package kann als Gruppierung verwandter Typen (Klassen, Schnittstellen, Aufzählungen und Anmerkungen) definiert werden, die Zugriffsschutz und Namespace-Verwaltung bieten.
Einige der in Java vorhandenen Pakete sind -
java.lang - bündelt die Grundklassen
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 wird empfohlen, verwandte Klassen, die von Ihnen implementiert wurden, zu gruppieren, damit ein Programmierer leicht feststellen kann, dass die Klassen, Schnittstellen, Aufzählungen und Anmerkungen zusammenhängen.
Da das Paket einen neuen Namespace erstellt, treten keine Namenskonflikte mit Namen in anderen Paketen auf. Mithilfe von Paketen ist es einfacher, die Zugriffssteuerung bereitzustellen, und es ist auch einfacher, die zugehörigen Klassen zu finden.
Ein Paket erstellen
Beim Erstellen eines Pakets sollten Sie einen Namen für das Paket auswählen und a einschließen package 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. Jede Quelldatei kann nur eine Paketanweisung enthalten und gilt für alle Typen in der Datei.
Wenn keine Paketanweisung verwendet wird, werden die Klassen-, Schnittstellen-, Aufzählungs- und Anmerkungstypen in das aktuelle Standardpaket eingefügt.
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
Anschließend wird am angegebenen Ziel ein Ordner mit dem angegebenen Paketnamen erstellt, und die kompilierten Klassendateien werden in diesem Ordner abgelegt.
Beispiel
Schauen wir uns ein Beispiel an, das ein Paket namens erstellt animals. Es wird empfohlen, Paketnamen mit Kleinbuchstaben zu verwenden, um Konflikte mit den Namen von Klassen und Schnittstellen zu vermeiden.
Das folgende Paketbeispiel enthält eine Schnittstelle mit dem Namen Tiere -
/* File name : Animal.java */
package animals;
interface Animal {
public void eat();
public void travel();
}
Nun wollen wir uns die obige Schnittstelle im selben Paket implementieren Tiere -
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
Nun ein Paket / Ordner mit dem Namen animals wird im aktuellen Verzeichnis erstellt und diese Klassendateien werden wie unten gezeigt darin abgelegt.
Sie können die Klassendatei innerhalb des Pakets ausführen und das Ergebnis wie unten gezeigt erhalten.
Mammal eats
Mammal travels
Das Import-Schlüsselwort
Wenn eine Klasse eine andere Klasse im selben Paket verwenden möchte, muss der Paketname nicht verwendet werden. Klassen im selben Paket finden sich ohne spezielle Syntax.
Beispiel
Hier wird eine Klasse mit dem Namen Boss zum Abrechnungspaket hinzugefügt, das bereits Employee enthält. Der Chef kann dann auf die Employee-Klasse verweisen, ohne das Abrechnungspräfix zu verwenden, wie die folgende Boss-Klasse zeigt.
package payroll;
public class Boss {
public void payEmployee(Employee e) {
e.mailCheck();
}
}
Was passiert, wenn die Employee-Klasse nicht im Abrechnungspaket enthalten ist? Die Boss-Klasse muss dann eine der folgenden Techniken verwenden, um auf eine Klasse in einem anderen Paket zu verweisen.
- Der vollständig qualifizierte 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;
Note- Eine Klassendatei kann beliebig viele Importanweisungen enthalten. Die Importanweisungen müssen nach der Paketanweisung und vor der Klassendeklaration erscheinen.
Die Verzeichnisstruktur von Paketen
Zwei Hauptergebnisse treten auf, wenn eine Klasse in ein Paket eingefügt 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 dessen Erweiterung lautet .java.
Zum Beispiel -
// File Name : Car.java
package vehicle;
public class Car {
// Class implementation.
}
Legen Sie nun die Quelldatei in einem Verzeichnis ab, dessen Name den Namen des Pakets widerspiegelt, zu dem die Klasse gehört.
....\vehicle\Car.java
Nun wären der qualifizierte Klassenname und der Pfadname wie folgt:
- Klassenname → Fahrzeug
- Pfadname → Fahrzeug \ Car.java (in Fenstern)
Im Allgemeinen verwendet ein Unternehmen seinen umgekehrten Internetdomänennamen für seine Paketnamen.
Example- Der Internet-Domainname eines Unternehmens lautet apple.com. Alle Paketnamen beginnen dann mit com.apple. Jede Komponente des Paketnamens entspricht einem Unterverzeichnis.
Example - Das Unternehmen hatte ein com.apple.computers-Paket, das eine Dell.java-Quelldatei enthielt. Es 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 in \ com \ apple \ computer \ definierten Klassen oder Schnittstellen wie folgt importieren :
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 übereinstimmen. Sie können Ihre Quell- und Klassenverzeichnisse getrennt anordnen, als -
<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 von Ihrem Programm verwendeten Typen finden können.
Der vollständige Pfad zum Klassenverzeichnis <Pfad-wo> \ classes wird als Klassenpfad bezeichnet und mit der Systemvariablen CLASSPATH festgelegt. Sowohl der Compiler als auch die JVM erstellen den Pfad zu Ihren .class-Dateien, indem Sie den Paketnamen zum Klassenpfad hinzufügen.
Angenommen, <Pfad-zwei> \ classes ist der Klassenpfad, und der Paketname lautet com.apple.computers. Dann suchen der Compiler und die JVM nach .class-Dateien in <path-two> \ classes \ com \ apple \ computer.
Ein Klassenpfad kann mehrere Pfade enthalten. 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 sich diese Verzeichnisse automatisch im Klassenpfad befinden.
Legen Sie die CLASSPATH-Systemvariable fest
Verwenden Sie die folgenden Befehle in Windows und UNIX (Bourne-Shell), um die aktuelle CLASSPATH-Variable anzuzeigen:
- Stellen Sie in Windows → C: \> CLASSPATH ein
- In UNIX →% echo $ CLASSPATH
Verwenden Sie -, um den aktuellen Inhalt der Variablen CLASSPATH zu löschen.
- In Windows → C: \> setzen Sie CLASSPATH =
- In UNIX →% nicht gesetzt CLASSPATH; CLASSPATH exportieren
So legen Sie die Variable CLASSPATH fest:
- Setzen Sie unter Windows → CLASSPATH = C: \ users \ jack \ java \ classes
- Unter UNIX →% CLASSPATH = / home / jack / java / classes; CLASSPATH exportieren