亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中classpath講解及使用方式

 更新時(shí)間:2021年12月31日 15:54:43   作者:KingWang_WHU  
本文詳細(xì)講解了Java中classpath講解及使用方式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

筆者之前對(duì)于classpath都沒(méi)有什么深入的研究,之前的項(xiàng)目打包jar包都是按照網(wǎng)上的教程自己照著葫蘆畫(huà)瓢。但是因?yàn)樽罱龅揭恍╆P(guān)于這方面的知識(shí),因此索性覺(jué)得要好好補(bǔ)充一下這方面的知識(shí)。下面的文章主要是翻譯自oralce官網(wǎng)關(guān)于設(shè)置classpath的說(shuō)明Setting the class path,并對(duì)其中一些地方進(jìn)行了部分的補(bǔ)充說(shuō)明,方便讀者理解。

概要

classpath是Java運(yùn)行時(shí)環(huán)境搜索類和其他資源文件(比如jar\zip等資源)的路徑??梢酝ㄟ^(guò)JDK工具(比如javac命令、java命令)后面的-classpath 參數(shù)設(shè)置classpath(這個(gè)可以通過(guò)裝有java環(huán)境的dos窗口下輸入sdktool的命令來(lái)查看可以輸入的參數(shù)選項(xiàng),見(jiàn)下圖)

或通過(guò)設(shè)置CLASSPATH環(huán)境變量。該 -classpath選項(xiàng)是首選項(xiàng),因?yàn)槟梢詾槊總€(gè)應(yīng)用程序單獨(dú)設(shè)置,而不會(huì)影響其他應(yīng)用程序,而無(wú)需其他應(yīng)用程序修改其值。

下面是這兩種方式的說(shuō)明示例:

  • (1)通過(guò)jdk的命令行來(lái)為每個(gè)application設(shè)置

這個(gè)設(shè)置主要是為每個(gè)application設(shè)置,并不會(huì)影響別的程序的classpath以及環(huán)境變量的classpath,他只在當(dāng)前窗口生效。

C:> sdkTool -classpath classpath1 ;classpath2 …

  • (2)設(shè)置classpath環(huán)境變量,這個(gè)是全局設(shè)置,對(duì)所有的應(yīng)用程序生效

C:> set CLASSPATH=classpath1 ;classpath2 …

sdkTool

一個(gè)命令行工具,例如java, javac,javadoc,或apt。有關(guān)列表,請(qǐng)參閱JDK工具。

classpath1 ;classpath2

.jar,.zip或.class文件的classpath。每個(gè)classpath應(yīng)以文件名或目錄結(jié)尾,針對(duì)不同的情況,設(shè)置classpath的格式方法如下:

  • (1)對(duì)于包含.class文件的.jar或.zip文件,classpath以.zip或.jar文件的名稱結(jié)尾。

下面是示例,筆者自己將一個(gè)工程打包成jar包,同時(shí)指定這個(gè)jar包下的某個(gè)class文件運(yùn)行。結(jié)果如下:

下面是工程的目錄,其中工程中引用了其他jar包,筆者在打包的時(shí)候,用maven的assembly插件打包成了一個(gè)fat jar(想要了解具體打包方法,查看這兩篇博文:

【Java】打包Jar包并用腳本執(zhí)行

【Maven】Maven系列(二)——利用assembly插件打包

查看下面的classpath的值是怎么指定的。

  • (2)對(duì)于未命名包中的.class文件,classpath以包含.class文件的目錄結(jié)束。比如一個(gè)a.class文件在d:path1\path2下,但是這個(gè)a.class沒(méi)有package,那么如果想讓jvm搜索到這個(gè)class文件,這時(shí)指定classpath的時(shí)候,可以使用d:path1\path2,因?yàn)閏lasspath的默認(rèn)路徑是當(dāng)前路徑,因此在使用的時(shí)候,如果是在當(dāng)前路徑下打開(kāi)dos窗口,classpath命令缺省,那么這個(gè)時(shí)候其效果與指定當(dāng)前路徑為classpath的效果等效。如下的示例:

test.java

public class test {
    public static void main(String[] args) {
        System.out.println("hello world!");
    }
}

這個(gè)類是沒(méi)有package的。

下面是運(yùn)行結(jié)果:

程序運(yùn)行成功

  • (3)對(duì)于命名包中的.class文件,類路徑以包含“root”包(完整包名稱中的第一個(gè)包)的目錄結(jié)束。

示例如下:

Equals.java在名為string的package下

package string;
public class Equals {
    public static void main(String[] args){
        String a=new String("test");
        String b=new String("test");
        System.out.println(a==b);
    }
}

那么對(duì)于這種情況,指定classpath的方式如下:

通過(guò)上面幾條命令,可以看出來(lái)正確的命令行格式如下:

java -classpath package_rootpath package_name.class_name

