資安

JAVA簡介及特性 ——《我的Java打怪日記》

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。
        這個代碼在此強調:
            文件名照抄
            文件內容代碼嚴格照抄
            照抄大小寫
            照抄任何一個環節
            照抄標點符號

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *