JAVA學習過程記錄(二)
JAVA語言的特性總結:
1.在JAVA語言中操控記憶體的實際上是JVM(JAVA虛擬機器)
JVM是Java Virtual Machine(Java虛擬機器)的縮寫,JVM是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。 引入Java語言虛擬機器後,Java語言在不同平臺上執行時不需要重新編譯。Java語言使用Java虛擬機器遮蔽了與具體平臺相關的資訊,使得Java語言編譯程式只需生成在Java虛擬機器上執行的目的碼(位元組碼),就可以在多種平臺上不加修改地執行。2.所有的JAVA程式都是執行在JAVA虛擬機器中的,而JAVA虛擬機器執行過程中再去操控記憶體。
對於C語言,C++語言則是通過指標去操控記憶體的。(由於C語言和C++語言的這種特性,使得C和C++更靈活,程式設計師能夠直接操控記憶體,這要求程式設計師的技術十分精湛,但同時也帶來了問題)
而JAVA語言則遮蔽了指標的概念,程式設計師不能直接操作指標,或者說程式設計師不能直接操控記憶體。這樣的方式有優點也有缺點。- 優點:不容易造成記憶體的洩露
- 缺點:效率相比C++語言可能較低
JVM不能獨立安裝,而JRE和JDK都是可以獨立安裝的。
JRE和JDK都擁有各自的安裝包,而JVM沒有自己的安裝包。
安裝JDK的時候,JRE就已經自動安裝了,同時JRE內部的JVM也自動安裝了。
安裝JRE的時候JVM就自動安裝了。
所以如果客戶有需求只需要執行JAVA程式,則只需要安裝JRE即可,因為JRE所佔體積小,安裝方便快捷。
Q:為什麼安裝JDK的時候要自帶JRE?.
A:因為JAVA程式設計師開發完程式以後,要測試這個程式,讓這個程式執行起來,需要JRE。所以在JDK安裝的時候要自帶JRE。
8.對JAVA的載入與執行的理解:
JAVA從編寫到最終執行經歷了哪些過程?
JAVA程式有著非常重要的兩個階段:
- 編譯階段
- 執行階段
JAVA程式設計師直接編寫的JAVA程式碼(普通文字)是無法執行,以及被JVM識別的。JAVA程式設計師編寫的JAVA程式碼這種普通的文字必須經過一個編譯,將這個普通文字變成“位元組碼”。
JVM能夠識別“位元組碼”,JAVA程式碼這種普通文字變成位元組碼的過程被叫做編譯。JAVA程式碼的這種普通文字被稱為:JAVA原始碼。
Q:編譯階段和執行階段可以在不同的作業系統上完成嗎?
A:完全可以,因為JAVA是跨平臺的,可以做到一次編寫,到處執行。
Q:JAVA原始碼一旦編譯完成後,可以刪除原始碼嗎?只留下位元組碼可以嗎?
A:完全可以執行,因為原始碼不參與程式的執行過程。參與執行過程的是位元組碼。但是最好不要刪除原始碼,因為有可能結果並不是你想要的。當結果不是你想要的時候,你可以重新開啟原始碼進行修改。
然後重新編譯生成新的位元組碼,再重新執行,這樣會有新的執行效果。
Q:位元組碼是二進位制檔案嗎?
A:不是,因為作業系統可以直接執行二進位制檔案。
9.JAVA程式從開發到最終執行經歷了什麼?
第一步:在硬碟的某個位置上建立了一個JAVA檔案。其格式為XXXX.JAVA
第二步:用文字編輯器開啟JAVA檔案,進行符合JAVA語法的原始碼的書寫並儲存
第三步:使用編譯器對XXXX.JAVA檔案進行編譯,如果格式合法,則通過。否則會報錯,而報錯之後class檔案並不會生成,只要編寫通過了,才會生成class檔案。
ps:一個JAVA原始檔是可以生成多個class 檔案的。(編譯實際上是檢查語法問題)
第四步:使用JDK自帶的一個工具來執行class檔案,後面的工作不需程式設計師干涉——JVM將位元組碼檔案編譯至二進位制檔案然後傳給作業系統,而作業系統負責和硬體的互動。
在以上過程中,需要記住的兩個非常重要的命令(之前在隨筆一中也有使用)
javac 命令,負責編譯。
java 命令,負責執行。
xxx.java檔案經過編譯後生成了A.class,B.class,C.class等檔案。那麼我們稱A為一個類,B為一個類,C為一個類,其中A,B,C為類的名字。
10.環境變數:
之前在隨筆一中筆者直接進行了JAVA程式的編譯並沒有報錯,是因為筆者在之前就已經進行過了環境變數的配置,那麼什麼是環境變數呢?
環境變數是什麼呢?其實我們可以把它理解為【系統的視線範圍】,沒錯,配置進入了環境變數的程式,就等於是進入了系統的視線範圍,開啟DOS命令視窗後輸入程式名,系統就會把在其視線內的
(環境變數內)的程式找出來,如果程式沒有配置進入環境的變數的話,那系統自然就找不到。
配置環境變數的步驟,以win10為例。此電腦——屬性——高階系統設定——環境變數
注意:環境變數包括”系統變數“和”使用者變數“
系統變數:範圍比較大,系統變數會讓計算機所有的使用者都起作用。
使用者變數:範圍比較小,這個變數只是作用於當前使用者。
對於JAVA的JDK所屬的環境變數,有一個叫做JAVA_HOME
這個JAVA_HOME目前我們不需要,不配置這個環境變數也不會影響當前環境變數的執行,但是一旦使用tomcat伺服器(見javaweb)就必須進行配置了
Q:能不能給類載入器指定一個路徑,讓類載入器去指定的路徑下載入位元組碼檔案?
A:可以的,我們只需要設定一個環境變數叫做classpath