1. 程式人生 > >為什麼Java可以跨平臺c/c++不可以嗎

為什麼Java可以跨平臺c/c++不可以嗎

Java是解釋型語言,在不同作業系統上執行Java時,由與該作業系統上對應的Java虛擬機器(JVM)對其對其翻譯,逐條程式碼解釋為該作業系統識別的東東。所以Java跨平臺的前提是它所要跨的平臺上事先裝有對應的Java虛擬機器。在滿足這個前提的基礎上Java編譯出的.class檔案才能實現所謂的跨平臺。(注意:Java虛擬機器並不是跨平臺的,不同的作業系統有不同的Java虛擬機器)

其實微軟的C#也是類似於Java的解釋性語言,同樣也可以跨Linux和Unix等作業系統,只不過微軟並沒有針對除windows外的作業系統開發C#虛擬機器(個人猜測,可能是更多地推廣windows作業系統),不過Novell開發的Mono可以讓你在Linux下使用C#………………(知識有限,具體為什麼C#在跨平臺方面的名聲不如Java這裡不做分析)。

c/c++是編譯型語言,編譯型語言的程式碼在某平臺編譯後的檔案可以在該平臺下直接執行,不依賴於虛擬機器,因此執行速度要高於解釋型語言。事實上,只要在不同的作業系統裝有支援c/c++的編譯器,c/c++同樣可以在該作業系統上執行。

總結:Java編譯生成的檔案通過JVM執行,支援Java的作業系統都是裝有相應的JVM的。c/c++編譯成的檔案可以直接在作業系統上執行,是針對不同的作業系統的。所以說,Java的執行檔案依賴於JVM,不同的作業系統可以有不同的JVM來為同一個Java服務,而c/c++的執行檔案依賴於作業系統,面對不同的作業系統只好再次編譯才能執行。

  總之,Java是編譯檔案級的跨平臺,c/c++是原始碼級的跨平臺。

感悟:尼瑪,表達能力不好真是不行,還得好好練練。

QQ:871632302

免責宣告:知識有限,有理解不到位的地方請諒解並及時幫忙糾正。歡迎一起討論,謝謝!!

相關推薦

為什麼Java可以跨平臺c/c++可以

Java是解釋型語言,在不同作業系統上執行Java時,由與該作業系統上對應的Java虛擬機器(JVM)對其對其翻譯,逐條程式碼解釋為該作業系統識別的東東。所以Java跨平臺的前提是它所要跨的平臺上事先裝有對應的Java虛擬機器。在滿足這個前提的基礎上Java編譯出的.cla

天天 JavaC/C++,可這五種編程語言你知道

計算機 scrip rip 生存 腳本 價值 本質 號稱 c++ "適者生存,優勝劣汰”,編程語言同樣適用。 世界上有超過 1500 種編程語言,雖然本質上都是對於最底層 0 與 1 的抽象和封裝,但是卻沒有哪一種編程語言可以解決所有的問題。當有新的問題領域出現時

天天 JavaC/C++,可這五種程式語言你知道

"適者生存,優勝劣汰”,程式語言同樣適用。 世界上有超過 1500 種程式語言,雖然本質上都是對於最底層 0 與 1 的抽象和封裝,但是卻沒有哪一種程式語言可以解決所有的問題。當有新的問題領域出現時,就需要創造新的程式語言來適配它。這也就導致了不同的計算機語言擁有不同的“個性”——除去 Python、Jav

借助第三者實現兩個變數的交換(java&&C

1.原理:a^b^b = a 2.實現 java: package javaPractice; import java.util.*; public class Exchange { public static void main(String[] args) { Scanne

這麼高顏值的Kubernetes管理工具Lens,難道還C位出道

# 1 前言 > 歡迎訪問[南瓜慢說 www.pkslow.com](https://www.pkslow.com/)獲取更多精彩文章! `Docker & Kubernetes相關文章:`[容器技術](https://www.pkslow.com/categories/container)

c# 當前會命中斷點 未載入該文檔

存在 clas -a 引用 找不到 c# 一次 ng- 斷點 C#編碼時。有時會遇到標題所說的問題,就是說這個文件和方法明明存在,可總是提示找不到方法。解決方法例如以下: 1、清理全部項目(或相關項目)生成 2、又一次加入全部項目(或相關項目)間的互相引用 3

c#securityexception允許所請求的註冊表訪問權

registry dex content filename except user set key 解決 【轉載】 c#securityexception不允許所請求的註冊表訪問權 開機自啟動程序如下:

JAVAC++,CC++的差別

-m content 才幹 hit 沒有 span 自增 ng- data- 首先來分析JAVA與C++的差別: JAVA是純面向對象的語言,而C++是基於面向對象過程的語言。 JAVA有著垃圾回收機制。它的語法是C+&#

簡單的Java,Python,C,C++

new dex bin write pau 文本 utf-8 提示信息 取數 1 Java 語言 2 //package main 3 //註意不要添加包名稱,否則會報錯。 4 5 import java.io.*; 6 import java.

Swift語言中與C/C++和Java不同的語法(五)

函數類型 fun java col str logs 默認參數 int函數 ... 這一節將會提到Swift中其他的關於函數的應用,這些內容包括有: 默認參數值和可變參數值、常量參數、返回函數類型和函數嵌套: 一、默認參數值和可變參數值 對默認參數值是指在函數的聲明中就已經

java翻譯lua+c+openssl簽名項目

desc ckey logs {} form pan return lua 代碼 原來項目中用openresty nginx+lua實現server,lua調用c動態鏈接庫,來使用openss做簽名,並生成130字節(128簽名+2位自定義字節)長度的文件。 ngin

Java調用c程序動態庫詳細案例

mic fan 調用 c程序 案例 href java pid blank 1n閡嚎o指N階墑06灰tjhttp://huiyi.docin.com/arg9509 N19u4wTfnd塵2http://shufang.docin.com/fbqja96992 84稭棧

java調用c#開發的webservice

bool verbose int exceptio web rgs 目錄 odi 自帶 使用jdk自帶的wsimport工具生成代理類 c:\Program Files\Java\jdk1.8.0_121\bin>wsimport -keep -encoding

C#生成重復的隨機數

check string nbsp 數值 數字 ring 遞歸調用 next 重復 private string RndomStr(int codeLength) { //組成字符串的字符集合 0-9數字、大小寫字

隨筆④ javac ++/c比較

可能 隨筆 pan ont -s size 內存 span 關心 Java和C/C++的比較 Java不支持指針,C/C++支持 Java程序不需要顯式地關心內存釋放,而C/C++需要 Java程序需要編譯成字節碼文件,然後再解釋執行。 Java數組可能溢出,C/C++數

C#生成重復隨機字符串類

content tran () fff ati 書寫 get mar title 本文實例講述了C#生成不重復隨機字符串類。分享給大家供大家參考。具體如下: 這個C#類用於隨機產生不重復的字符串,可以指定字符串範圍,可以指定要產生字符串的長度using System; n

IKVM:java代碼c#調用

col path time 加密 clas 主目錄 str 組件 文件加載 在工作中遇到對接java接口,涉及到java加密或簽名問題,.net無法實。就將java代碼編輯為dll給.net調用 註:這裏只做簡單java代碼處理,不涉及到復雜的java包 java文件處理:

我與C# yield能說的秘密

ext not 執行 throw 朋友 text t權限 鏈表 處理異常 那一次的邂逅: 第一次見到yield的時候,內心中充滿了各種聲音,這是個啥子鬼扯扯的東西?C#有這個破玩意嗎?這是一個關鍵字?按捺不住內心的疑惑,熟練的打開了宇宙第一IDE ------ VS2

Unity 使用C/C++ 跨平臺終極解決方式(PC,iOS,Android,以及支持C/C++的平臺)

log initial ava open tis called 文章 sharp strong PC的事實上根本不用說,畢竟C#和C++交互的文章已經夠多了,當然我

Unity 使用C/C++ 跨平臺終極解決方案(PC,iOS,Android,以及支持C/C++的平臺)

細節 -h comment 個人 tle lan source 多說 sharp https://blog.csdn.net/fg5823820/article/details/47865741 PC的其實根本不用說,畢竟C#和C++交互的文章已經夠多了,當然我自認為經過幾