跨平台理论杂记
跨平臺理論雜記
1,
JVM也是一個軟件,不同的平臺有不同的版本。我們編寫的Java源碼,編譯后會生成一種 .class 文件,稱為字節碼文件。Java虛擬機就是負責將字節碼文件翻譯成特定平臺下的機器碼然后運行。也就是說,只要在不同平臺上安裝對應的JVM,就可以運行字節碼文件,運行我們編寫的Java程序。
而這個過程中,我們編寫的Java程序沒有做任何改變,僅僅是通過JVM這一”中間層“,就能在不同平臺上運行,真正實現了”一次編譯,到處運行“的目的。
JVM是一個”橋梁“,是一個”中間件“,是實現跨平臺的關鍵,Java代碼首先被編譯成字節碼文件,再由JVM將字節碼文件翻譯成機器語言,從而達到運行Java程序的目的。
注意:編譯的結果不是生成機器碼,而是生成字節碼,字節碼不能直接運行,必須通過JVM翻譯成機器碼才能運行。不同平臺下編譯生成的字節碼是一樣的,但是由JVM翻譯成的機器碼卻不一樣。
所以,運行Java程序必須有JVM的支持,因為編譯的結果不是機器碼,必須要經過JVM的再次翻譯才能執行。即使你將Java程序打包成可執行文件(例如 .exe),仍然需要JVM的支持。
注意:跨平臺的是Java程序,不是JVM。JVM是用C/C++開發的,是編譯后的機器碼,不能跨平臺,不同平臺下需要安裝不同版本的JVM。
來自 <http://blog.csdn.net/u014683605/article/details/46620055>
2,
所謂跨平臺,就是理論上你寫了一份代碼,在任何平臺上執行都會得到相同的結果。java和C#這些能跨平臺的語言其實并沒有編譯成本地代碼,而是編譯成中間語言,然后通過不同平臺的JVM或.net framework實現在不同平臺上運行。C語言為什么可以在window和Linux上都能執行?因為系統開發者在開發系統的時候均遵循了C語言規范,所以可以做到,但是你在Windows下編譯C生成的.exe文件,你是沒有可能在Linux下運行的,反之亦然。
來自 <http://tieba.baidu.com/p/2989247025>
3,動態與靜態語言
動態類型語言:在運行期間檢查數據的類型的語言。用這類語言編程,不會給變量指定類型,而是在附值時得到數據類型。如:Python和ruby就是典型動 態類型語言。很多腳本語言vbscrīpt,javascrīpt也是這類語言??聪旅鎗avascrīpt代碼:
function add(a,b){
return a+b;
}
add(1,2);
add('1',2);
靜態類型語言:相反靜態類型語言是在運行前編譯時檢查類型。在寫代碼時,沒聲明一個變量必須指定類型。如:java,c#,c,c++等等。
public int add(int a,int b){
return a+b;
}
而Dynamic Programming Language (動態編程語言)指在程序運行過程中可以改變數據類型的結構,對象的函數,變量可以被修改刪除
網上有人說 類型檢查和改變結構 是靜態語言和動態語言兩個區別點。
posted on 2016-10-01 18:59 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
- 上一篇: 【转】C#格式化字符串
- 下一篇: TortoiseGIT安装过程及问题