1. 程式人生 > 其它 >JAVA學習過程記錄(二)

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++語言可能較低
JAVA語言的底層是C++,所以JVM使用C++語言寫好的一個虛擬的電腦。而JVM在JDK安裝好的時候,也已經安裝成功了。     3.JAVA語言是完全面向物件的,採用面向物件更容易讓人理解,讓複雜的問題簡單化。     4.健壯性:主要是因為JAVA有一種機制——自動回收機制(GC機制)           JAVA語言比起C語言來說更為健壯,因為JAVA不易導致記憶體的洩露,C和C++則容易導致記憶體的洩露。      JVM負責排程GC機制,程式設計師則不需要干涉。     5.JAVA完全/完美支援多執行緒併發      6.JAVA具有可移植性,跨平臺       通俗來講JAVA編寫完成以後,無需任何改動,就可以分別執行在windows,Linux,mac oc作業系統中。     

 

            JAVA的這種機制實現了跨平臺,那麼這種機制的優點和缺點各是什麼?     優點:一次編譯到處可以執行,可以跨平臺     缺點:較為麻煩,需要在每臺電腦上配置JVM,即執行JAVA程式必須配備JVM。     7.JDK,JVM,JRE三者之間的關係:     JDK: JAVA開發工具箱     JVM:JAVA虛擬機器     JRE:   JAVA執行環境       JDK包括JRE,JRE包括JVM                

 

    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