1. 程式人生 > 其它 >03-JavaHome&臨時環境變數&classpath環境變數

03-JavaHome&臨時環境變數&classpath環境變數

1.配置java_home、臨時環境變數資訊

PATH環境資訊:

D:;

D:\JDK\JDK\bin;

D:\eclipse4.3\adt-bundle-windows-x86-20131030\adt-bundle-windows-x86-20131030\sdk\platform-tools;

C:\Program Files\Intel\iCLS Client;

%SystemRoot%\system32;

%SystemRoot%;

%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\OpenCL SDK\2.0\bin\x86;D:\mysql\bin;C:\Program Files\TortoiseSVN\bin;D:\firfox\quicktime\QTSystem\

目前path環境變數除了儲存了我們自己配置的資訊以外,還有系統自帶的資訊,如果一旦不不小心刪除了path環境變數資訊,那麼就可能導致系統部分功能無法使用。

儘量避免修改的path環境變數資訊。

如果我們需要頻繁的更換jdk的版本,那麼就需要頻繁的去修改path環境變數內容了,就容易出錯。

那麼為了儘量避免頻繁修改path環境變數,如何做?

解決辦法:新建一個環境變數儲存jdk安裝目錄會發生變化的部分,然後在path環境變數上引用新環境變數所儲存的資訊。

即使用java_home,當然這個環境變數不叫java_home也行,但是一般都起名為java_home。

當jdk版本有變動的時候,去修改JAVA_HOME的值即可了。path環境變數就不用動了。

有的時候,某個jdk版本只用一次,那麼可以使用臨時配置環境變數即可。

需求: 在現實開發中有時候jdk版本的資訊有時候只會使用一次或者幾次就不再使用了,那麼如果是這種需求,我們一般都是通過set命令配置臨時環境變數。

臨時環境變數就是僅對於當前控制檯視窗起作用,視窗一旦關閉,那麼配置的臨時環境變數資訊會發生消失。

set命令的用法:

​ set 檢視所有的環境變數資訊。

​ set 環境變數的名字 檢視指定的環境變數資訊。

​ set 環境變數名字 = 路徑資訊 設定指定的環境變數資訊。

​ set 環境變數名字 = 清空指定的環境變數資訊。

set 環境變數名字 = 新路徑;%環境變數名字% 在原有的基礎上新增新的路徑資訊。

注意: 以後大家但凡看到是set命令設定的環境變數資訊,都是臨時環境變數資訊。

helloworld的小細節

\1. 缺少main方法

出現提示:缺少一個名稱為main的方法。

\2. 原始檔中的大小寫要注意。初學者請牢記,第一個hello例子中只有 String和System中兩個字元是大寫的,其他的都小寫。

\3. 配置path和classpath時,裡面的路徑是所有查詢的目標的父目錄, 而不是目標自己。

\4. A.java.txt

​ 文字檔案預設是txt結尾的,注意要把隱藏已知檔案型別副檔名去掉。

\5. 大小寫

只有類名Demo,String和System中三個個首字母是大寫的。

public class Demo{ public static void main(String[] args) { System.out.println("hello java"); } }

\6. path

看path環境變數配置 ,裡面的路徑是所有查詢的目標的父目錄,而不是目標自己。

7. 寫錯類名, 原始檔名不存在或者寫錯,或者當前路徑錯誤。

類檔名寫錯,或者類檔案不在當前路徑下,或者不在classpath指定 路徑下。

java命令載入的是類,而不是class檔案的。因此,如果人為的將class檔案的檔名改成別的,那麼java命令載入的時候,仍然需要寫裡面的類名,而不應該寫class檔案的檔名。

\8. javac 生成的.class 檔案的名稱取決於類名,跟.java名沒有關係。

javac編譯原始檔,生成的class檔案的檔名預設就是類名。

第一個hello world例子常見 的問題:

​ \1. 找不到對應的檔案

​ 原因:

​ 1 隱藏了字尾名,你的不是java檔案是txt檔案。

​ 2.編譯 的時候寫錯了檔名。

​ \2. 找不到或無法載入主類 Demo1

​ 原因: 執行的時候寫錯了類名. 注意: class檔案的檔名是對應的類名的。不是對應的java檔名的。

​ \3. java的程式碼是嚴格區分大小寫的。

​ \4. 'javac' 不是內部或外部命令

​ 原因: 沒有配置path環境變數資訊,或者是配置錯誤了。

2.classpath環境變數資訊

JVM查詢類檔案的順序:

如果沒有配置classpath環境變數,JVM只在當前目錄下查詢要執行的類檔案。

如果配置了classpath環境,JVM會先在classpath環境變數值的目錄中查詢要執行的類檔案。

值的結尾處如果加上分號,那麼JVM在classpath目錄下沒有找到要指定的類檔案,會在當前目錄下在查詢一次。

值的結尾出如果沒有分號,那麼JVM在classpath目錄下沒有找到要指定的類檔案,不會在當前目錄下查詢,即使當前目錄下有,也不會執行。

