<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    [導入](轉貼)Classpath和Codebase

    Posted on 2007-02-27 10:38 Java.net 閱讀(274) 評論(0)  編輯  收藏 所屬分類: 開源項目

    網站:JavaEye 作者:jvincent 發表時間: 2007-02-27 10:38 此文章來自于 http://www.JavaEye.com
    聲明:本文系JavaEye網站原創文章,未經JavaEye網站或者作者本人書面許可,任何其他網站嚴禁擅自發表本文,否則必將追究法律責任!
    原文鏈接: http://xzgf.javaeye.com/blog/56171

    Classpath和Codebase







    概要



    Classpath和Codebase是Java中非常重要的兩個概念,初學者如果沒有掌握這兩個概念,在遇到諸如ClassNotFoundException或者相關的異常時不知所措。另外,很多其它方面的錯誤往往也和Classpath有關。本文將詳細解釋這兩個概念,并且描述在命令行方式和集成開發環境(以JBuilder為例)中的設置方式。 



    什么是Classpath



    Classpath是Java中的重要概念,它描述了Java虛擬機在運行一個Class時在哪些路徑中加載要運行的類以及運行的類要用到的類。簡單的說,就是像操作系統的path,只不過這個classpath是由Java的虛擬機來使用查找需要加載的類,而操作系統的path是由操作系統用來查找用戶輸入的可執行程序。同path一樣,classpath也是一個環境變量,可以通過set命令來設置。 



    Classpath和Java包的關系



    Java的包(Package)和classpath關系密切。包是以“.”分割的,SUN建議使用域名的逆向排列來區分不同的包,以避免沖突,如com.company.util。在一個包里的類在存儲的時候需要存儲在和包名相同的目錄里,如上述com.company.util包中的Sample.class,要存儲在com\company\util目錄中。 

    Classpath有兩種表達方式,一種是指向目錄的classpath,如C:\work\classes,表示C:\work\classes目錄是一個classpath條目;另一種方式是指向壓縮文件的classpath,如C:\work\util.jar,表示C:\work\util.jar文件是一個classpath條目,任何一個包含Java類的zip格式的壓縮文件都可以作為classpath的條目。 

    那么classpath和包到底是什么關系呢?簡單的說,就是Java虛擬機在加載類的時候以這樣一種方式查找具體的類文件:classpath+包存儲的目錄+具體的類文件。如classpath中有一個c:\work\classes條目,需要加載的類是com.company.util.Sample.class,那么在加載這個類的時候,虛擬機會查找c:\work\classes\com\company\util目錄,如果Sample.class在這個目錄中,虛擬機就可以找到,如果這個類不在這個目錄中,同時也不在任何一個其它classpath中,那么虛擬機會拋出一個ClassNotFoundException。 



    Classpath的順序和類版本沖突



    Java虛擬機在加載類的時候查找classpath是有順序的,如果在classpath中有多個條目都有同一個名稱的類,那么在較前位置的類會被加載,后面的會被忽略。這種按照順序的類加載可能會導致類的版本沖突。例如classpath=c:\servlet2.2\servlet.jar;c:\servlet2.3\servlet.jar,那么在實際應用的過程中,你使用的是servlet2.2,而不是servlet2.3。很多時候如果不注意這一點,可能會導致奇怪的異常。 



    命令行狀態下的classpath設置



    命令行狀態下的classpath可以通過兩種方式設置。 

    一種是直接設置環境變量,例如在windows環境下,我們使用set命令: 

    set classpath=c:\work\classes;c:\work\util.jar 

    另一種方式是在執行javac、java或者其它Java命令時直接指定classpath: 

    java -classpath c:\work\classes;c:\work\util.jar com.company.util.Sample 



    集成開發環境下的classpath設置



    集成開發環境中設置classpath一般通過其用戶界面進行,各種集成開發環境的classpath設置各不相同,我們以JBuilder為例來說明集成開發環境下的classpath。 

    1.設置Jbuilder的Library 

    JBuilder中的classpath要通過類庫來設置,首先選擇Tools->;Configure Library,然后點擊New按鈕,點擊Add...,可以選擇要增加的類庫,這個類庫可以是目錄,也可以是zip格式的壓縮文件,如.jar或者.zip。 

    2.設置項目需要用到的Library 

    在設置了類庫之后,在JBuilder中運行一個class時并不會馬上查找你加入的類庫,而是要在Project->;Project Properties->;Path->;Required Library中設置,選擇Add...按鈕,你就可以增加自己的classpath條目了。 



    什么是Codebase



    使用Java語言編寫的程序,不僅可以在本地的classpath中加載類,也可以根據需要從網絡上下載類。為了使Java程序可以從網絡上下載類,我們需要使用codebase,codebase指定了Java程序在網絡上何處可以找到需要的類。 



    在Java Applet中使用codebase



    眾所周知,可以在Java Applet中使用codebase指定Applet加載其所需要的類的網絡位置.



    這個Applet指定了其所用的類可以在服務器上Applet所在的目錄下找到。 



    在Java Application中使用codebase



    不僅在Applet中可以使用codebase,在Application中也可以使用codebase。這樣Application除了可以使用classpath中的類,還可以使用網絡上的類。例如: 

    java -classpath c:\work\classes -codebase http://www.company.com/classes Sample 

    應用程序Sample不僅可以使用c:\work\classes中的類,還可以使用http://www.company.com/classes中的類。 



    Classpath和codebase的關系



    既然Java虛擬機即可以在classpath中加載類,又可以在codebase中加載類,那么classpath和codebase是什么關系呢?實際上,Classpath和codebase都是由系統類加載器(Class Loader)使用的。類加載器在加載一個類的時候,首先在classpath中查找需要的類,然后在codebase中查找,第一個被查找到的類會被加載。例如,在早期的JDK版本中,缺省codebase是空值,如果沒有在classpath中指定“.”(當前目錄),運行當前目錄下的java class時會出現ClassNotFoundException;而在晚些版本中,缺省codebase是“.”,所以即使不在classpath中加入“.”,當前目錄下的java class仍然可以正常運行。 



    總結



    初學Java的朋友一定要掌握classpath和codebase的概念,理解其內涵,如果出現編譯、運行程序的過程中出現什么問題,首先應該考慮是否是classpath的問題。實際上,甚至一些非常復雜的應用中,比如服務器端應用,都會因為classpath的設置而出現莫名其妙的問題。如果大家在閱讀本文的過程中有什么問題,請提出來大家一起討論。

     




    《 (轉貼)Classpath和Codebase 》 的評論也很精彩,歡迎您也添加評論。查看詳細 >>





    JavaEye推薦
    廣州:夢境網絡公司:薪水+期權誠聘高級人才 C++工程師 和 Java工程師
    北京:高薪誠聘Ruby on Rails高手: 月薪15-25K
    上海:尤恩斯國際集團:誠聘開發工程師
    北京:優秀公司NHNChina招聘:WEB開發,系統管理,JAVA開發, DBA



    文章來源: http://xzgf.javaeye.com/blog/56171

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 永久免费的网站在线观看| 黄色a三级三级三级免费看| 免费国产在线视频| 国产亚洲午夜高清国产拍精品 | 亚洲婷婷五月综合狠狠爱| 色婷婷综合缴情综免费观看| 又大又黄又粗又爽的免费视频| 亚洲AV无码一区二区三区牲色| 免费一级成人毛片| www一区二区www免费| 亚洲成亚洲乱码一二三四区软件| 爱丫爱丫影院在线观看免费| 亚洲av无码一区二区三区不卡| 免费无遮挡无码永久视频| 久久亚洲国产精品成人AV秋霞| 无遮免费网站在线入口| 亚洲精品日韩一区二区小说| 又爽又高潮的BB视频免费看| 精品一区二区三区免费观看 | 国产精品亚洲mnbav网站 | 鲁死你资源站亚洲av| 亚洲А∨精品天堂在线| 免费看搞黄视频网站| 亚洲国产日韩在线一区| 日本人的色道www免费一区| a级毛片免费观看网站| 亚洲好看的理论片电影| 国产成人免费高清激情视频| 视频免费1区二区三区| 亚洲αv久久久噜噜噜噜噜| 免费A级毛片无码无遮挡内射| 国产AV无码专区亚洲AV琪琪| 亚洲码国产精品高潮在线| 国产免费不卡视频| 久久精品国产亚洲av天美18| 亚洲成在人线av| 日本一线a视频免费观看| 97人妻精品全国免费视频| 亚洲午夜无码毛片av久久京东热| 中文字幕精品无码亚洲字| 日本妇人成熟免费中文字幕|