KLASSENPFAD: CLASSPATH ist eine Umgebungsvariable, die von Application ClassLoader zum Suchen und Laden der .class-Dateien verwendet wird. Der CLASSPATH definiert den Pfad, um Klassen von Drittanbietern und benutzerdefinierten Klassen zu finden, die keine Erweiterungen oder Teil der Java-Plattform sind. Beziehen Sie alle Verzeichnisse mit ein, die .class-Dateien und JAR-Dateien enthalten, wenn Sie den CLASSPATH festlegen.
Sie müssen den CLASSPATH festlegen, wenn:
Absicht Absicht
- Sie müssen eine Klasse laden, die im aktuellen Verzeichnis oder in Unterverzeichnissen nicht vorhanden ist.
- Sie müssen eine Klasse laden, die sich nicht an einem vom Erweiterungsmechanismus angegebenen Speicherort befindet.
Der CLASSPATH hängt davon ab, was Sie als CLASSPATH festlegen. Der CLASSPATH hat am Ende einen Verzeichnisnamen oder Dateinamen. Die folgenden Punkte beschreiben, was das Ende des CLASSPATH sein sollte.
- Wenn es sich um eine JAR- oder ZIP-Datei handelt und die Datei Klassendateien enthält, endet der CLASSPATH mit dem Namen der ZIP- oder JAR-Datei.
- Wenn Klassendateien in einem unbenannten Paket abgelegt werden, endet der CLASSPATH mit dem Verzeichnis, das die Klassendateien enthält.
- Wenn Klassendateien in einem benannten Paket abgelegt werden, endet der CLASSPATH mit dem Verzeichnis, das das Stammpaket im vollständigen Paketnamen enthält, also das erste Paket im vollständigen Paketnamen.
Der Standardwert von CLASSPATH ist ein Punkt (.). Es bedeutet, dass das einzige aktuelle Verzeichnis durchsucht wird. Der Standardwert von CLASSPATH wird überschrieben, wenn Sie die Variable CLASSPATH festlegen oder den Befehl -classpath (kurz -cp) verwenden. Fügen Sie einen Punkt (.) in die neue Einstellung ein, wenn Sie das aktuelle Verzeichnis in den Suchpfad einbeziehen möchten.
Wenn CLASSPATH eine Klassendatei findet, die im aktuellen Verzeichnis vorhanden ist, wird die Klasse geladen und verwendet, unabhängig davon, ob die gleichnamige Klasse in einem anderen Verzeichnis vorhanden ist, das ebenfalls im CLASSPATH enthalten ist.
Wenn Sie mehrere Klassenpfade festlegen möchten, müssen Sie die einzelnen Klassenpfade durch ein Semikolon (;) trennen.
Die Drittanbieteranwendungen (MySQL und Oracle), die die JVM verwenden, können die Umgebungsvariable CLASSPATH ändern, um die von ihnen verwendeten Bibliotheken einzuschließen. Die Klassen können in Verzeichnissen oder Archivdateien gespeichert werden. Die Klassen der Java-Plattform werden in rt.jar gespeichert.
Es gibt zwei Möglichkeiten, CLASSPATH festzulegen: über die Eingabeaufforderung oder durch Festlegen einer Umgebungsvariablen.
Sehen wir uns an, wie man CLASSPATH der MySQL-Datenbank festlegt:
Schritt 1: Klicken Sie auf die Windows-Schaltfläche und wählen Sie Systemsteuerung. Wählen Sie System.
Schritt 2: Klicke auf Erweiterte Systemeinstellungen .
Schritt 3: Es öffnet sich ein Dialogfenster. Klicken Sie auf Umgebungsvariablen.
Schritt 4: Wenn der CLASSPATH bereits in den Systemvariablen vorhanden ist, klicken Sie auf die Schaltfläche Bearbeiten und fügen Sie am Ende ein Semikolon (;) ein. Fügen Sie die Datei Path of MySQL-Connector Java.jar ein.
Wenn der CLASSPATH in den Systemvariablen nicht vorhanden ist, klicken Sie auf die Schaltfläche „Neu“ und geben Sie den Variablennamen als „CLASSPATH“ und den Variablenwert als ein C:ProgrammeJavajre1.8MySQL-Connector Java.jar;.;
Wie groß ist dieser Monitor?
Denken Sie daran: Setzen Sie ;.; am Ende des CLASSPATH.
Unterschied zwischen PATH und CLASSPATH
WEG | KLASSENPfad |
---|---|
PATH ist eine Umgebungsvariable. | CLASSPATH ist auch eine Umgebungsvariable. |
Es wird vom Betriebssystem verwendet, um die ausführbaren Dateien (.exe) zu finden. | Es wird vom Application ClassLoader verwendet, um die .class-Datei zu finden. |
Sie müssen das Verzeichnis angeben, das die .exe-Dateien enthält. | Sie müssen alle Verzeichnisse einschließen, die .class- und JAR-Dateien enthalten. |
Sobald die Umgebungsvariable PATH festgelegt ist, kann sie nicht überschrieben werden. | Die Umgebungsvariable CLASSPATH kann überschrieben werden, indem die Befehlszeilenoption -cp oder -CLASSPATH sowohl für javac als auch für den Java-Befehl verwendet wird. |
So legen Sie CLASSPATH in Windows mithilfe der Eingabeaufforderung fest
Geben Sie den folgenden Befehl in Ihre Eingabeaufforderung ein und drücken Sie die Eingabetaste.
set CLASSPATH=%CLASSPATH%;C:Program FilesJavajre1.8 t.jar;
Im obigen Befehl ist „Set“ ein interner DOS-Befehl, der es dem Benutzer ermöglicht, den Variablenwert zu ändern. CLASSPATH ist ein Variablenname. Die im Prozentzeichen (%) eingeschlossene Variable ist eine vorhandene Umgebungsvariable. Das Semikolon ist ein Trennzeichen und nach dem (;) steht der PFAD der rt.jar-Datei.
Java-Swing-Tutorial
So funktioniert der Ext-Ordner in Java
Das ext-Verzeichnis funktioniert ein bisschen wie der CLASSPATH. Das ext-Verzeichnis ist Teil des Klassenlademechanismus. Die Klassen, die in JARs im ext-Verzeichnis verfügbar sind, stehen Java-Anwendungen zur Verfügung.
Die folgende Tabelle zeigt den Hauptunterschied zwischen CLASSPATH und Extension Mechanism:
Eigenschaften | KLASSENPfad | Erweiterungsmechanismus |
---|---|---|
Reihenfolge beim Laden der Klasse | CLASSPATH wird nach dem Bootstrap- und Erweiterungsladen geladen. | ext wird nach dem Bootstrap-Laden, aber vor dem CLASSPATH-Laden geladen. |
Umfang | Es ist anwendungsspezifisch. Für alle JREs auf dem Host gilt die Umgebungsvariable CLASSPATH. | Alle JVMs werden in bestimmten JRE-java.ext.dirs ausgeführt. |
Paketnamen | java.class.path wird verwendet, um die Verzeichnisse und JAR-Archive zu finden, die Klassendateien enthalten. | java.ext.dirs wird verwendet, um anzugeben, wo der Erweiterungsmechanismus Klassen lädt. |
Spezifikation | Es wird durch den Namen einschließlich der Erweiterung.jar und des Verzeichnisses mit den .class-Dateien angegeben. | Alle JAR-Dateien in den angegebenen Verzeichnissen werden geladen. |
Der Mechanismus holt alle .jar-Dateien aus dem Erweiterungsverzeichnis, auch wenn die Datei nicht die Erweiterung .jar hat. Die Implementierung besteht darin, dass man den Namen einer in einem Klassenpfadverzeichnis abgelegten JAR so ändern kann, dass sie eine andere Erweiterung als .jar erhält. Der Platzhalter (*) übernimmt es nicht. Diese Technik funktioniert nicht mit dem Erweiterungsverzeichnis.
Lassen Sie uns den Ausführungsprozess anhand eines Beispiels verstehen.
A.java
public class A { public String toString() { return 'hello'; } }
B.java
public class B { public static void main(final String[] args) { System.out.println(new A()); } }
Kompilieren Sie die A.java-Datei. Wir werden die kompilierte A.class-Datei in A.jar archivieren. Platzieren Sie diese JAR-Datei in einem anderen Verzeichnis als der kompilierten B.class-Datei.
Um die Verwendung des Klassenpfads zu demonstrieren, platzieren wir die A.jar-Datei im Verzeichnis C:JavaPrograms und greifen über einen Platzhalter (*) auf diese JAR-Datei zu, damit B sie verwenden kann.
Wir haben festgestellt, dass B die A.class immer noch laden kann, obwohl wir sie aus dem aktuellen Verzeichnis gelöscht haben. Der Java-Launcher wurde explizit nach C:JavaProgram gesucht. Es ist auch möglich, die Klasse zu laden, ohne dass sie sich im selben Verzeichnis befindet und ohne explizite Klassenpfadangabe.
Dies wird oft als Vorteil der Verwendung des Erweiterungsmechanismus bezeichnet, da alle Anwendungen, die diese JRE verwenden, dieselben Klassen sehen können, ohne sie explizit im Klassenpfad angeben zu müssen.
Was passiert, wenn wir den Namen von A.jar in A.backup im selben CLASSPATH-referenzierten Verzeichnis ändern? NoClassDefFoundError tritt auf, wenn wir dasselbe tun, da die CLASSPATH-Referenz nicht die Erweiterung .jar hat.
Text mit CSS unterstreichen