最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中classpath講解及使用方式

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

筆者之前對于classpath都沒有什么深入的研究,之前的項目打包jar包都是按照網上的教程自己照著葫蘆畫瓢。但是因為最近碰到一些關于這方面的知識,因此索性覺得要好好補充一下這方面的知識。下面的文章主要是翻譯自oralce官網關于設置classpath的說明Setting the class path,并對其中一些地方進行了部分的補充說明,方便讀者理解。

概要

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

或通過設置CLASSPATH環(huán)境變量。該 -classpath選項是首選項,因為您可以為每個應用程序單獨設置,而不會影響其他應用程序,而無需其他應用程序修改其值。

下面是這兩種方式的說明示例:

  • (1)通過jdk的命令行來為每個application設置

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

C:> sdkTool -classpath classpath1 ;classpath2 …

  • (2)設置classpath環(huán)境變量,這個是全局設置,對所有的應用程序生效

C:> set CLASSPATH=classpath1 ;classpath2 …

sdkTool

一個命令行工具,例如java, javac,javadoc,或apt。有關列表,請參閱JDK工具

classpath1 ;classpath2

.jar,.zip或.class文件的classpath。每個classpath應以文件名或目錄結尾,針對不同的情況,設置classpath的格式方法如下:

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

下面是示例,筆者自己將一個工程打包成jar包,同時指定這個jar包下的某個class文件運行。結果如下:

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

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

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

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

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

test.java

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

這個類是沒有package的。

下面是運行結果:

程序運行成功

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

示例如下:

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);
    }
}

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

通過上面幾條命令,可以看出來正確的命令行格式如下:

java -classpath package_rootpath package_name.class_name

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

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

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

描述

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

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

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

當您調用JVM或其他JDK工具或使用環(huán)境變量時,可以使用JDK工具’ -classpath選項來更改classpath。使用該選項優(yōu)于設置環(huán)境變量,因為您可以為每個應用程序單獨設置,而不會影響其他應用程序,而無需其他應用程序修改其值。

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

重要說明:某些舊版本的JDK sofware 在默認的類路徑中包含一個/classes條目。該目錄存在供JDK軟件使用,不應用于應用程序類。應用程序類應放在JDK等級目錄之外。這樣,安裝新的JDK并不會強制您重新安裝應用程序類。為了與舊版本兼容,使用/classes目錄作為類庫的應用程序 將以當前版本運行,但不保證將在以后的版本中運行。

使用JDK工具的-classpath選項

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

運行時工具java也有一個 -cp選項。此選項是-classpath的縮寫。

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

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

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

設置CLASSPATH

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

set CLASSPATH = path1 ; path2…

路徑應以指定驅動器的字母開頭,例如C:\。這樣,如果您碰巧切換到其他驅動器,則仍然會找到class文件。(如果設置的路徑是D:\,那么jvm就會去D盤下找這個class,而不是在C盤下)

清除CLASSPATH

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

  C:> set CLASSPATH =

此命令僅在當前命令提示符窗口中取消CLASSPATH。您還應刪除或修改啟動設置,以確保CLASSPATH在將來的會話中擁有正確的設置。

更改啟動設置

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

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

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

了解類路徑通配符

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

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

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

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

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

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

了解類路徑和包名稱

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

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

要運行該應用程序,可以使用以下JVM命令:

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

當應用程序運行時,JVM使用這個classpath設置來查找utility.myapp包中定義的任何其他類(也包括Cool類)。

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

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

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

文件夾和歸檔文件

當類存儲在目錄(文件夾)中時, 比如存儲在c:\java\MyClasses\utility\myapp,那么classpath條目指向包含包名稱的第一個元素的目錄。也就是package的上一級目錄(在這種情況下,classpath就是C:\java\MyClasses,因為包名是utility.myapp。)

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

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

多重指定

要查找C:\java\MyClasses目錄下的類以及C:\java\OtherClasses目錄下的類,那么請將類路徑設置為:

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

請注意,這兩個路徑以分號分隔。

指定順序

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 基于Java回顧之集合的總結概述

    基于Java回顧之集合的總結概述

    在這篇文章里,我們關注Java中的集合(Collection)。集合是編程語言中基礎的一部分,Java自JDK早期,就引入了Java Collection Framework。設計JCF的那個人,后來還寫了一本書,叫《Effective Java》
    2013-05-05
  • java String校招面試題過程詳解

    java String校招面試題過程詳解

    這篇文章主要介紹了java String校招面試題過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Java框架篇:Spring+SpringMVC+hibernate整合開發(fā)

    Java框架篇:Spring+SpringMVC+hibernate整合開發(fā)

    本篇文章將會對Spring+SpringMVC+hibernate的整合開發(fā)進行介紹。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-02-02
  • 使用Java后端操作Docker的詳細教程

    使用Java后端操作Docker的詳細教程

    Docker 是現(xiàn)代開發(fā)和部署流程中不可或缺的一部分,它簡化了應用程序的環(huán)境配置、打包和分發(fā),使得在不同機器上運行相同的應用變得更加輕松和一致,本文將詳細介紹如何使用命令行工具(CMD)操控 Docker 來配置環(huán)境,需要的朋友可以參考下
    2025-02-02
  • Android開發(fā)簡單計算器實現(xiàn)代碼

    Android開發(fā)簡單計算器實現(xiàn)代碼

    這篇文章主要介紹了Android開發(fā)簡單計算器實現(xiàn),本文放置了完整的Android開發(fā)電腦,通過部署項目可以直接按到效果,希望本篇文章可以對你有所幫助
    2021-06-06
  • 換了最新的idea如何將原來舊版本的idea設置導進新的idea中

    換了最新的idea如何將原來舊版本的idea設置導進新的idea中

    這篇文章主要介紹了換了最新的idea如何將原來舊版本的idea設置導進新的idea中,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 使用ObjectMapper解析json不用一直new了

    使用ObjectMapper解析json不用一直new了

    這篇文章主要為大家介紹了使用ObjectMapper解析json不用一直new了的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Spring?Boot簡單實現(xiàn)文件上傳功能

    Spring?Boot簡單實現(xiàn)文件上傳功能

    這篇文章主要介紹了Spring?Boot簡單實現(xiàn)文件上傳功能,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 詳解Java的Enum的使用與分析

    詳解Java的Enum的使用與分析

    這篇文章主要介紹了詳解Java的Enum的使用與分析的相關資料,需要的朋友可以參考下
    2017-02-02
  • idea遠程調試spark的步驟講解

    idea遠程調試spark的步驟講解

    今天小編就為大家分享一篇關于idea遠程調試spark的步驟講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論

晴隆县| 平和县| 余姚市| 霍林郭勒市| 和平县| 疏勒县| 嘉祥县| 四平市| 钟祥市| 来安县| 万全县| 沐川县| 长葛市| 西青区| 叙永县| 福州市| 吐鲁番市| 兰州市| 桓仁| 调兵山市| 长兴县| 芷江| 芮城县| 宣威市| 澄城县| 佛教| 承德市| 弋阳县| 开江县| 东阳市| 枞阳县| 滁州市| 宁武县| 台北县| 宝鸡市| 江城| 巴中市| 霍山县| 丰县| 曲靖市| 永新县|