回覆列表
-
1 # IT技術專家孫鑫
-
2 # 思凡79
java是解釋型語言,C++是編譯型語言。
什麼是解釋型語言?解釋型語言是依賴虛擬機器,才能執行的語言。在使用Java的時候,你必須安裝有SUN的java虛擬機器,才能夠執行java語言。因為你的java程式碼,是要先進入虛擬機器裡面,虛擬機器本質上是一個語言翻譯機,它會把你的程式碼翻譯成0和1,然後給CPU跑
什麼是編譯型語言?編譯型語言不需要依賴任何環境,程式碼寫完編譯後,直接就是0和1,CPU能直接跑
優缺點:
解釋性語言跨平臺,比如在windows上,linux上,你都可以用java寫程式碼,而且程式碼可以互相移植,基本上不需要改動。因為虛擬機器這個中間人幫你轉換了。
編譯型語言依賴平臺,但速度快。C++,在windows上寫完,你要換到linux上,那可是千難萬難,要改很多。
Java在設計時,吸取了C++的一些語法特性,因而C++程式設計師初次接觸Java語言,就會感到很熟悉。從某種意義上講,Java語言是C及C++語言的一個變種,因此,C++程式設計師可以很快地掌握Java程式設計技術。
Java與C++的區別Java摒棄了C++中容易引發程式錯誤的一些特性,如指標、結構、運算子過載、多重繼承等。 Java提供了豐富的類庫。利用Java提供的類庫,我們可以快速開發檔案讀寫程式、圖形介面程式、網路通訊程式等許多應用程式。C++為了向下相容C語言,因此既支援面向物件、又支援面向過程的開發。而Java則是一個完全面向物件的語言,在Java的世界中,一切都是物件! 與C++類似,Java也是一種強型別的語言,不過在型別檢查方面,Java比C++還要嚴格!除了型別檢查,Java還引入了垃圾記憶體回收(GC)機制,這個功能有效地免了記憶體洩漏的問題,讓程式執行更加穩定。在C和C++中,我們經常會定義一個指標,然後為其動態分配一塊堆記憶體,當我們利用這個指標完成某個功能後,經常忘記釋放為這個指標所分配的記憶體,這樣就會造成記憶體洩漏。在Java語言中,當我們為一個物件分配記憶體後,我們不需要去考慮什麼時候為這個物件釋放記憶體,所有這一切都由Java的垃圾記憶體回收機制來完成,它會自動幫助我們回收無用的記憶體。 Java被設計為支援應用程式部署到各種不同的網路環境中。在這樣的環境中,Java應用程式必須能夠在各種不同的硬體環境、各種不同的作業系統平臺下執行。為了實現這一目標,Java編譯器將Java原始碼編譯成一種結構中立的中間檔案格式——位元組碼(bytecodes)。位元組碼與特定的計算機體系結構無關,只要有Java執行環境的機器都能夠執行這種中間程式碼。 而C++將源程式編譯為二進位制指令,與特定作業系統與硬體平臺相關,因此不同系統平臺下的C++程式不能直接執行。Java可以在執行時直接將目的碼翻譯成機器指令,這主要是由Java虛擬機器中的JIT (Just In Time,即時編譯)編譯器來實現的。隨著JIT編譯器技術的發展,Java程式碼的執行速度越來越接近於C++程式碼。Java語言的另一個重要特性就是在語言級支援多執行緒的程式設計。 C++是在C++11標準才引入了多執行緒的支援。Java的動態特性是其面向物件設計方法的擴充套件,它允許程式動態地裝入執行過程中所需要的類,這是我們使用C++語言進行面向物件程式設計所無法實現的。 在C++程式設計過程中,每當在類中增加一個例項變數或一個成員函式後,繼承該類的所有子類都必須重新編譯,否則將導致程式崩潰,而Java則採用了一些措施來解決這個問題。首先,Java編譯器不是將物件例項變數和成員函式的引用編譯為數值引用,而是將符號引用資訊儲存在位元組碼中,傳遞給直譯器,由直譯器在完成動態連結類後,將符號引用資訊轉換為數值偏移量。一個在儲存器中生成的物件不在編譯過程中決定,而是延遲到執行時由直譯器確定。這樣,對類中變數和方法進行更新時就不至於影響現有的程式碼。解釋執行位元組碼時,這種符號資訊的查詢和轉換過程僅在一個新的名字出現時才進行一次,隨後,程式碼便可以全速執行。在執行時確定引用的好處是可以使用已被更新的類,而不用擔心影響其它程式碼。如果程式連結了網路中另一個系統中的某一個類,該類的所有者也可以自由地對該類進行更新,而不會使任何引用該類的程式崩潰。