CASSPATH: CLASSPATH je proměnná prostředí, kterou používá Application ClassLoader k vyhledání a načtení souborů .class. CLASSPATH definuje cestu k nalezení tříd třetích stran a uživatelem definovaných tříd, které nejsou rozšířeními nebo součástí platformy Java. Při nastavování CLASSPATH zahrňte všechny adresáře, které obsahují soubory .class a soubory JAR.
Musíte nastavit CLASSPATH, pokud:
rozhraní vs abstraktní třída
- Musíte načíst třídu, která není přítomna v aktuálním adresáři ani v žádných podadresářích.
- Musíte načíst třídu, která není v umístění určeném mechanismem rozšíření.
CLASSPATH závisí na tom, co nastavujete CLASSPATH. CLASSPATH má na konci název adresáře nebo souboru. Následující body popisují, jaký by měl být konec CLASSPATH.
- Pokud je JAR nebo zip, soubor obsahuje soubory třídy, CLASSPATH končí názvem souboru zip nebo JAR.
- Pokud jsou soubory třídy umístěny v nepojmenovaném balíčku, CLASSPATH končí adresářem, který obsahuje soubory třídy.
- Pokud jsou soubory třídy umístěny v pojmenovaném balíčku, CLASSPATH končí adresářem, který obsahuje kořenový balíček s úplným názvem balíčku, což je první balíček s úplným názvem balíčku.
Výchozí hodnota CLASSPATH je tečka (.). Znamená to jediný aktuální prohledávaný adresář. Výchozí hodnota CLASSPATH přepíše, když nastavíte proměnnou CLASSPATH nebo použijete příkaz -classpath (zkráceně -cp). Pokud chcete do vyhledávací cesty zahrnout aktuální adresář, vložte do nového nastavení tečku (.).
Pokud CLASSPATH najde soubor třídy, který je přítomen v aktuálním adresáři, načte třídu a použije ji, bez ohledu na to, zda se třída se stejným názvem nachází v jiném adresáři, který je také zahrnut v CLASSPATH.
Pokud chcete nastavit více cest k třídám, musíte každou třídu CLASSPATH oddělit středníkem (;).
Aplikace třetích stran (MySQL a Oracle), které používají JVM, mohou upravit proměnnou prostředí CLASSPATH tak, aby zahrnovala knihovny, které používají. Třídy mohou být uloženy v adresářích nebo souborech archivů. Třídy platformy Java jsou uloženy v rt.jar.
Existují dva způsoby, jak nastavit CLASSPATH: pomocí příkazového řádku nebo nastavením proměnné prostředí.
Podívejme se, jak nastavit CLASSPATH databáze MySQL:
Krok 1: Klepněte na tlačítko Windows a vyberte Ovládací panely. Vyberte Systém.
Krok 2: Klikněte na Pokročilé systémové nastavení .
Krok 3: Otevře se dialogové okno. Klikněte na Proměnné prostředí.
sql počet odlišný
Krok 4: Pokud již CLASSPATH v Systémových proměnných existuje, klikněte na tlačítko Upravit a na konec vložte středník (;). Vložte cestu souboru Java.jar konektoru MySQL.
Pokud CLASSPATH v systémových proměnných neexistuje, klikněte na tlačítko Nový a zadejte název proměnné jako CLASSPATH a hodnotu proměnné jako C:Program FilesJavajre1.8MySQL-Connector Java.jar;.;
Pamatujte: Dejte ;.; na konci CLASSPATH.
Rozdíl mezi PATH a CLASSPATH
CESTA | CLASSPATH |
---|---|
PATH je proměnná prostředí. | CLASSPATH je také proměnná prostředí. |
Používá jej operační systém k vyhledání spustitelných souborů (.exe). | Používá jej Application ClassLoader k vyhledání souboru .class. |
Musíte zahrnout adresář, který obsahuje soubory .exe. | Musíte zahrnout všechny adresáře, které obsahují soubory .class a JAR. |
Jakmile je proměnná prostředí PATH nastavena, nelze ji přepsat. | Proměnnou prostředí CLASSPATH lze přepsat pomocí volby příkazového řádku -cp nebo -CLASSPATH pro příkazy javac i java. |
Jak nastavit CLASSPATH ve Windows pomocí příkazového řádku
Do příkazového řádku zadejte následující příkaz a stiskněte enter.
set CLASSPATH=%CLASSPATH%;C:Program FilesJavajre1.8 t.jar;
Ve výše uvedeném příkazu je sada interním příkazem DOSu, který umožňuje uživateli změnit hodnotu proměnné. CLASSPATH je název proměnné. Proměnná uzavřená v procentech (%) je existující proměnná prostředí. Středník je oddělovač a za (;) je PATH souboru rt.jar.
java null check
Jak funguje ext složka v Javě
Adresář ext funguje trochu jako CLASSPATH. adresář ext je součástí mechanismu načítání třídy. Třídy, které jsou dostupné v JAR v adresáři ext, jsou dostupné pro Java aplikace.
Následující tabulka ukazuje klíčový rozdíl mezi CLASSPATH a Extension Mechanism:
Charakteristika | CLASSPATH | Mechanismus prodloužení |
---|---|---|
Pořadí načítání třídy | CLASSPATH se načte po zavedení bootstrapu a rozšíření. | ext se načte po načtení bootstrapu, ale před načtením CLASSPATH. |
Rozsah | Je to specifická aplikace. Všechny JRE na hostiteli jsou proměnnou prostředí CLASSPATH. | Všechny JVM běží ve specifických JRE java.ext.dirs. |
Název balíčku | java.class.path se používá k nalezení adresářů a JAR archivů obsahujících soubory tříd. | java.ext.dirs se používá k určení, kde mechanismus rozšíření načítá třídy. |
Specifikace | Je specifikován jménem včetně přípony.jar a adresáře obsahujícího soubory .class. | Načtou se všechny soubory JAR v určených adresářích. |
Mechanismus vyzvedne všechny soubory .jar z adresáře přípony, i když soubor nemá příponu .jar. Implementace je taková, že pokud lze změnit název jar umístěného v adresáři classpath tak, aby měl příponu jinou než .jar. Zástupný znak (*) jej nevybere. Tato technika nebude fungovat s adresářem rozšíření.
Pojďme pochopit proces provádění prostřednictvím příkladu.
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()); } }
Zkompilujte soubor A.java. zkompilovaný soubor A.class archivujeme do A.jar. Umístěte tento soubor JAR do jiného adresáře, než je zkompilovaný soubor B.class.
Abychom demonstrovali použití cesty ke třídě, umístíme soubor A.jar do adresáře C:JavaPrograms a přistoupíme k tomuto JAR pomocí zástupného znaku (*), aby jej B mohl použít.
Zjistili jsme, že B může stále načítat třídu A, zatímco jsme ji odstranili z aktuálního adresáře. Java launcher byl explicitně hledán pro C:JavaProgram. Je také možné načíst třídu bez její přítomnosti ve stejném adresáři a explicitní specifikaci classpath.
Často se o něm mluví jako o výhodě používání mechanismu rozšíření, protože všechny aplikace, které používají toto JRE, mohou vidět stejné třídy, aniž by je bylo nutné explicitně specifikovat na cestě ke třídě.
Co se stane, když změníme název A.jar na A.backup ve stejném adresáři odkazovaném na CLASSPATH. Když uděláme totéž, dojde k chybě NoClassDefFoundError, protože odkaz CLASSPATH nemá příponu .jar.
c struktura ve struktuře