1、Java語言的特性
1.1、簡單性
- 在Java語言當中真正操作記憶體的是:JVM(Java虛拟機)
- 所有的java程式都是運作在Java虛拟機當中的。
- 而Java虛拟機執行過程中再去操作記憶體。
- 對于C或者C++來說程式員都是可以直接通過指針操作記憶體的。
- C或者C++更靈活,可以直接程式員操作記憶體,但是要求程式員技術精湛。
- C語言或者C++更有駕馭感。
- Java語言屏蔽了指針概念,程式員不能直接操作指針,或者說程式員
- 不能直接操作記憶體。這種方式有優點也有缺點:
飛機航行:優點:不容易導緻記憶體洩漏。(簡單了。) 缺點:效率問題,包括駕馭感比較差。
如果是C語言表示程式員是飛機駕駛員。 如果是Java語言表示程式員是飛機上的乘客。
- Java語言底層是C++,是以JVM是用C++語言寫好的一個虛拟的電腦。
- JVM在哪裡?安裝了JDK之後,JVM就代表安裝好了。
- 記憶體是什麼?
對于計算機來說:最主要的幾個部件是什麼? CPU: 中央處理器,相當于人類的大腦,負責發送并執行指令。 是整個計算機的指揮官。 CPU是負責計算的,負責運算的。 10 + 20 = 30 CPU負責将30這個結果計算出來。 但是在計算過程中有三個資料需要臨時找個空間存儲一下: 這三個資料分别是:10 20 30 記憶體: 程式運作過程當中的臨時資料存儲空間。 斷電之後或者關機之後記憶體中的資料就消失了。 硬碟: 持久化裝置,硬碟上的資料不會因斷電而丢失。 主機闆: 相當于人類的軀幹,是一個載體: CPU、記憶體條、硬碟等主要的部件都是放在主機闆上的, 主機闆上有很多線,将以上的部件連結起來。 .....
1.2、java是堪稱完全面向對象的。
- 面向對象更容易讓人了解,人類通常是以對象的方式認知世界的。
- 采用面向對象的方式可以讓複雜問題簡單化。
1.3、健壯性
- 主要是因為Java中有一種機制:自動垃圾回收機制(GC機制)。
- java語言是健壯的,相對于C語言來說,C語言沒有Java健壯。
- Java不容易導緻記憶體的洩漏。
- C++或者C語言使用不當時很容易導緻記憶體洩漏。
- JVM負責排程GC機制。程式員不需要幹涉。
- 以上講解中又描述了這幾個術語:
JVM(C++語言寫的一個虛拟的計算機)、GC(垃圾回收機制)
1.4、java完全/完美支援多線程并發。
1.5、可移植性/跨平台
- java語言隻要編寫一次,可以做到到處運作。
-
例如:java程式編寫完之後,可以運作在windows作業系統上,
不需要做任何改動可以直接運作在Linux作業系統上,同樣也
可以運作到MaC OS上面。
- 一次編寫,到處運作。(平台改變了,程式不需要改。)
- JVM這種機制實作了跨平台,那麼這種機制優點和缺點分别是什麼?
優點:一次編寫到處運作,可以跨平台。 缺點:麻煩。對于運作java程式來說必須先有一個JVM。
- 就像你要想在網頁上看視訊,你必須先安裝一個flash是一樣的。
- Java語言可以編寫病毒嗎?
可以,沒問題。但是很難讓使用者中毒。 中毒的一般都是java程式員。是以很少有人編寫java的病毒腳本。
2、JDK、JRE、JVM三者之間的關系?
- JDK:Java開發工具箱
- JRE:java運作環境
- JVM:java虛拟機
- JDK包括JRE,JRE包括JVM。
- JVM是不能獨立安裝的。
- JRE和JDK都是可以獨立安裝的。
- 有單獨的JDK安裝包。
- 也有單獨的JRE安裝包。
- 沒有單獨的JVM安裝包。
- 安裝JDK的時候:JRE就自動安裝了,同時JRE内部的JVM也就自動安裝了。
- 安裝JRE的時候:JVM也就自動安裝了。
- 問題:
假設你在軟體公司開發了一個新的軟體,現在要去客戶那邊給客戶把 項目部署一下,把項目跑起來,你需要安裝JDK嗎? 隻需要安裝JRE就行了。 JRE體積很小,安裝非常便捷快速。
-
為什麼安裝JDK的時候會自帶一個JRE? 因為java程式員開發完程式之後,要測試這個程式, 讓這個程式運作起來,需要JRE。是以JDK安裝的時候 内部自帶一個JRE。
3、到目前為止,我們接觸過的重點術語,總結一下:
Java體系的技術被劃分為三大塊:
JavaSE:标準版
JavaEE:企業版
JavaME:微型版
安裝JDK之後:
JDK:java開發工具箱
JRE:Java運作環境
JVM:Java虛拟機
4、對Java的加載與執行的了解(理論比較重要)
- java程式從編寫到最終運作經曆了哪些過程????
- java程式非常重要的兩個階段:
編譯階段 運作階段
- 注意:java程式員直接編寫的java代碼(普通文本)是無法執行被JVM識别的。java程式員編寫的java代碼這種普通文本必須經過一個編譯,将這個“普通文本代碼”變成“位元組碼”,JVM能夠識别“位元組碼”。
- java代碼這種普通文本變成位元組碼的過程,被稱為:編譯。
- java代碼這種普通文本被稱為:java源代碼。(你編寫的代碼是源代碼)
-
源代碼不能直接執行,需要先進行編譯,生成源代碼對應的“位元組碼”
JVM可以識别的是位元組碼。
- 編譯階段和運作階段可以在不同的作業系統上完成嗎?
在windows上編譯
編譯之後生成了“位元組碼”
把“位元組碼”放到linux上運作
完全可以,因為Java是跨平台的。
可以做到一次編寫到處運作。
- java源代碼一旦編譯之後,源代碼可以删除嗎?隻留下位元組碼可以執行嗎?
完全可以執行,因為源代碼不參與程式的執行過程。
參與程式執行過程的是位元組碼。
但是最好不要删除源代碼。因為有可能執行結果不是你需要的,
當執行結果不是你需要的時候,你可以重新打開源代碼進行修改,
然後重新編譯生成新的位元組碼,再重新執行。這樣會有新的執行效果。
- 放源代碼的檔案擴充名必須是:xxx.java
- 并且需要注意的是:編譯生成的位元組碼檔案擴充名是:xxx.class
- .java檔案就是源檔案,這個檔案中編寫源代碼。
- .class檔案就是位元組碼檔案,這個檔案是編譯源代碼而得到的。
- 另外需要注意的是:
1個java源檔案是可以編譯生成多個class檔案的。
最終運作的是class檔案。
- 問題:位元組碼檔案是二進制檔案嗎?
位元組碼檔案不是二進制檔案。
如果是二進制的話,就不需要JVM了。
因為作業系統可以直接執行二進制。
- java程式從開發到最終運作經曆了什麼?
編譯期:(可以在windows上)
第一步:在硬碟的某個位置(随意),建立一個xxx.java檔案
第二步:使用記事本或者其它文本編輯器例如EditPlus打開xxx.java檔案
第三步:在xxx.java檔案中編寫“符合java文法規則的”源代碼。
第四步:儲存(一定要将xxx.java檔案儲存一下)
第五步:使用編譯器(javac【JDK安裝後自帶】)對xxx.java檔案進行編譯。
第六步:如果xxx.java檔案中編寫的源代碼是符合文法規則的,編譯會通過,
如果xxx.java檔案中編寫的源代碼違背了文法規則,那麼編譯器會報錯,編譯器
報錯之後class檔案是不會生成的,隻有編譯通過了才會生成class位元組碼檔案。
并且一個java源檔案是可以生成多個class檔案的。(編譯實質上是檢查文法)
運作期:(JRE在起作用):(可以在windows上,也可以在其他的OS上。)
第七步:如果是在Linux上運作,需要将windows上生成的class檔案拷貝過去
不需要拷貝源代碼,真正運作的是位元組碼。(但是源代碼也不要删除,有用)
第八步:使用JDK自帶的一個指令/工具:java(負責運作的指令/工具)執行位元組碼
第九步:往下的步驟就全部交給JVM了,就不需要程式員幹涉了。
JVM會将位元組碼檔案裝載進去,然後JVM對位元組碼進行解釋(解釋器負責将位元組碼
解釋為1010101010..等的二進制)
第十步:JVM會将生成的二進制碼交給OS作業系統,作業系統會執行二進制碼和
硬體進行互動。
- 注意:在以上的過程中,需要使用兩個非常重要的指令?
- javac 指令,負責編譯
- java 指令,負責運作
- 小插曲:
xxx.java源檔案經過編譯之後生成了A.class、B.class、C.class等檔案,
那麼我們稱A是一個類、B是一個類、C是一個類。其中A、B、C是類的名字。
沒有為什麼,死記硬背,SUN公司的java文法就是這麼規定的。
A/B/C是類的名稱。A類、B類、C類。
- 源檔案中編寫的代碼叫做:源代碼。
- 以上是一個複雜的過程,那麼縮減一下,程式員到底要幹啥?
建立java檔案
打開java檔案
寫java源代碼
儲存
javac指令編譯
java指令運作
編寫、編譯、運作
5、編寫java中的第一個java程式:HelloWorld(你好世界)
- 這個程式不需要大家了解,大家照抄就行,因為目前我也不會講解這個程式為什麼這麼寫。
- 主要是為了搭建java的開發環境,測試java的環境是否能用。
第一步:安裝文本編輯器(EditPlus)
第二步:安裝JDK(先下載下傳JDK)
安裝JDK13,直接下一步就行。
JDK13安裝的時候内置了一個JRE,獨立于JDK之外的JRE并沒有生成。
對于java13來說,如果你希望生成一個獨立于JDK之外的JRE的話需要執行特殊的指令。
這裡先不講,後期用到的時候再說。
注意的是:
JDK8安裝的時候,不僅JDK内置了一個JRE,而且還會在JDK目錄之外
獨立的生成一個單獨的JRE。(以前低版本的時候,JRE實際上是有2個。)
一個是JDK内置的,一個是獨立于JDK之外的。
JDK的bin目錄下有:
javac.exe 負責編譯
java.exe 負責運作
第三步:寫代碼
寫一下第一個程式HelloWorld。
這個代碼在此強調:
檔案名照抄
檔案内容代碼嚴格照抄
照抄大小寫
照抄任何一個環節
照抄标點符号
括号:
[]
()
{}
都要成對寫。
第四步:編譯
第五步:運作