Klassenpfad
Der Pfad und die Schreibmethode des Java -Compilers beim Kompilieren von .java -Dateien und Java -Virtual -Maschinen führen .CLASS -Dateien aus.
Javac kann ohne Einstellung von Klassenpfad-Umgebungsvariablen Vollpaden-Java-Dateien kompilieren. Zum Beispiel:
javac d: /myjava/helloworld.java
Generieren Sie nach der Zusammenstellung Klassendateien im selben Pfadverzeichnis.
Der standardmäßige Java -Virtual -Computer muss nach Klassendateien vom Pfad der Variablen für die Ausführung der ClassPath -Umgebungsvariable suchen. Für Java Virtual Machine ist dies keine Klassendatei, sondern eine Klasse. Es hat nur Klassenpfade, aber keine Dateisystempfade. Die Variable der ClassPath -Umgebung ist die Umgebung, die einen Suchklassenpfad für Java -Virtual -Maschinen bietet. Beachten Sie, dass die virtuelle Maschine nicht rekursiv nach Pfaden sucht, die vom Klassenpfad definiert sind.
Das heißt, die obige Java -Datei kann korrekt zusammengestellt werden, kann aber nicht ausgeführt werden. Aber wenn der Klassenpfad auf ".; D:/myjava/" eingestellt ist, sucht die java -virtuelle Maschine zuerst vom aktuellen Pfad und sucht dann nach der Klassendatei von d:/myjava.
Nachdem die obige Helloworld.java zusammengestellt wurde, kann es direkt ausgeführt werden:
Java HelloWorld
Oder wechseln Sie zum Verzeichnis d:/myjava und führen Sie Java HelloWorld aus.
Aber das Folgende ist der falsche Weg. Obwohl Newdir.java bei der Ausführung korrekt zusammengestellt werden kann, wird am Ende gesucht, ob Newdir.class im aktuellen Verzeichnis (d:/myjava) verfügbar ist, und dann suchen Sie, ob newdir.class in den D:/Myjava verfügbar ist, aber es wird nicht in die Subdirectory -NewDir -Sucht nach Klassendateien nachgelassen.
d:/cd myjavajavac newdir/newdir.javajava newdir
Zum Beispiel gibt es unter D:/Myjava/Hallo, es gibt zwei Java -Quelldateien, und deren Inhalt lauten wie folgt:
D:/Myjava/Hallo Cat.java Dog.javaCat.java============================================================================================================ public class hund {public static void main (String [] args) {cat c = new Cat (); }}Die Hundeklasse direkt neue Objekte der Katzenklasse in einer anderen Datei. Egal, ob es kompiliert oder ausgeführt wird, dies kann erfolgreich sein, da der Javac -Compiler automatisch nach Cat.Class von dem vom ClassPath angegebenen Pfad beim Kompilieren von hunde.java sucht. Dies ist nur der Weg zur Suche, und diese Klasse ist eine öffentliche Klasse, daher ist die Zusammenstellung erfolgreich.
Kurz gesagt, es sollte klar sein, dass der Javac -Compiler nach Dateipfaden sucht, was nichts mit der Umgebungsvariablen -Klassenpfad zu tun hat. Die virtuelle Java -Maschine sucht streng genommen nach Klassendateien und der Suchpfad wird durch den Umgebungsvariablenklassenpfad bestimmt und hat eine Sequenz.
Weitere Klassenpfadbeschreibungen finden Sie in "Paket" unten.
Paket
Pakete sind Sammlungen von Klassen. Schreiben Sie das Paketschlüsselwort in der ersten Zeile der Java -Quelldatei (ohne Kommentarlinien oder leere Zeilen) und geben Sie den Paketnamen an, Sie können die Klassendatei in das Paket einfügen.
Zum Beispiel die Datei d: /myjava/cat.java:
Paket com.longshuai.home; öffentliche Klasse Cat {public static void main (String [] args) {System.out.println ("com.longshuai.home.cat"); }}Dies bedeutet, die Katzenklasse in das Paket com.longshuai.Home zu setzen. Pakete sollten nach dem umgekehrten Domänennamen benannt werden, um zu verhindern, dass doppelte Paketnamen widersprüchlich sind. Dies ist natürlich nicht erforderlich.
Für Quelldateien, die keine Paketanweisungen verwenden, werden in ihnen Klassen in ihnen standardmäßig während der Zusammenstellung als "Nacktklassen" angesehen.
Die Java -Verwaltungspaketmethode wird auf der Verzeichnisebene verwaltet, die dem Paketnamen entspricht. Zum Beispiel sollte das obige Com.longshuai.Home -Paket unter com/longshuai/home (falls es sich um Windows, Backslash handelt), dh com/longshuai/home/cat.class platziert werden.
Javac sucht nach Dateien von Pfaden zur Kompilierung. Setzen Sie beispielsweise diese Cat.java unter com/longshuai/home. Bei der Ausführung sucht die Java Virtual Machine nach der Klassendatei aus dem Klassenpfad, und die Möglichkeit, die Klasse zu laden, besteht darin, "" zu verwenden ". Um verschiedene Arten von Namen zu verbinden. Daher sind die Methoden zum Kompilieren dieser Datei und zur Ausführung dieser Datei nach Java Virtual Machine:
Javac com/longshuai/home/cat.javajava com.longshuai.home.cat
Beachten Sie, dass es keine Beziehung zwischen verschachtelten Paketen wie Java.util -Paket und java.util.jar -Paketen gibt, die keine Abhängigkeiten haben.
Verwenden Sie die Klassen im Paket- und Importpaket (Import).
In einer Java -Quelldatei können Klassen in anderen Dateien nicht direkt verwendet werden, es sei denn, die Verwendung, die Sie verwenden möchten, kann vom Klassenpfad durchsucht werden. Um auf andere Klassen zu verweisen, die kein Klassenpfad sind, können Sie sie nur zum Klassenpfad hinzufügen oder in Pakete laden und dann auf die Klassen im Paket verweisen.
Verweise auf die Klasse im Paket können verwiesen werden, indem der Paketname angegeben wird. Zum Beispiel:
com.longshuai.home.cat c = new com.longshuai.home.cat ();
Aber das ist offensichtlich unpraktisch. Sie können die Importanweisung verwenden, um die Klassen in das Paket zu importieren, das Sie in den ersten Zeilen der Java -Quelldatei (jedoch nach dem Paketbefehl) verwenden müssen. Importieren Sie beispielsweise die Katzenklasse, damit Sie die Klasse direkt verwenden können:
import com.longshuai.home.cat; cat c = new Cat ();
Beim Importieren von Paketen können Sie am Ende das Sternchen "*" verwenden, um alle importierten Klassen wild zu erreichen, und nur "*" am Ende, da "*" mit dem Klassennamen übereinstimmt, nicht mit dem Paketnamen. Daher kann das "*" -Symbol nicht in den Schlägen verwendet werden, um Klassen in anderen Paketen anzuzeigen, z. B.:
import com.longshuai.home.*; // Alle Klassen im Com.longshuai.Home -Paket importieren com.longshuai.*; // Alle Klassen im Com.longshuai -Paket importieren, aber die Klassen in com.longshuai.home werden nicht importiert, //, obwohl es zwischen Levels nistet, haben diese Pakete keine Beziehung import com.*.*; // Dies ist der falsche Weg, es zu schreiben
Wenn im importierten Paket eine Klasse mit demselben Namen vorhanden ist, tritt ein widersprüchlicher Fehler auf, wenn sich auf die Klasse mit demselben Namen bezieht. Beispielsweise gibt es in den Paketen java.util und java.sql Dattelklassen.
Java.util importieren.*; Import Java.sql. }}
Zusammenstellung:
Javac test.javatest.java:11: Fehler: Die Referenz ist heute unklar Datum heute = new Date (); ^ Die Klasse java.sql.date in java.sql und die Klasse java.util.date in java.util beide übereinstimmen test.java: ^ Die Klasse java.sql.date in java.util und die Klasse java.util beide stimmen mit 2 Fehlern überein
Zu diesem Zeitpunkt können Sie die Datumsklasse ausdrücklich importieren oder den Paketnamen angeben, wenn Sie die Datumsklasse verwenden. Das heißt, die folgenden zwei Methoden sind korrekt:
// Methode 1: Import Java.util.*; Import Java.sql.*; Import Java.util.date; // Methode 2: import Java.util. }}
Neben dem Importieren von Klassen in Paketen können Sie auch statische Methoden und statische Variablen in Klassen in Paketen. Fügen Sie einfach das statische Schlüsselwort hinzu und geben Sie an, was importiert werden soll. Zum Beispiel:
statische Java.lang.System importieren.*; import static java.lang.System.out;
Nach statischen Importmethoden kann das Präfix beispielsweise weggelassen werden:
statische statische java.lang.System.out; öffentliche Klassenname {public static void main () {out.println ("helloWorld"); // äquivalent zu System.out.println ("HelloWorld"); }}Archivpaket in das JAR -Paket Archiv
Die virtuelle Java -Maschine kann das JAR -Paket direkt erkennen. Sie können den Pfad, der dem Paketnamen entspricht, mit dem Befehl jar in ein JAR -Paket archivieren. Die Anweisungen zur Verwendung des JAR -Befehls lautet wie folgt:
jar use -n Nach dem Erstellen einer neuen Datei Pack200 Normalisierung durchführen -ENGEBENDEN SIE DEN ANWENDUNGS -Einstiegspunkt für eine eigenständige Anwendung, die nur in einem ausführbaren JAR -Datei -0 -Speicher gebündelt ist. Verwenden Sie keine ZIP -Komprimierung -P -Pecting Die führende '/' (Absolute Pfad) und ".." (übergeordnete Verzeichnis) Komponente -m erstellt die Manifestdatei für Einträge -i nicht die angegebene JAR -Dateigenerierungsindexinformation -c -Änderung in das angegebene Verzeichnis und enthält die folgenden Dateien, wenn eine Datei ein Verzeichnis ist. Die angegebene Reihenfolge des Manifest -Dateinamens, des Archivdateinamens und des Einstiegspunktnamens entspricht dem der Tags "M", "F" und "E".
Zum Beispiel Paket A.Class und B.Class im aktuellen Verzeichnis in test.jar:
Jar CVF Test.Jar A.Class B. Klasse
Überprüfen Sie die Liste der Dateien im JAR -Paket und werden rekursiv angezeigt:
jar -tf test.jarmeta-inf/meta-inf/Manifest.mfjieChieg.Class
Archivieren Sie beispielsweise das COM -Verzeichnis in d: /dp.jar.
jar cvf d:/dp.jar com/Added manifest is being added: com/(input=0) (output=0) (storage 0%)Added: com/longshuai/(input=0) (output=0) (storage 0%)Added: com/longshuai/home/(input=0) (output=0) (storage 0%)Added: com/longshuai/home/Bird.class (input=420) (output=291) (compressed 30%)Added: com/longshuai/home/Bird.java(input=136) (output=100) (compressed 26%)Added: com/longshuai/home/Cat.class (input=417) (output= 289)(Compressed by 30%)Adding: com/longshuai/home/Cat.java(Input = 134) (Output = 99)(Compressed by 26%)
Mit der JAR -Datei können Sie den Pfad des ClassPath direkt auf den JAR -Dateinamen festlegen, sodass Sie bei der Suche nach Klassendateien direkt in der JAR -Datei suchen. Zum Beispiel ist der Klassenpfad auf:
.; d:/myjava; d: /dp.jar
Klassensuchmechanismus
Bei der Suche nach Klassendateien in virtuellen Java -Maschinen werden zusätzlich zu dem von der ClassPath -Umgebungsvariablen angegebenen Pfad zwei Standardpfade zuerst durchsucht: JRE/lib und jre/lib/ext, Klassen, die in der JAR -Datei unter jre/lib/ext durchsucht werden.
Wenn der ClassPath auf ".; D:/myjava; d:/myjar.jar" festgelegt wird, möchten Sie nach der Klassendatei com.longshuai.com.cat suchen:
(A). Erste Suche nach JAR -Dateien unter jre/lib und jre/lib/ext;
(b) .Search, ob es im aktuellen Verzeichnis com/longshuai/com/cat.class gibt;
(c) .Search d: /myjava/cat.class erneut;
(d) .Search, ob es eine com.longshuai.com.cat -Klasse in der Datei d: /myjar.jar gibt.
Wenn in einer Java -Quelldatei auf Kompilierungszeit auf eine Klasse verwiesen wird, werden die folgenden Methoden verwendet, um festzustellen, ob die Klasse angemessen und gültig ist:
(1) .search, ob die importierte Paketklasse die Klasse enthält.
(2). Suche nach implizit importiertem Java.lang -Paket, das standardmäßig importiert wird.
(3). Ob diese Klasse in der aktuellen Datei definiert ist.
(4). Suchen Sie, ob sich die Klasse gemäß den Suchregeln des Klassenpfads befindet ((a)-(d)).
erben
Die semantische Logik von "Was ist das, was" zwischen den Klassen reflektiert werden kann, so dass die Erbe der Klassen realisiert werden kann. Zum Beispiel ist eine Katze ein Tier, dann kann eine Katze eine Tierklasse erben, während eine Katzenklasse als Unterklasse bezeichnet wird und eine Tierklasse als Elternklasse bezeichnet wird.
Nachdem die Unterklasse die übergeordnete Klasse erbt, hat die Unterklasse alle Mitglieder der übergeordneten Klasse, einschließlich Mitgliedervariablen und -methoden. Tatsächlich wird im Speicher, wenn neue Subklassenobjekte verwendet werden, ein Teil des Bereichs in den Haufen unterteilt, um Attribute zu speichern, die von der übergeordneten Klasse geerbt wurden. Zum Beispiel das Gebiet A, das von neuem Elternteil erhalten wurde, das von neue Kind erhaltene Gebiet B und das Gebiet A befindet sich im Bereich B B. B.
Der Grund, warum das untergeordnete Objekt ein übergeordnetes Objekt enthält, ist, dass das untergeordnete Objekt zuerst aufgerufen wird, um das untergeordnete Objekt zu konstruieren, und wenn das untergeordnete Objekt anfängt, das untergeordnete Objekt zu konstruieren, wird der Konstruktor der übergeordneten Klassen zuerst aufgerufen, um das übergeordnete Objekt zu konstruieren. Mit anderen Worten, bevor ein untergeordnetes Objekt ein Kinderobjekt bildet, wird das übergeordnete Objekt immer zuerst gebildet und ergänzen dann die Attribute im untergeordneten Objekt langsam. Für spezifische Inhalte finden Sie "SUPER () der Konstruktionsmethode während der Vererbung neu".
Eine Unterklasse hat nicht nur Mitglieder der Elternklasse, sondern auch ihre eigenen einzigartigen Mitglieder wie ihre eigenen Methoden und ihre eigenen Mitgliedsvariablen. Es ist leicht zu verstehen, dass die Mitgliedsnamen in Unterklassen und übergeordneten Klassen unterschiedlich sind, aber sie können auch gleichermaßen gleichermaßen sind. Wenn es gleichnamige Methoden gibt, die von der Elternklasse in der Unterklasse geerbt wurden , wie beispielsweise die Elternklasse hat die EAT () -Methode und die untergeordnete Klasse hat auch die EAT () -Methode, dann kann dies ein Umschreiben der Methode sein (siehe unten). Wenn die Mitgliedsvariablen in der Unterklasse und die Mitgliedsvariablen der übergeordneten Klasse denselben Namen haben, sind sie unabhängig voneinander . Zum Beispiel hat die übergeordnete Klasse ein Namensattribut, und die Unterklasse definiert auch ein Namensattribut selbst, was zulässig ist, da sie mit diesem bzw. Super genannt werden können.
Verwenden Sie erweitertes Schlüsselwort, wenn Sie Klassen erben. Beim Erben ermöglicht Java nur die Vererbung einer übergeordneten Klasse.
Klasse Person {String Name; int Alter; void eat () {System.out.println ("Essen ...");} void sleep () {System.out.println ("Sleep ...");}} Klasse Student erweitert Person {int studentId; Student (int id, String name, int age) {this.name = name; this.age = Alter; this.studentid = id; } void sty Study () {System.out.println ("Studing ...");}} öffentliche Klasse erben {public static void main (string [] args) {student s1 = neuer Schüler (1, "Malongshuai, 23); System.out.println (S1.Studentid+","+S1.Name+","+S1.age); s1.eat (); s1.sleep (); S1.Study (); }}Die obige Beispielerklärung basierend auf dem Java -Klassenpath -Klassenpath und -Paket ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.