多個(gè)路徑條目以分號(hào)分隔。使用set命令,等號(hào)(=)周圍的空格可以忽略。

默認(rèn)classpath是當(dāng)前目錄。設(shè)置 CLASSPATH變量或使用 -classpath命令行選項(xiàng)將覆蓋該默認(rèn)值,因此,如果要在搜索路徑中包含當(dāng)前目錄,則必須在新設(shè)置中包含“ . ”(關(guān)于路徑的說(shuō)明可以參考筆者的另一篇博文)。

既不是目錄也不是歸檔(.zip或.jar文件)和*的classpath會(huì)被忽略。

描述

類路徑告訴JDK工具和應(yīng)用程序在哪里可以找到第三方和用戶定義的類 - 即不是Java 擴(kuò)展或Java平臺(tái)的一部分的類。類路徑需要找到你用javac編譯器編譯的任何類——其默認(rèn)值是當(dāng)前目錄,以方便地找到這些類。

JDK,JVM和其他JDK工具通過(guò)按順序搜索Java平臺(tái)(bootstrap)類,任何擴(kuò)展類和類路徑來(lái)查找類。(有關(guān)搜索策略的詳細(xì)信息,請(qǐng)參閱如何找到類。)大多數(shù)應(yīng)用程序的類庫(kù)都希望利用擴(kuò)展機(jī)制。您只需要設(shè)置classpath,當(dāng)您要加載的class滿足下面的條件(a)不在當(dāng)前目錄或其任何子目錄中的類時(shí),(b)不在擴(kuò)展機(jī)制指定的位置。

如果要從舊版本的JDK升級(jí),啟動(dòng)設(shè)置可能包含CLASSPATH不再需要的設(shè)置。您應(yīng)該刪除任何不是特定于應(yīng)用程序的設(shè)置,例如classes.zip。使用Java虛擬機(jī)的某些第三方應(yīng)用程序可能會(huì)修改您的CLASSPATH環(huán)境變量以包含它們使用的庫(kù)。這樣的設(shè)置可以保持不變。

當(dāng)您調(diào)用JVM或其他JDK工具或使用環(huán)境變量時(shí),可以使用JDK工具’ -classpath選項(xiàng)來(lái)更改classpath。使用該選項(xiàng)優(yōu)于設(shè)置環(huán)境變量,因?yàn)槟梢詾槊總€(gè)應(yīng)用程序單獨(dú)設(shè)置,而不會(huì)影響其他應(yīng)用程序,而無(wú)需其他應(yīng)用程序修改其值。

類可以存儲(chǔ)在目錄(文件夾)或歸檔文件(這里指的歸檔文件也就是那些jar包和zip包)中。Java平臺(tái)類存儲(chǔ)在 rt.jar。有關(guān)歸檔的更多詳細(xì)信息以及有關(guān)類路徑的工作原理的信息,請(qǐng)參閱本文檔末尾附近的類路徑和包名稱。

重要說(shuō)明:某些舊版本的JDK sofware 在默認(rèn)的類路徑中包含一個(gè)/classes條目。該目錄存在供JDK軟件使用,不應(yīng)用于應(yīng)用程序類。應(yīng)用程序類應(yīng)放在JDK等級(jí)目錄之外。這樣,安裝新的JDK并不會(huì)強(qiáng)制您重新安裝應(yīng)用程序類。為了與舊版本兼容,使用/classes目錄作為類庫(kù)的應(yīng)用程序 將以當(dāng)前版本運(yùn)行,但不保證將在以后的版本中運(yùn)行。

使用JDK工具的-classpath選項(xiàng)

JDK工具java,jdb,javac和javah有一個(gè)-classpath選項(xiàng),用于替換由classpath環(huán)境變量指定的路徑 。這是改變classpath設(shè)置的推薦選項(xiàng),因?yàn)槊總€(gè)應(yīng)用程序都可以具有所需的classpath,而不會(huì)干擾任何其他應(yīng)用程序。

運(yùn)行時(shí)工具java也有一個(gè) -cp選項(xiàng)。此選項(xiàng)是-classpath的縮寫。

對(duì)于非常特殊的情況,java和 javac都有選項(xiàng),可以讓您更改用于查找自己的類庫(kù)的路徑。然而,絕大多數(shù)用戶將永遠(yuǎn)不需要使用這些選項(xiàng)。

使用CLASSPATH環(huán)境變量

一般來(lái)說(shuō),您使用-classpath 命令行選項(xiàng)要像上一節(jié)介紹的那樣。本節(jié)介紹如何設(shè)置CLASSPATH環(huán)境變量,或者清除以前安裝中留下的設(shè)置。

設(shè)置CLASSPATH

在CLASSPATH環(huán)境變量修飾的組命令。格式為:

set CLASSPATH = path1 ; path2…

