Wir haben einige Java-Programme geschrieben. Jedes frühere Java-Programm wurde als Datei gespeichert, beispielsweise Test.java. Anschließend wird das Programm in Test.class kompiliert. Am Ende verwenden wir $java Test, um das Programm auszuführen.
In einem normalen Java-Projekt müssen wir jedoch häufig mehr als ein Java-Programm schreiben, und das endgültige Java-Produkt enthält alle Java-Programme. Daher muss Java das Problem der Organisation von Java-Programmen lösen. Der Zweck eines Pakets besteht darin, Java-Programme besser zu organisieren.
Paketerstellung
Die Paketerstellung ist sehr einfach. Wir müssen das Paket nur am Anfang des Java-Programms hinzufügen. Nehmen wir als Beispiel die Human-Klasse und fügen sie in das Paket ein:
Kopieren Sie den Codecode wie folgt:
Paket com.vamei.society;
öffentliche Klasse Mensch
{
/**
* Konstruktor
*/
öffentlich Mensch(int h)
{
this.height = h;
System.out.println("Ich bin geboren");
}
/**
*Accessor
*/
public int getHeight()
{
return this.height;
}
/**
* Mutator
*/
öffentliche Leere wachsenHöhe(int h)
{
this.height = this.height + h;
}
private int-Höhe;
}
Der Code zum Kopieren der ersten Zeile der obigen Anweisung lautet wie folgt:
Paket com.vamei.society;
Zeigt an, dass sich das Programm im Paket com.vamei.society befindet. com.vamei (die Umkehrung von vamei.com) stellt den Domänennamen des Paketautors dar (leider wurde dieser Domänenname von jemand anderem registriert und wird daher nur zu Demonstrationszwecken verwendet). Java erfordert, dass Pakete Domänennamenpräfixe haben, um verschiedene Autoren zu unterscheiden. Gesellschaft ist ein weiterer lokaler Pfadname. com.vamei.society bilden zusammen den Namen des Pakets.
Pakete stellen einen Namensraum für Java-Programme bereit. Der vollständige Pfad einer Java-Klasse besteht aus ihrem Paket- und Klassennamen, z. B. com.vamei.society.Human. Das entsprechende Human.java-Programm sollte unter com/vamei/society/ abgelegt werden. Klassen werden durch ihre vollständigen Pfade identifiziert, sodass Sie Klassen mit demselben Namen in verschiedenen Paketen haben können, ohne dass Java verwirrt wird. Beispielsweise sind com.vamei.society.Human und com.vamei.creature.Human zwei verschiedene Klassen.
Schauen wir uns noch ein Detail an. Die Human-Klasse ist öffentlich und ihr Konstruktor ist ebenfalls öffentlich, sodass jedes andere Objekt diese Klasse aufrufen kann. Wie bereits erwähnt, kann es in einer Java-Datei nur eine öffentliche Klasse geben, und die Klasse muss denselben Namen wie die .java-Datei haben. Eine Klasse benötigt nicht das Schlüsselwort public, das eigentlich eine Berechtigung darstellt: Die Klasse ist in dem Paket sichtbar, in dem sie sich befindet. Das heißt, andere Java-Programme im Paket können auf die Klasse zugreifen. Dies ist der Standardzugriff in Java.
Ebenso können Mitglieder eines Objekts auch Standardberechtigungen haben (sichtbar in Paketen). Beispielsweise entfernen wir das Schlüsselwort public vor der Methode getHeight().
Paketaufruf
Wir müssen nur die von Human.java kompilierte Human.class in den entsprechenden Ordner legen. Zum Beispiel habe ich Human.class in com/vamei/society/ eingefügt. Tatsächlich können Sie die .java-Datei auch in den entsprechenden Pfad einfügen, und Java wird bei Verwendung automatisch kompiliert.
Wenn sich das gesamte Paket (also der Com-Ordner) im aktuellen Arbeitspfad befindet, sind keine besonderen Einstellungen erforderlich, um das Paket zu verwenden, wie zum Beispiel die folgende TestAgain.java:
Kopieren Sie den Codecode wie folgt:
import com.vamei.society.*;
öffentliche Klasse TestAgain
{
public static void main(String[] args)
{
Human aPerson = new Human(180);
System.out.println(aPerson.getHeight());
}
}
import wird zum Identifizieren von Pfaden verwendet. Mit der Importanweisung können wir Klassen unter dem entsprechenden Pfad einführen. *Zeigt die Einführung aller Klassen im Gesellschaftsordner an. In TestAgain verwenden wir direkt die Human-Klasse.
Wir können auch den vollständigen Pfad zur Klasse bereitstellen. Dadurch können Klassen mit demselben Namen, aber unterschiedlichen Pfaden unterschieden werden, wie zum Beispiel:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse TestAgain
{
public static void main(String[] args)
{
com.vamei.society.Human aPerson =
neu com.vamei.society.Human(180);
System.out.println(aPerson.getHeight());
}
}
Da wir den vollständigen Klassenpfad bereitstellen, ist die Verwendung der Importanweisung nicht erforderlich.
Wenn das Paket nicht im aktuellen Arbeitspfad platziert ist, müssen wir Java benachrichtigen, wenn das Paket verwendet wird. Beispielsweise legen wir das Paket in /home/vamei/javapackage ab, sodass sich Human.class in /home/vamei/javapackage/com/vamei/society/Human.class befindet und unser Arbeitspfad /home/vamei ist. Auf diese Weise kann das Paket nicht gefunden werden. Eine Methode besteht darin, mit -classpath den Ordnerpfad anzugeben, in dem sich das Paket befindet, wenn Sie Javac und Java verwenden, zum Beispiel:
Kopieren Sie den Codecode wie folgt:
$javac -classpath /home/vamei/javapackage:. TestAgain.java
$java -classpath /home/vamei/javapackage:
Suchen Sie einfach nach dem Paket unter /home/vamei/javapackage und dem Arbeitspfad (.). Java kann die Human-Klasse unter /home/vamei/javapackage und die TestAgain-Klasse unter finden.
Darüber hinaus können Sie auch die Umgebungsvariable CLASSPATH des Systems festlegen und den oben genannten Pfad zur Variablen hinzufügen, ohne jedes Mal die Option -classpath eingeben zu müssen.
Paketähnliche Mechanismen sind auch in anderen Sprachen üblich, beispielsweise der Importmechanismus in Python. Es geht darum, bestehende Programme besser zu organisieren und zu nutzen. Mithilfe von Paketen können wir Java-Programme einfach erweitern und bestehende Java-Programmbibliotheken nutzen. Beachten Sie, dass das Paket .class-Dateien verwaltet. Java ist bekannt als „Einmal kompilieren, überall ausführen“ (Einmal kompilieren, überall ausführen). .class-Dateien können auf jeder Plattform ausgeführt werden, die mit einer Java Virtual Machine (JVM, Java Virtual Machine) ausgestattet ist, was uns hilft, durch Systemunterschiede verursachte Programmportierungsschwierigkeiten zu überwinden.
Die Unterschiede zwischen den Systemen können sehr groß sein. Wenn wir ein Programm in der Sprache C schreiben, muss das Quellprogramm auf jeder Plattform neu kompiliert werden, um es an unterschiedliche Hardwarebedingungen anzupassen. Die Java Virtual Machine verbindet die Plattform und das Java-Universum und bildet die mittlere Schicht zwischen Hardware und Programmierlogik. Die JVM verbirgt Hardwareunterschiede und bietet Programmierern ein „Standard“-Java-Universum. Die .class-Datei kann als die in diesem Java-Universum zirkulierende Währung betrachtet werden. Mit der JVM-Infrastruktur und der Paketverwaltungsunterstützung erreichen Java-Programme eine gute Portabilität.
Zusammenfassen
Paket, Import
Standardberechtigungen: Im Paket sichtbar
-classpath, CLASSPATH