2017.11.5 陰
一、Java的技術特點
Java包含了很多技術,從整體上分,Java技術可分為:Java編程語言和Java平台
Java編程語言是一種高級的編程語言,其特點有:
>簡單 >結構中立
>面向對象 >健壯性
>可移植性強 >高性能
>多線程 >安全性
>動態
1、跨平台性
所謂的跨平台性,是指軟件可以不受計算機硬件和操作系統的約束而在任意計算機環境下正常運行。這是軟件發展的趨勢和編程人員追求的目標。
之所以這樣說,是因為計算機硬件的種類繁多,操作系統也各不相同,不同的用戶和公司有自己不同的計算機環境偏好,而軟件為了能在這些不
同的環境里正常運行,就需要獨立於這些平台。
而在Java語言中, Java自帶的虛擬機很好地實現了跨平台性。 Java源程序代碼經過編譯后生成二進制的字節碼是與平台無關的,但是可被
Java虛擬機識別的一種機器碼指令。 Java虛擬機提供了一個字節碼到底層硬件平台及操作系統的屏障,使得Java語言具備跨平台性。
2. 面向對象
面向對象是指以對象為基本粒度,其下包含屬性和方法。對象的說明用屬性表達,而通過使用方法來操作這個對象。面向對象技術使得應用程序的開發變得簡單易用,
節省代碼。Java是一種面向對象的語言,也繼承了面向對象的諸多好處,如代碼擴展、代碼復用等。
3. 安全性
安全性可以分為四個層面,即語言級安全性、編譯時安全性、運行時安全性、可執行代碼安全性。語言級安全性指Java的數據結構是完整的對象,這些封裝過的數據
類型具有安全性。編譯時要進行Java語言和語義的檢查,保證每個變量對應一個相應的值,編譯后生成Java類。運行時Java類需要類加載器載入,並經由字節碼校驗器校
驗之后才可以運行。 Java類在網絡上使用時,對它的權限進行了設置,保證了被訪問用戶的安全性。
4. 多線程
多線程在操作系統中已得到了最成功的應用。多線程是指允許一個應用程序同時存在兩個或兩個以上的線程,用於支持事務並發和多任務處理。 Java除了內置的多線程
技術之外,還定義了一些類、方法等來建立和管理用戶定義的多線程。
5. 簡單易用
Java源代碼的書寫不拘泥於特定的環境,可以用記事本、文本編輯器等編輯軟件來實現,然后將源文件進行編譯,編譯通過后可直接運行,通過調試則可得到想要的結果。
二、Java程序的編制和運行
我們大家都知道,計算機不能直接理解源代碼中的高級語言,只能直接理解機器語言,所以必須要把“我們說的話”翻譯成“機器能理解的語言”,這樣二者之間才能進行有效的溝通,計算機也才能執行高級
語言編寫的程序。
翻譯的方式有兩種:一個是編譯,一個是解釋。兩種方式只是翻譯的時間不同。
作為編譯型語言,Java中的所有的源程序文件被編譯后,統一生成一種被稱為Java字節碼的中間語言,與C語言生成特定硬件和操作系統平台不同的是,Java程序編譯后
生成的字節碼對所有計算機是相同的。因為編譯后的文件名后綴為.class,所以字節碼文件又稱為Java類文件。
作為解釋型語言,Java源代碼編譯后生成的字節碼文件是不能直接執行的,需要一個稱為Java虛擬機(Java Virtual Machine,簡稱JVM)的程序翻譯成本地的機器碼
后才能執行。
下面請看一張圖:

1、編譯
Java編譯器對源文件進行錯誤排查的過程,編譯后將生成后綴名為.class的字節碼文件。好讓JVM(java虛擬機)里的解釋器可以正常讀取。
2、運行
三步 代碼的裝入、代碼的校驗和代碼的執行
2.1 、 代碼的裝入
JVM控制解釋器中的“類裝載器”去讀取和裝載程序所需的類(class的字節碼)。然后解釋器開始建立類與類之間的關系。
2.2、 代碼的校驗
字節碼校驗器進行檢查:校驗器可發現操作數棧溢出,非法數據類型轉化等多種錯誤。
2.3、 代碼的執行
3、執行
執行分兩種情況
即時編譯方式:解釋器先將字節碼編譯成機器碼,然后再執行該機器碼。
解釋執行方式:解釋器通過每次解釋並執行一小段代碼來完成Java字節碼程 序的所有操作。
通常采用的是第二種方法。由於JVM規格描述具有足夠的靈活性,這使得將字節碼翻譯為機器代碼的工作
JVM運行Java程序的方式有兩種:jar包 與 Class
運行jar 的時候,Java.exe調用GetMainClassName函數,該函數先獲得JNIEnv實例然后調用JarFileJNIEnv類中getManifest(),從其返回的Manifest對象中取
getAttrebutes("Main-Class")的值,即jar 包中文件:META-INF/MANIFEST.MF指定的Main-Class的主類名作為運行的主類。之后main函數會調用Java.c中
LoadClass方法裝載該主類(使用JNIEnv實例的FindClass)。
運行Class的時候,main函數直接調用Java.c中的LoadClass方法裝載該類。