路徑應(yīng)以指定驅(qū)動(dòng)器的字母開(kāi)頭,例如C:\。這樣,如果您碰巧切換到其他驅(qū)動(dòng)器,則仍然會(huì)找到class文件。(如果設(shè)置的路徑是D:\,那么jvm就會(huì)去D盤下找這個(gè)class,而不是在C盤下)

清除CLASSPATH

如果您的CLASSPATH環(huán)境變量設(shè)置為不正確的值,或者您的啟動(dòng)文件或腳本設(shè)置不正確的路徑,可以CLASSPATH 使用以下命令取消設(shè)置:

  C:> set CLASSPATH =

此命令僅在當(dāng)前命令提示符窗口中取消CLASSPATH。您還應(yīng)刪除或修改啟動(dòng)設(shè)置,以確保CLASSPATH在將來(lái)的會(huì)話中擁有正確的設(shè)置。

更改啟動(dòng)設(shè)置

如果CLASSPATH變量在系統(tǒng)啟動(dòng)時(shí)設(shè)置,則要查找的位置取決于您的操作系統(tǒng):

對(duì)于Windows 95和98,檢查autoexec.bat的 set命令。

其他(Windows NT,Windows 2000,…) 的系統(tǒng),CLASSPATH 環(huán)境變量可以使用控制面板中的系統(tǒng)實(shí)用程序來(lái)設(shè)定。

了解類路徑通配符

