小菜毛毛技術分享

          與大家共同成長

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
          javac -classpath的使用: 

          javac:如果當前你要編譯的java文件中引用了其它的類(比如說:繼承),但該引用類的.class文件不在當前目錄下,這種情況下就需要在javac命令后面加上-classpath參數,通過使用以下三種類型的方法 來指導編譯器在編譯的時候去指定的路徑下查找引用類。 

          (1).絕對路徑:javac -classpath c:\junit3.8.1\junit.jar   Xxx.java 
          (2).相對路徑:javac -classpath ..\junit3.8.1\Junit.javr  Xxx.java 
          (3).系統變量:javac -classpath %CLASSPATH% Xxx.java (注意:%CLASSPATH%表示使用系統變量CLASSPATH的值進行查找,這里假設Junit.jar的路徑就包含在CLASSPATH系統變量中) 

          javac 絕對路徑的使用: 

          javac:假設你要編譯的類文件名叫:HelloWorld.java,其完全路徑為:D:\java\HelloWorld.java。但你所在的當前目錄是:C:\Documents and Settings\peng>。如果想在這里執行編譯,會有什么結果呢? 

          (1).C:\Documents and Settings\peng> javac HelloWorld.java 這時編譯器會給出如下的錯誤提示信息: 
          error: cannot read: HelloWorld.java 
          這是因為默認情況下javac是在當前目錄下查找類文件,很明顯這個路徑不是我們存放類文件的地方,所以就會報錯了 
                  
          (2).C:\Documents and Settings\peng>javac D:\java\HelloWorld.java 
          這時編譯成功。 
          所以,只要你執行javac命令的目錄不是類文件存放的目錄,你就必須在javac命令中顯式地指定類文件的路徑。 

          java -classpath的使用: 

          java:假設我們的CLASSPATH設置為:D:\peng\java\pro ,在該目錄下有三個文件:HelloWorld.java / HelloWorldExtendsTestCase / HelloWorldExtendsHelloWorld。這三個文件的類聲明分別如下: 

          HelloWorld.java :public class HelloWorld 
          HelloWorldExtendsHelloWorld.java :public class HelloWorldExtendsHelloWorld extends HelloWorld 
          HelloWorldExtendsTestCase.java:public class HelloWorldExtendsTestCase extends junit.framework.TestCase 

                假設我們已經按照上面關于javac -classpath和javac 絕對路徑的使用,順利地完成了三個文件地編譯。現在我們在C:\Documents and Settings\peng>目錄下執行這三個.class文件 

          (1).C:\Documents and Settings\peng>java  HelloWorld 
                Hello World 

          可以看到執行成功。為什么我們在 C:\Documents and Settings\peng>執行命令,JVM能夠找到D:\peng\java\pro\HelloWorld.class文件呢?這是因為我們配置了系統變量CLASSPATH,并且指向了目錄:D:\peng\java\pro 。所以JVM會默認去該目錄下加載類文件,而不需要指定.class文件的絕對路徑了。 
                   
          (2).C:\Documents and Settings\peng>java HelloWorldExtendsHelloWorld 
                 Hello World 

          可以看到執行成功了。HelloWorldExtendsHelloWorld繼承了HelloWorld類,所以在執行時JVM會先查找在CLASSPATH下是否存在一個HelloWorld.class文件,因為我們已經成功編譯了HelloWorld 類了,所以可以成功執行HelloWorldExtendsHelloWorld.class 
            
          (3).C:\Documents and Settings\peng>java HelloWorldExtendsTestCase 
               Exception in thread "main" java.lang.NoClassDefFoundError: junit/framework/TestCase 

          可以看到程序拋出異常了,提示找不到junit.framework.TestCase文件。為什么同樣在:\peng\java\pro 下,HelloWorldExtendsHelloWorld.class就可以成功執行,而這個就不行了呢?這是因為:            junit.framework.TestCase.class文件并不存在于當前目錄下,所以為了能夠讓程序成功運行,我們必須通過指定CLASSPATH的方式,讓JVM可以找到junit.framework.TestCase這個類,如(4): 

          (4). C:\Documents and Settings\peng>java -classpath %CLASSPATH% HelloWorldExtendsTestCase 
                Hello World 

          總結: 

          (1).何時需要使用-classpath:當你要編譯或執行的類引用了其它的類,但被引用類的.class文件不在當前目錄下時,就需要通過-classpath來引入類 
          (2).何時需要指定路徑:當你要編譯的類所在的目錄和你執行javac命令的目錄不是同一個目錄時,就需要指定源文件的路徑(CLASSPATH是用來指定.class路徑的,不是用來指定.java文件的路徑的) 

          [轉自: 
          http://blog.csdn.net/pengpenglin/ 
          http://www.aygfsteel.com/pengpenglin/ 
          ] 
          posted on 2010-10-19 22:32 小菜毛毛 閱讀(10741) 評論(0)  編輯  收藏 所屬分類: java基礎運用面試
          主站蜘蛛池模板: 太仆寺旗| 甘谷县| 古田县| 北辰区| 青阳县| 特克斯县| 永登县| 资兴市| 金寨县| 遵义市| 手机| 巴林右旗| 凌云县| 西宁市| 伊通| 调兵山市| 枝江市| 高青县| 怀宁县| 金乡县| 宁乡县| 都江堰市| 比如县| 藁城市| 开江县| 莱西市| 阿克陶县| 青神县| 桦甸市| 广宁县| 衡南县| 乌鲁木齐县| 麻江县| 中超| 佛坪县| 衡东县| 佛教| 成武县| 疏勒县| 金湖县| 湖南省|