建議:配置classpath環境變數時,值的結尾處不要加分號,如果需要訪問當前目錄可以用 “.”表示。

classpath 環境變數:

​ 設定了classpath環境變數的時候,啟動jvm(java虛擬機器)的時候,那麼java虛擬機器就會 根據classpath環境變數所儲存路徑資訊下去尋找對應的class檔案。

​ 設定classpath環境變數資訊的有分號與沒有分號的區別:

​ \1. 如果配置classpath環境變數資訊沒有加上分號,那麼java虛擬機器僅會在classpath所儲存的路徑下去搜索對應的class檔案,不會在當前路徑下去搜索了。

​ \2. 如果配置classpath環境變數資訊加上分號,那麼java虛擬機器除了會在classpath所儲存的路徑下去搜索對應 的class檔案之外,如果能找到對應的class檔案那麼就馬上指定對應的class檔案,否則還會去 當前路徑下去搜索。

注意,分號;,就相當於是當前目錄,就是那個點.。

現在E盤和F盤都有同名的Demo1.java檔案,並且類名也相同,都是Demo1。

當前F盤編譯了Demo1.java,有對應的class檔案。

此時由於設定了classpath,因此,首先會在classpath設定的目錄去搜索Demo1的class檔案的。

如果將F盤的class檔案刪除了。

那麼在classpath裡面指定的f盤裡找不到class檔案,就在當前目錄E盤下找。

分號放前面了。分號,就相當於是當前路徑。

注意,不建議將classpath配置成永久環境變數的。

以前的書籍,都讓配置classpath問永久環境變數。

jdk5官方也不建議配置classpath為永久環境變量了。

如果這裡配置了,然後最後又沒有加上分號。

然後自己可能忘記了。

在F盤執行,想要執行的是F盤的Demo1的,結果卻執行了E盤的,原因就是上面配置了classpath導致的。因此,就會產生誤解。

將E盤的class檔案刪了。

這就是由於配置了classpath=E:\的原因。

因此,不推薦配置classpath為永久環境變數的。

在jdk5.0之前,是必須要配置classpath的。原因是當時的jvm沒有那麼智慧。

jre=jvm+核心類庫。也就是jvm的執行要依賴核心類庫的。

jdk5.0之前,安裝完的jdk之後,jvm不知道核心類庫的位置。

核心類庫在這個目錄下的。

因此,jdk5.0之前的jvm需要這些核心類庫支援才能執行,但是又不能夠智慧的找到它們,因此,就強制要求必須要配置classpath環境變數,指向到這些核心類庫的jar包。

即要求要這樣來配置。

而在jdk5.0之後的jvm比較智慧了,能夠自動的找到這些核心類庫的jar包了,因此,不需要配置classpath指向到這些核心類庫的jar包了。

注意,配置classpath的作用,它對jvm有作用,同時它對編譯的時候,也會產生作用的,因為編譯的時候,遇到import導包的時候,就需要參考classpath指定的路徑去找對應的包下的類的class檔案。

classpath環境變數

\1. classpath的作用: 作用是指定類搜尋路徑,要使用已經編寫好的類,前提當然是能夠找到它們了,一旦配置了classpath路徑資訊的時候,jvm(java執行命令)與java編譯器都會根據classpath指定的路徑去尋找class檔案。

\2. 如何設定當前目錄(.)

set classpath=.;設定路徑 與 set classpath=設定路徑;.有什麼區別?

“.”在前面的時候,java虛擬機器會先從當前路徑去尋找class檔案,然後再到指定的路徑去需找。如果”.”在後面,java虛擬機器則會先尋找指定好的路徑,然後再在當前的路徑去尋找。

設定classpath的時候要加上 ; 就會在當前目錄下查詢。因為分號就相當於是當前路徑。

\1. 簡述對JVM,JRE,JDK的理解。

JVM: JAVA虛擬機器

Jre: java執行環境 jre = java虛擬機器+ 核心類庫

Jdk : java開發工具集。 Jdk = jre + java開發工具。

\2. 簡述環境變數path和java_home \ classpath的作用?

Path: 為了讓控制檯在任意路徑下都可以找到java的開發工具。

Java_home : 避免頻繁修改path 環境變數資訊。

Classpath : 設定class檔案所在的路徑資訊。

\3. 獨立編寫hello world程式,編譯並執行。

\4. java語言是否區分大小寫? class的作用,javac,java的作用?

是, class的作用定義一個該類 的關鍵字,

java : 啟動java虛擬機器解釋並執行對應的class檔案。

javac: 啟動java編譯器對指定的java原始檔進行編譯

\5. 簡述main方法(是什麼,什麼特點,怎麼用,何時用?)

​ 程式的主入口,程式碼是從住方法上開始執行的。

​ 寫法是固定的。

​ 定義一個類中使用。

​ 如果一個類需要獨立執行的時候,就需要main方法。