類路徑條目可包含基名通配符*,這被認(rèn)為等同于指定在擴(kuò)展目錄下的所有文件的列表.jar或 .JAR。例如,類路徑條目 foo/* 指的就是foo目錄下的所有JAR文件。一個(gè)簡(jiǎn)單由*組成的類路徑指的就是當(dāng)前目錄中所有jar文件的列表。

通配符*的classpath寫法對(duì)于class文件來(lái)說(shuō)不適用(意思就是通配符*適用的對(duì)象是jar而不是class)。要在單個(gè)目錄中匹配類和JAR文件 foo,請(qǐng)使用foo;foo/*或 foo/*;foo。前者的順序決定了foo文件目錄下的類和資源加載在前,jar加載在后,后者反之亦然。

子目錄不是遞歸搜索。例如, foo/*僅在查找JAR文件foo,而不包括foo/bar,foo/baz等子目錄。

擴(kuò)展類路徑中枚舉目錄中的JAR文件的順序未指定(The order in which the JAR files in a directory are enumerated in the expanded class path is not specified,這一句沒(méi)看懂,讀者如果有了解的,可以留言回復(fù)一下,謝謝?。?,并且可能因平臺(tái)而異,甚至在同一臺(tái)機(jī)器上也會(huì)隨時(shí)變化。構(gòu)建良好的應(yīng)用程序不應(yīng)取決于任何特定的順序。如果需要特定的順序,則JAR文件可以在類路徑中顯式枚舉。

通配符的擴(kuò)展這一過(guò)程是在調(diào)用程序的main方法之前,在類加載過(guò)程期間。每個(gè)包含通配符的輸入類路徑將被枚舉為這個(gè)目錄下的所有JAR文件路徑。例如,如果目錄foo包含 a.jar,b.jar和c.jar,然后將類路徑foo/*擴(kuò)展為 foo/a.jar;foo/b.jar;foo/c.jar,并且該字符串將是系統(tǒng)屬性的值 java.class.path。

CLASSPATH環(huán)境變量和-classpath(或 -cp)的命令行選項(xiàng)沒(méi)什么不同的。也就是說(shuō),通配符在所有情況下都是一樣適用的。但是,類路徑通配符在Class-Path jar-manifest頭文件中并不符合要求(這一句話也不是很理解,希望讀者指教!)。

了解類路徑和包名稱

Java類被組織成被映射到文件系統(tǒng)中的目錄的包。但是,與文件系統(tǒng)不同,無(wú)論何時(shí)指定包名稱,都可以指定整個(gè) 包名稱,而不是它的一部分。例如,對(duì)于包名稱 java.awt.Button是總是指定為 java.awt。

例如,假設(shè)您希望Java運(yùn)行時(shí)可以找到Cool.class該類在utility.myapp包下。如果該目錄的路徑是 C:\java\MyClasses\utility\myapp,那么設(shè)置的classpath就應(yīng)該包含C:\java\MyClasses。

要運(yùn)行該應(yīng)用程序,可以使用以下JVM命令:

C:> java -classpath C:\ java \ MyClasses utility.myapp.Cool

當(dāng)應(yīng)用程序運(yùn)行時(shí),JVM使用這個(gè)classpath設(shè)置來(lái)查找utility.myapp包中定義的任何其他類(也包括Cool類)。

請(qǐng)注意,命令中指定了整個(gè)包名稱。如果是設(shè)置classpath為C:\java\MyClasses\utility并使用命令 java myapp.Cool,這種做法是不可能成功的。JVM找不到這個(gè)類。

(你可能想知道什么定義了一個(gè)類的包名稱,答案是包名是類的一部分,不能修改,除了重新編譯該類)。

注意:包指定機(jī)制的一個(gè)有趣的后果是,作為同一包的一部分的文件實(shí)際上可能存在于不同的目錄中。每個(gè)類的包名稱將相同,但是每個(gè)文件的路徑可以從類路徑中的不同目錄開(kāi)始。

文件夾和歸檔文件

當(dāng)類存儲(chǔ)在目錄(文件夾)中時(shí), 比如存儲(chǔ)在c:\java\MyClasses\utility\myapp,那么classpath條目指向包含包名稱的第一個(gè)元素的目錄。也就是package的上一級(jí)目錄(在這種情況下,classpath就是C:\java\MyClasses,因?yàn)榘莡tility.myapp。)

但是當(dāng)類存儲(chǔ)在歸檔文件(.zip或.jar文件)中時(shí),類路徑條目是.zip或.jar文件的路徑并包含.zip或.jar文件。例如,要使用.jar文件中的類庫(kù),命令將如下所示:

C:> java -classpath C:\ java \ MyClasses \ myclasses.jar utility.myapp.Cool

多重指定

要查找C:\java\MyClasses目錄下的類以及C:\java\OtherClasses目錄下的類,那么請(qǐng)將類路徑設(shè)置為:

C:> java -classpath C:\ java \ MyClasses; C:\ java \ OtherClasses …

請(qǐng)注意,這兩個(gè)路徑以分號(hào)分隔。

指定順序

多個(gè)classpath的順序很重要。Java解釋器將按照它們?cè)赾lasspath變量中出現(xiàn)的順序來(lái)查找目錄中的類。在上面的例子中,Java解釋器將首先在C:\java\MyClasses目錄下查找類。只有在該目錄中找不到具有正確名稱的類時(shí),解釋器才會(huì)在C:\java\OtherClasses 目錄中查找。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決IDEA target文件夾越來(lái)越大的問(wèn)題

    解決IDEA target文件夾越來(lái)越大的問(wèn)題

    這篇文章主要介紹了解決IDEA target文件夾越來(lái)越大的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 基于Java利用static實(shí)現(xiàn)單例模式

    基于Java利用static實(shí)現(xiàn)單例模式

    這篇文章主要介紹了基于Java利用static實(shí)現(xiàn)單例模式,當(dāng)在多個(gè)線程同時(shí)觸發(fā)類的初始化過(guò)程的時(shí)候static不會(huì)被多次執(zhí)行,下面我們一起進(jìn)入文章看看具體要的原因
    2022-01-01
  • SpringBoot如何動(dòng)態(tài)改變?nèi)罩炯?jí)別

    SpringBoot如何動(dòng)態(tài)改變?nèi)罩炯?jí)別

    這篇文章主要介紹了SpringBoot如何動(dòng)態(tài)改變?nèi)罩炯?jí)別,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-12-12
  • java list集合排序按某一屬性排序操作

    java list集合排序按某一屬性排序操作

    這篇文章主要介紹了java list集合排序按某一屬性排序操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Tomcat啟動(dòng)分析(我們?yōu)槭裁匆渲肅ATALINA_HOME環(huán)境變量)

    Tomcat啟動(dòng)分析(我們?yōu)槭裁匆渲肅ATALINA_HOME環(huán)境變量)

    本文主要介紹Tomcat啟動(dòng)分析的知識(shí),這里整理了相關(guān)資料及分析原因和如何實(shí)現(xiàn)的方法,有興趣的小伙伴可以參考下
    2016-09-09
  • hibernate 命名查詢?nèi)绾螌?shí)現(xiàn)

    hibernate 命名查詢?nèi)绾螌?shí)現(xiàn)

    Hibernate允許在映射文件中定義字符串形式的查詢語(yǔ)句,這種查詢方式成為命名查詢,需要的朋友可以參考下
    2012-11-11
  • 圖解JVM內(nèi)存模型

    圖解JVM內(nèi)存模型

    這篇文章主要介紹了JVM內(nèi)存模型的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java虛擬機(jī),感興趣的朋友可以了解詳細(xì)
    2020-10-10
  • 使用Spring Data JPA的坑點(diǎn)記錄總結(jié)

    使用Spring Data JPA的坑點(diǎn)記錄總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于使用Spring Data JPA的一些坑點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼

    mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼

    本文主要介紹了mybatis-plus實(shí)現(xiàn)邏輯刪除的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 詳解IDEA自定義注釋模板(javadoc)

    詳解IDEA自定義注釋模板(javadoc)

    這篇文章主要介紹了詳解IDEA自定義注釋模板(javadoc),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04

最新評(píng)論