java與c語言的差異有哪些?
1、Java與C記憶體分配不同:
Java中記憶體分配五個區,分別為堆疊區(儲存的是局部變量,使用完畢,立即回收),堆區(儲存的是new出來的東西,實體,對象,每一個對像都有地址值,每個對象的資料都有預設值,使用完畢後,會在垃圾回收器空閒的時候回收),方法區,本地方法區(和系統相關),寄存區(給cpu使用)。 【推薦學習:java課程】
C中記憶體分配四個區,分別為堆疊區(儲存函數參數,局部變數的值),堆區(動態記憶體申請與釋放,若程式設計師不釋放內存,則程式結束後可能由作業系統釋放),全域區(靜態區),代碼區。
2、函數
1)對於變數和函數,C需要實作宣告和定義,而Java中只有定義,沒有宣告;
# 2)由於C不是物件導向的,所以C中所有全域變數和函數本質上對Java都是靜態的。 Java是一種物件導向語言,它不允許在類別和介面之外宣告函數,包括 main 函數和變數。而在C中,常會出現在一個檔案中定義大量的全域變量,在其他檔案中透過引用宣告這些變數來實現共享,但Java不允許有全域變數或函數;
3)當C當中函數傳回值的型別和宣告時型別不符時,函數的回傳值會自動轉換為這個型別之後再進行函數傳回;而在Java中面對次情況時,需要加入強制型別轉換;
4)C中函數呼叫參數計算的順序是未定義的,而Java 是從左到右有順序的;
5)C中如果變數或函數在別的檔案中定義的,必須使用extern 來宣告該變數或函數。在單一檔案編譯的時候它們是不可見,而在連結階段才可見。 Java的編譯器沒有這種連結階段,所有需要的檔案在編譯時必須可見;
6)C和Java程式都從 main 函數開始執行。 C中main 函數一般需要有argc,argv 兩個參數,argc 存在命令列參數個數,argv 存在實際的命令列參數;java 中main 必須用stringargs[] 作為方法的參數,它是用來接收運行系統啟動Java 應用程式時所使用的命令列的參數;
7)C和Java中可以呼叫exit 函數來終結程式;C中可利用abort 函數來退出非正常終止的程序,Java 中沒有相對應的策略。
3、預處理器及頭檔的比較
Java沒有預處理器,也沒有頭檔;C中預處理器只是接收一些文字並將其轉換成為其他文本,編譯器對預處理的原始程式進行編譯,在C中通常用頭檔來聲明原型以及全域變數、函式庫函數等。
4、用途上
C語言:純C一般用在嵌入式上,寫最底層的程序,因為他的語言與硬體的連接最容易。可以做:嵌入式底層軟體 作業系統 各類函數庫引擎庫軟體核心程式碼 伺服器端底層工具。
JAVA:J2EE,J2SM,J2ME什麼都可以。可以做:嵌入式行動裝置應用軟體開發 web網頁後台邏輯開發部分桌面程式
C,JAVA其實都可用在各種領域的。
5、在運作方式上:
C語言:原始的C是面向過程的,就是按行執行。
JAVA:絕對的物件導向,是按模組執行。
(補充:當然,在C ,及C#上,C也有轉換成物件導向模式)
6、文法不同:
C語言可以直接操作內存,java不能直接操作;
C語言可以封裝動態函式庫,java不行;
C語言的程式碼不容易跨平台,java的程式碼容易跨平台;
C語言有指針,java沒有指針;
C語言可以直接操作串口,java需要第三方jar套件支援;
C語言的執行緒更加靈活,java的執行緒都已經封裝好了;
#C可用的識別碼為數字、大小寫字母、底線,不能以數字開頭;Java可用的識別碼除了C的三種以外,多一種美元符號($),同樣不能以數字開頭。
以上是java與c語言的差別有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!