Java千問:開發Java程序爲什麼要配置環境變量?

         我們在學習搭建Java開發環境的時候,老師總是讓我們先安裝JDK,緊接着又讓我們去配置環境變量,之後才能動手編寫Java程序。很多同學按照老師的步驟去做,成功的搭建好了Java開發環境,並且運行出了自己的第一個Java程序,感到非常有成就感。

         那麼,爲什麼在安裝了JDK之後要配置環境變量呢?很多同學對這個問題其實並不清楚,只是知道如果不配置環境變量,就沒法進行Java開發。今天,咱們就來聊聊爲什麼要配置環境變量。其實,配置環境變量的目的很簡單:爲了在命令行窗口下編譯和運行Java程序。大家請注意:這句話說明了配置環境變量的作用,但是還附加了一個前提,那就是“在命令行窗口下”。這到底是怎麼回事呢?我們慢慢道來。

一、配置環境變量與編譯Java程序的關係

         我們知道,程序員所寫的Java程序,都是保存在一個後綴名爲.java的文件當中的,這個文件稱之爲源文件。源文件並不能被執行,它需要首先被編譯成二進制字節碼文件,也就是後綴名爲.class的文件。那麼怎樣把源文件編譯成二進制字節碼文件呢?這時候就需要用到JDK當中提供的編譯程序來完成這個任務。編譯程序是一個後綴爲.exe的可執行文件,名字叫做javac,它存在於JDK安裝路徑下的bin文件夾中。但是,我們的源文件文件有可能會被保存到磁盤上任何一個文件夾中。當我們在源文件所在的文件夾中去調用javac編譯程序,系統會發現根本就找不到這個它,因爲字節碼文件與編譯程序根本不在同一個文件夾,除非是一種很特殊的情況,那就是把源文件放到javac編譯程序所在的文件夾中去編譯。否則都會出現下圖這樣的錯誤

        爲了能夠在任何文件夾下都調用到javac編譯程序,就必須讓系統在任何地方都能找到javac編譯程序,該怎麼辦呢?解決辦法很簡單:配置環境變量!我們要在Path這個環境變量當中把javac編譯程序所在的位置添加進去!我們都知道javac編譯程序位於JDK安裝路徑下的bin文件夾中,所以我們都就要把bin這個路徑添加到環境變量當中。這樣,無論源文件在哪裏,操作系統都隨時能找到javac編譯程序並對其進行編譯。當然了,經過這樣的配置之後,bin文件夾下其他的可執行文件也能夠在任何目錄下被調用,其中就包括執行Java程序的java.exe。

二、配置環境變量與執行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.jartools.jar類庫文件的功能,所以,從JDK1.5開始,可以不用配置CLASSPATH環境變量了!

三、那個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安裝的路徑。

四、爲什麼說環境變量是爲了 “在命令行窗口下”編譯和運行Java程序而配置

        我們在文章一開始說:配置環境變量是爲了在命令行窗口下編譯和運行Java程序,這句話中特意強調了“在命令行窗口下”這個前提,這又是爲什麼呢?其實,時至今日,很多IDE不需要配置環境變量,也能正確編譯和運行Java程序。我們只需要在IDE當中相關的配置菜單下,正確的指定出JDK的安裝路徑就可以了。除非這個IDE本身也是用Java編寫的。因此,如果學習Java語言的時候,直接就使用像IntelliJ IDEA這樣的IDE,不去配置環境變量也能正確編譯和運行Java程序。但是,如果回到最原始的“命令行窗口”模式下,爲了能夠在任何目錄下都能調用到javac和java這兩個exe文件,我們必須要配置環境變量。所以在解釋配置環境變量作用的時候,我們特意強調了“在命令行窗口下”這個前提。

希望本文對初學者學習Java語言有所幫助。如果希望系統學習Java編程,可以看我的視頻課程穆哥學堂,也可以加入我的QQ羣291839907一同交流問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章