「一次編譯、處處運行」說的是Java語言跨平臺的特性,簡單地來說,Java的跨平臺特性與Java虛擬機的存在密不可分,可在不一樣的環境中運行。好比說Windows平臺和Linux平臺都有相應的JDK,安裝好JDK後也就有了Java語言的運行環境。其實Java語言自己與其餘的編程語言沒有特別大的差別,並非說Java語言能夠跨平臺,而是在不一樣的平臺都有可讓Java語言運行的環境而已,因此纔有了Java一次編譯,處處運行這樣的效果。java
嚴格的講,跨平臺的語言不止Java一種,但Java是較爲成熟的一種。瞭解編程的同窗都知道「語言處理程序」,其實就是編譯器。「一次編譯,處處運行」這種效果就跟這個編譯器有關。程序員
首先來看編碼階段,即便用編程語言來寫程序,但程序寫完以後是不能直接運行的,還要進行下一個階段的處理,即編譯階段,對於編程語言的處理須要編譯器和解釋器。它的意義在於把程序設計語言翻譯成目標語言。也就是說,編程語言並非計算機能夠直接識別的語言,因此還須要一個「翻譯官」來進行翻譯。Java虛擬機和DOS相似,至關於一個供程序運行的平臺。還記得咱們在初學Java時用記事本寫的簡易程序嗎?
在以上的講解中已經提到程序從源代碼到運行的三個階段:編碼——編譯——運行——調試。這也是高級語言的一種共同特徵。Java除了面向對象這一特徵外,在編譯階段則體現了跨平臺的特色。尚學堂•百戰程序員陳老師指出編譯過程大概是這樣的:首先是將Java源代碼轉化成.CLASS文件字節碼,這是第一次編譯。.class文件就是能夠處處運行的文件。而後Java字節碼會被轉化爲目標機器代碼,這是是由JVM來執行的,即Java的第二次編譯。編程
「處處運行」的關鍵和前提就是JVM。由於在第二次編譯中JVM起着關鍵做用。在能夠運行Java虛擬機的地方都內含着一個JVM操做系統。從而使JAVA提供了各類不一樣平臺上的虛擬機制,所以實現了「處處運行」的效果。須要強調的一點是,java並非編譯機制,而是解釋機制。Java字節碼的設計充分考慮了JIT(Just InTime)這一即時編譯方式,能夠將字節碼直接轉化成高性能的本地機器碼,這一樣是虛擬機的一個構成部分。編程語言