這是程序員cxuan的第四篇硬核分享java
先來看一下本篇文章的思惟導圖吧,我會圍繞下面這些內容進行講解。內容很乾,小夥伴們看完還但願不吝轉發。(高清思惟導圖版本關注做者公衆號 Java建設者 回覆 Java666 獲取,其餘思惟導圖獲取方式在文末)。
程序員
下面開始咱們的文章。編程
什麼是 Java?安全
Java 是 Sun Microsystems 於1995 年首次發佈的一種編程語言和計算平臺。編程語言還比較好理解,那麼什麼是 計算平臺 呢?多線程
「計算平臺是在電腦中運行應用程序(軟件)的環境,包括硬件環境和軟件環境。通常系統平臺包括一臺電腦的硬件體系結構、操做系統、運行時庫。框架
Java 是快速,安全和可靠的。從筆記本電腦到數據中心,從遊戲機到科學超級計算機,從手機到互聯網,Java 無處不在!Java 主要分爲三個版本編程語言
Java 的特色ide
Java 是一門面向對象的編程語言性能
什麼是面向對象?面向對象(Object Oriented) 是一種軟件開發思想。它是對現實世界的一種抽象,面向對象會把相關的數據和方法組織爲一個總體來看待。編碼
相對的另一種開發思想就是面向過程的開發思想,什麼面向過程?面向過程(Procedure Oriented) 是一種以過程爲中心的編程思想。舉個例子:好比你是個學生,你天天去上學須要作幾件事情?
起牀、穿衣服、洗臉刷牙,吃飯,去學校。通常是順序性的完成一系列動做。
class student { void student_wakeUp(){...} void student_cloth(){...} void student_wash(){...} void student_eating(){...} void student_gotoSchool(){...} }
而面向對象能夠把學生進行抽象,因此這個例子就會變爲
class student(){ void wakeUp(){...} void cloth(){...} void wash(){...} void eating(){...} void gotoSchool(){...} }
能夠不用嚴格按照順序來執行每一個動做。這是特色一。
public void foo() { int x = 5; boolean b = x; }
靜態語言主要有 Pascal, Perl, C/C++, JAVA, C#, Scala 等。
相對應的,動態語言沒有任何特定的狀況須要指定變量的類型,在運行時肯定的數據類型。好比有Lisp, Perl, Python、Ruby、JavaScript 等。
從設計的角度上來講,全部的語言都是設計用來把人類可讀的代碼轉換爲機器指令。動態語言是爲了可以讓程序員提升編碼效率,所以你可使用更少的代碼來實現功能。靜態語言設計是用來讓硬件執行的更高效,所以須要程序員編寫準確無誤的代碼,以此來讓你的代碼儘快的執行。從這個角度來講,靜態語言的執行效率要比動態語言高,速度更快。這是特色四。
Java 有一句很是著名的口號:Write once, run anywhere,也就是一次編寫、處處運行。爲何 Java 可以吹出這種牛批的口號來?核心就是 JVM。咱們知道,計算機應用程序和硬件之間會屏蔽不少細節,它們之間依靠操做系統完成調度和協調,大體的體系結構以下
那麼加上 Java 應用、JVM 的體系結構會變爲以下
Java 是跨平臺的,已編譯的 Java 程序能夠在任何帶有 JVM 的平臺上運行。你能夠在 Windows 平臺下編寫代碼,而後拿到 Linux 平臺下運行,該如何實現呢?
首先你須要在應用中編寫 Java 代碼;
用 Eclipse 或者 javac 把 Java 代碼編譯爲 .class 文件;
而後把你的 .class 文件打成 .jar 文件;
而後你的 .jar 文件就可以在 Windows 、Mac OS X、Linux 系統下運行了。不一樣的操做系統有不一樣的 JVM 實現,切換平臺時,不須要再次編譯你的 Java 代碼了。這是特色五。
Java 是一門高級語言,高級語言會對用戶屏蔽不少底層實現細節。好比 Java 是如何實現多線程的。從操做系統的角度來講,實現多線程的方式主要有下面這幾種
在用戶空間中實現多線程
在內核空間中實現多線程
在用戶和內核空間中混合實現線程
而我認爲 Java 應該是在 用戶空間 實現的多線程,內核是感知不到 Java 存在多線程機制的。這是特色六。
咱們編寫的代碼,通過 javac 編譯器編譯稱爲 字節碼(bytecode),通過 JVM 內嵌的解釋器將字節碼轉換爲機器代碼,這是解釋執行,這種轉換過程效率較低。可是部分 JVM 的實現好比 Hotspot JVM 都提供了 JIT(Just-In-Time) 編譯器,也就是一般所說的動態編譯