標籤:產生 -- static 路徑名 public 效率 config jar 斜杠
Java之ClassPath
大家剛開始寫Java代碼的時候,如果使用Eclipse作為IDE,同時需要引用其他的類庫,一般會有如下操作
- 在工程中建立lib目錄
- 將jar包複製到lib目錄下
- 按右鍵選中jar,點擊Bulid Path,之後點擊Add to Bulid Path
- 最終我們可以在Referenced Libraries中看到我們添加的jar包
ClassPath
其實上述的操作都和ClassPath有關,那究竟什麼是ClassPath,ClassPath的作用是什嗎?
1. 什麼是ClassPath
CLASSPATH 包含了一個或多個目錄,它們作為一種特殊的“根”使用,從這裡展開對.class檔案的搜尋。從那個根開始,解譯器會尋找包名,並將每個點號(句點)替換成一個斜杠,從而產生從CLASSPATH 根開始的一個路徑名(所以package foo.bar.baz會變成foo\bar\baz或者foo/bar/baz;具體是正斜杠還是反斜線由作業系統決定)。隨後將它們串連到一起,成為CLASSPATH 內的各個條目(入口)。以後搜尋.class檔案時,就可從這些地方開始尋找與準備建立的類名對應的名字。
ClassPath,中文叫做類路徑,就是存放編譯好的.class的路徑。當你需要引用或者使用的類,不再目前的目錄下的時候,就需要將這些類添加到ClassPath中。
當我們第一次寫Java的HelloWorld的時候,我們建立HelloWorld.java檔案,並輸入以下內容
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); }}
在命令列中輸入以下命令,就可以在控制台看見輸出Hello World
javac HelloWorld.javajava HelloWorld
但是你如果想在在程式中引用Jar包,該怎麼做?
下面的例子中在,我們想在HelloWorld中引用Gson的jar包
import com.google.gson.Gson;public class HelloWorld { public static void main(String[] args) { Gson gson = new Gson(); System.out.println("Hello World"); }}
首先將肯定需要將jar包複製到當前路徑下,之後我們直接運行javac javac HelloWorld.java,但是運行報錯,說明之前的做法已經行不通了
我們改成輸入,就可以重新列印輸出Hello World
javac -cp .\gson-2.8.0.jar HelloWorld.javajava -cp .\gson-2.8.0.jar; HelloWorld
或者
javac -classpath .\gson-2.8.0.jar; HelloWorld.javajava -classpath .\gson-2.8.0.jar; HelloWorld
從上講,可見ClassPath可以用來指定我們的匯入的Jar包的資訊。
2. Eclipse工具中ClassPath
當然,在IDE工具不用這麼麻煩,只需要點幾個按鈕就可以了。
在Eclipse中,比如我們將gson包匯入的ClassPath中,編譯器會在工程目錄下的.classpath檔案中添加我們匯入的jar包資訊,之後在編譯啟動並執行時候,自動添加這些資訊。對比上面的收到編譯運行,IDE工具為我們做了非常多事情,來提高我們的效率。
3. Web工程下的ClassPath
在Eclipse中,沒有使用Maven的情況下,建立Dynamic Web Project,使用Spring架構,一般我們會在Web.xml做出如下配置
<!-- 配置啟動 Spring IOC 容器的 Listener --> <!-- needed for ContextLoaderListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- Bootstraps the root web application context before servlet initialization --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
我們就會看到classpath:applicationContext.xml和classpath:springmvc.xml裡面出現了classpath,有人就會有疑問,放在src目錄的設定檔用classpath:怎麼可以讀取到
我們將Dynamic Web Project匯出成war包,並將尾碼修改成rar並解壓。我們可以發現放在src目錄下的設定檔和產生的.class檔案均存放在WEB-INF\classes目錄下。所以我們就可以在在classpath中讀取到設定檔
談談Java的classpath