1. 程式人生 > >Java學習前必須知道的重點知識【重點基礎】

Java學習前必須知道的重點知識【重點基礎】

一、高階語言的執行機制

        我們程式設計都是用的高階語言計算機不能直接理解高階語言,只能理解和執行機器語言,所以必須要把高階語言翻譯成機器語言,計算機才能執行高階語言所編寫的程式。

        翻譯的方式有兩種,一是編譯,另一種是解釋。兩種方式只是翻譯的時間不同。

二、編譯型語言(如C、C++、Objective-C

        使用專門的編譯器,針對特定平臺(作業系統)將某種高階語言原始碼一次性”翻譯“成可被該平臺硬體執行的機器碼(包括機器指令和運算元),幷包裝成該平臺所能識別的可執行性程式的格式。

        優點: 執行效率較高

        缺點:編譯生成的程式無法移植

三、解釋型語言(如Ruby、Python)

        使用專門的直譯器針對源程式逐行解釋成特定平臺的機器碼並立即執行的語言。解釋型語言通常不會整體性的編譯和連結處理,解釋型語言相當於把編譯型語言中的編譯和解釋過程混合到一起同時完成。

        優點:跨平臺較容易

        缺點:效率較低,不能脫離直譯器獨立執行

四、Java語言的執行機制

Java是編譯型和解釋型語言的結合體。

        ①首先採用通用的java編譯器將java源程式編譯成為與平臺無關的位元組碼檔案(class檔案)

        ②然後由java虛擬機器(JVM)對位元組碼檔案解釋執行。

        注意:java位元組碼具有平臺無關性、可以在各種不同系統平臺中執行,但是需要有不同版本的java虛擬機器,不同系統平臺的java執行環境其java虛擬機器是不一樣的。

五、JVM(Java Virtual Machine Java虛擬機器)

        ①、JVM是java位元組碼執行的引擎。為java程式的執行提供必要的支援,還能優化java位元組碼,使之轉換成效率更高的機器指令。程式設計師編寫的程式最終都要在JVM上執行,JVM中類的裝載是由類載入器(ClassLoader)和它的子類來實現的。  

        ②、ClassLoader是java執行時一個重要的系統元件,負責在執行時查詢並載入.class檔案到記憶體中的類。

        ③、JVM遮蔽了與具體作業系統平臺相關的資訊,從而實現了java程式只需生成在JVM上執行的位元組碼檔案(class檔案),就可以在多種平臺上不加修改地執行。不同平臺對應著不同的JVM,在執行位元組碼時,JVM負責將每一條要執行的位元組碼送給直譯器,直譯器再將其翻譯成特定平臺環境的機器指令並執行。Java語言最重要的特點就是跨平臺執行,使用JVM就是為了支援與作業系統無關,實現跨平臺執行。

        Java虛擬機器(JVM),主要負責執行Java編譯器編譯後的位元組碼檔案class檔案把位元組碼解釋成具體平臺上的機器碼執行JVM存在於記憶體中,與記憶體打交道,它執行在作業系統之上,與硬體沒有直接互動。JVM是一種抽象&虛擬出來的計算機,和實際的計算機一樣,它具有指令集並使用不同的儲存區域。它負責執行指令,還要管理資料,記憶體和暫存器,指令集,暫存器,類檔案的格式,棧,垃圾回收堆,儲存區等。

        JVM自己無法執行,必須要聯合JRE中的Java基礎&核心類庫才能使用。

六、ClassLoader介紹

        當我們編寫好一個Java程式之後,不管是C/S還是B/S應用,都是由若干個.class檔案組織而成的一個完整Java應用程式。當程式在執行時,會呼叫該程式的一個入口函式來呼叫系統的相關功能,而這些功能被封裝在不同的class檔案中。所以,程式就要從這個class檔案中呼叫另一個class檔案中的方法。如果檔案不存在,則會引發系統異常。

        程式在啟動的時候並不會一次性載入程式所有的class檔案,而是根據程式的需要,通過java的類載入機制(ClassLoader)來動態載入某個class檔案到記憶體中。所以,只有class檔案被載入到了記憶體之後,才能被其他class檔案所引用。所以ClassLoader就是用來動態載入class檔案到記憶體當中。

七、Java開發環境JDK 和執行環境JRE

        JDK全稱Java Development Kit簡稱Java開發工具包JDK是Java的核心,它包括Java執行環境Java開發工具(例如:jconsole、javac、java等)。主流的JDK是Sun公司釋出的,但還有很多公司和組織都開發了自己的JDK。

        JDK1.8目錄包含:

        ①、bin  存放一堆exe檔案,可執行的開發工具,最主要的是javac。

        ②、db  JDK1.6之後內建了Derby資料庫,它是一個純用Java實現的記憶體資料庫所以可以在任何平臺上執行。另外一個特點時體積小,免安裝。

        ③、include  Java和JVM互動用的標頭檔案。

        ④、jre  存放Java的執行環境,包括JVM + JAVA基礎&核心類庫。

        ⑤、lib  存放dt.jar和tools.jar等常用類庫的開發依賴包。

        JRE全稱Java Runtime Environment簡稱Java執行環境。它時Java程式執行時的環境集合,包括了Java虛擬機器(JVM)、Java基礎&核心類庫。

        JRE1.8目錄包含:

        ①、bin  有java.exe但沒有javac.exe,只能執行Java程式,可以把這個bin目錄理解成JVM。

        ②、lib  Java基礎&核心類庫。如rt.jar,也包含JVM執行時需要的類庫。

        所以,JDK = JRE + Java開發工具(編譯器、偵錯程式等);JRE=JVM+Java基礎&核心類庫JRE自帶的基礎類庫主要在lib\rt.jar檔案中。在程式執行時,JRE由ClassLoader(類載入器)負責查詢和載入程式引用到的基類庫和其他類庫。JDK、JRE和JVM三者之間的包含關係是JDK > JRE > JVM。

        衍生下JDK的lib包中的tools.jar、dt.jarJRE的lib包中的rt.jar的關係和區別


        總結,JDK是個開發環境,JRE是個執行環境。因此遍寫Java程式的時候需要JDK,而執行Java程式的時候就需要JRE。JDK裡面已經包含了JRE,因此只要安裝了JDK,就可以開發Java程式,也可以正常執行Java程式。

        由於JDK包含了許多與執行無關的內容,例如編譯器、偵錯程式等,佔用的空間較大。因此執行普通的Java程式無須安裝JDK,而只需要安裝JRE(例如伺服器中執行Java程式)。

        正常執行流程:編譯時,JDK中的編譯程式(javac)將Java原始檔(java檔案)編譯成Java位元組碼(class檔案)。執行時,JRE中的JVM解析這些位元組碼,對映到CPU指令集或OS的系統呼叫。

八、Java特點介紹

        所有面向物件程式語言都支援三個概念:封裝、多型性和繼承Java也不例外。現實世界中的物件均有屬性和行為對映到計算機程式上,屬性則表示物件的資料,行為表示物件的方法面向物件其實是現實世界模型的自然延伸。現實世界中任何實體都可以看作是物件。物件之間通過訊息相互作用。另外,現實世界中任何實體都可歸屬於某類事物,任何物件都是某一類事物的例項。如果說傳統的過程式程式語言以過程為中心,以演算法為驅動的話,面向物件的程式語言則是以物件為中心,以訊息為驅動

        繼承,是指一個物件直接使用另一物件的屬性和方法。事實上,我們遇到的很多實體都有繼承的含義。例如,若把車看成一個實體,它可以分成多個子實體,如:卡車、公共汽車等。這些子實體都具有汽車的特性,因此,車是它們的“父親”,而這些子實體則是汽車的“孩子”。Java提供給使用者一系列類(class),Java的類有層次結構,子類可以繼承父類的屬性和方法與別的面向物件程式語言不同,Java只支援單一繼承。 

        封裝,顧名思義就是將重要的內容封裝在類的內部,不能讓外面的類隨意修改封裝內部的資料在定義一個類的成員,往往使用private等關鍵字說明這個成員的訪問許可權,只能被這個類的其他成員方法呼叫,而不能被其他的類中的方法所呼叫

      一個類就是一個模組,我們應該讓模組僅僅公開必須要讓外界知道的內容,而隱藏其他的一切內容。進行程式設計時,應儘量避免一個模組直接修改或操作另一個模組的資料設計追求強內聚,弱耦合

        多型性,就是多種表現形式,具體來說,可以用“一個對外介面,多個內在實現方法”表示。指允許不同類的物件對同一訊息做出響應。即同一訊息可以根據物件的型別不同,而採用多種不同的行為方式。例如,在CS1.6中W鍵預設是向前走,而在LOL中W鍵是釋放技能。相同的事件(按下W鍵)卻在不同的物件型別中(CS1.6和LOL)發生了不同的行為,這就是所謂的多型性。