咱們在學習搭建Java開發環境的時候,老師老是讓咱們先安裝JDK,緊接着又讓咱們去配置環境變量,以後才能動手編寫Java程序。不少同窗按照老師的步驟去作,成功的搭建好了Java開發環境,而且運行出了本身的第一個Java程序,感到很是有成就感。html
那麼,爲何在安裝了JDK以後要配置環境變量呢?不少同窗對這個問題其實並不清楚,只是知道若是不配置環境變量,就無法進行Java開發。今天,我們就來聊聊爲何要配置環境變量。其實,配置環境變量的目的很簡單:爲了在命令行窗口下編譯和運行Java程序。你們請注意:這句話說明了配置環境變量的做用,可是還附加了一個前提,那就是「在命令行窗口下」。這究竟是怎麼回事呢?咱們慢慢道來。java
1、配置環境變量與編譯Java程序的關係
咱們知道,程序員所寫的Java程序,都是保存在一個後綴名爲.java的文件當中的,這個文件稱之爲源文件。源文件並不能被執行,它須要首先被編譯成二進制字節碼文件,也就是後綴名爲.class的文件。那麼怎樣把源文件編譯成二進制字節碼文件呢?這時候就須要用到JDK當中提供的編譯程序來完成這個任務。編譯程序是一個後綴爲.exe的可執行文件,名字叫作javac,它存在於JDK安裝路徑下的bin文件夾中。可是,咱們的源文件文件有可能會被保存到磁盤上任何一個文件夾中。當咱們在源文件所在的文件夾中去調用javac編譯程序,系統會發現根本就找不到這個它,由於字節碼文件與編譯程序根本不在同一個文件夾,除非是一種很特殊的狀況,那就是把源文件放到javac編譯程序所在的文件夾中去編譯。不然都會出現下圖這樣的錯誤
爲了可以在任何文件夾下都調用到javac編譯程序,就必須讓系統在任何地方都能找到javac編譯程序,該怎麼辦呢?解決辦法很簡單:配置環境變量!咱們要在Path這個環境變量當中把javac編譯程序所在的位置添加進去!咱們都知道javac編譯程序位於JDK安裝路徑下的bin文件夾中,因此咱們都就要把bin這個路徑添加到環境變量當中。這樣,不管源文件在哪裏,操做系統都隨時能找到javac編譯程序並對其進行編譯。固然了,通過這樣的配置以後,bin文件夾下其餘的可執行文件也可以在任何目錄下被調用,其中就包括執行Java程序的java.exe。程序員
2、配置環境變量與執行Java程序的關係
當咱們已經可以把Java源程序編譯成.class文件以後,下一步要作的就是執行Java程序。執行Java程序實際上是個很複雜的過程,須要把.class文件讀入到虛擬機的內存當中,而後轉換成機器語言並解釋執行。在這裏咱們不去細說這個複雜的過程,咱們重點來講配置環境變量和執行Java程序有什麼關係。
要想執行Java程序,必不可少的一步就是先找到.class文件,因此必須讓虛擬機知道.class文件的位置。虛擬機是怎樣知道.class文件的位置呢?它要根據CLASSPATH環境變量去找。咱們在CLASSPATH環境變量當中首先會添加」.」(一個英文的點號),這個」.」就表示當前路徑。配置了」.」以後,虛擬機在尋找.class文件的時候會在當前路徑下進行搜索。
在CLASSPATH環境變量當中配置了」.」以後,咱們一般還會把JDK安裝路徑下的lib文件夾下的dt.jar和tools.jar這兩個文件的位置也加入到CLASSPATH環境變量中,這又是爲何呢?就是由於這兩個jar文件是JDK是提供給咱們的兩個基礎類庫。dt.jar是關於運行環境的類庫,而tools.jar是工具類庫。關於這兩個類庫當中究竟包含了哪些運行Java程序必須的類,在這裏咱們就不細說了,你們只要記住:沒有這兩個類庫支持,不少Java程序壓根就沒法運行,因此咱們在配置環境變量的時候,要把它們的路徑也加入到CLASSPATH當中,以確保程序可以正確的調用到基礎類庫中的類。
注意!歷史在JDK1.5發佈的那一天發生了轉變!從JDK1.5開始,Java運行時環境(JRE)有了自動搜索當前文件夾下.class文件,並自動加載dt.jar和tools.jar類庫文件的功能,因此,從JDK1.5開始,能夠不用配置CLASSPATH環境變量了!編程
3、那個JAVA_HOME是怎麼回事
咱們在配置環境變量的時候,每每還會配置一個叫作JAVA_HOME的環境變量。這又是怎麼回事呢?首先說明JAVA_HOME環境變量當中配置的是JDK的安裝路徑,而且咱們會在配置Path和CLASSPATH的時候,用%JAVA_HOME%去代替這兩個環境變量中的JDK安裝路徑。這麼作有兩個好處:
首先,當咱們從新安裝了JDK或者是JDK升級以後,JDK的安裝路徑都會發生變化。在這種狀況下,若是咱們配置了JAVA_HOME環境變量,咱們就能夠只修改JAVA_HOME當中JDK的安裝路徑,而Path和CLASSPATH中涉及到的JDK的安裝路徑由於用%JAVA_HOME%代替了,因此不須要作任何修改,這樣就減小了工做量和出錯的機率。
其次,某些集成開發環境(IDE)和Java Web服務器會以JAVA_HOME環境變量的值去尋找JDK的安裝路徑。因此,若是咱們但願在實際開過程當中減小遇到莫名其妙問題的機率,應該添加一個JAVA_HOME環境變量,而且在Path和CLASSPATH中用%JAVA_HOME%去代替JDK安裝的路徑。服務器
4、爲何說環境變量是爲了 「在命令行窗口下」編譯和運行Java程序而配置
咱們在文章一開始說:配置環境變量是爲了在命令行窗口下編譯和運行Java程序,這句話中特地強調了「在命令行窗口下」這個前提,這又是爲何呢?其實,時至今日,不少IDE不須要配置環境變量,也能正確編譯和運行Java程序。咱們只須要在IDE當中相關的配置菜單下,正確的指定出JDK的安裝路徑就能夠了。除非這個IDE自己也是用Java編寫的。所以,若是學習Java語言的時候,直接就使用像IntelliJ IDEA這樣的IDE,不去配置環境變量也能正確編譯和運行Java程序。可是,若是回到最原始的「命令行窗口」模式下,爲了可以在任何目錄下都能調用到javac和java這兩個exe文件,咱們必需要配置環境變量。因此在解釋配置環境變量做用的時候,咱們特地強調了「在命令行窗口下」這個前提。ide
如想系統學習Java編程,點擊穆哥學堂便可,有問題也能夠加入個人QQ羣291839907一塊兒討論!工具