天天看點

JAVA簡介及特性 ——《我的Java打怪日記》1、Java語言的特性2、JDK、JRE、JVM三者之間的關系?3、到目前為止,我們接觸過的重點術語,總結一下:4、對Java的加載與執行的了解(理論比較重要)5、編寫java中的第一個java程式:HelloWorld(你好世界)

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作業系統,作業系統會執行二進制碼和
            硬體進行互動。           
  • 注意:在以上的過程中,需要使用兩個非常重要的指令?
    1. javac 指令,負責編譯
    2. 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。
        這個代碼在此強調:
            檔案名照抄
            檔案内容代碼嚴格照抄
            照抄大小寫
            照抄任何一個環節
            照抄标點符号

            括号:
                []
                ()
                {}
                都要成對寫。

    第四步:編譯
    第五步:運作