0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言與Java之間的主要區(qū)別有哪些

Wildesbeast ? 來源:今日頭條 ? 作者:編碼老將 ? 2020-02-24 14:31 ? 次閱讀

本文主要為C#開發(fā)人員了解Java提供一些基礎(chǔ)。

Java中缺少C#的功能

C#包含更多原始類型和捕獲算術(shù)異常的功能。

包括大量的Java注釋便利,其中許多,例如運(yùn)算符重載和用戶定義的強(qiáng)制轉(zhuǎn)換,已經(jīng)為C ++程序員社區(qū)所熟悉。

事件處理是“一流的公民”,它是語言本身的一部分。

允許定義“結(jié)構(gòu)”,這些結(jié)構(gòu)類似于類,但可以在堆棧上分配(與C#和Java中類的實(shí)例不同)。

C#將屬性作為語言語法的一部分來實(shí)現(xiàn)。

C#允許switch語句對(duì)進(jìn)行操作string。

C#允許提供閉包功能的匿名方法。

C#允許迭代器通過功能樣式y(tǒng)ield關(guān)鍵字使用協(xié)程。

C#支持輸出參數(shù),幫助返回多個(gè)值,這是C ++和SQL共享的功能。

C#具有別名空間的能力。

C#具有“顯式成員實(shí)現(xiàn)”,該類允許類從其自己的類方法中單獨(dú)實(shí)現(xiàn)接口的方法。這也允許它實(shí)現(xiàn)兩個(gè)不同的接口,碰巧具有相同名稱的方法。接口的方法不必是public; 它們只能通過該界面進(jìn)行訪問。

C#提供了與COM的集成。

按照C和C ++的示例,C#允許按引用調(diào)用原始類型和引用類型。

C#中缺少Java的功能

Java的strictfp關(guān)鍵字保證浮點(diǎn)運(yùn)算的結(jié)果在各個(gè)平臺(tái)之間保持相同。

Java支持檢查異常,以更好地實(shí)施錯(cuò)誤捕獲和處理。

語言之間的哲學(xué)差異

Java中沒有無符號(hào)的原始數(shù)字類型。盡管普遍認(rèn)為在代碼中混合有符號(hào)和無符號(hào)變量是不好的,但是Java缺乏對(duì)無符號(hào)數(shù)字類型的支持,這使其在某種程度上不適合低級(jí)編程

C#不包括檢查的異常。有人會(huì)認(rèn)為檢查異常對(duì)于良好的編程習(xí)慣非常有幫助。其他人,包括首席C#語言架構(gòu)師Anders Hejlsberg,認(rèn)為它們?cè)谀撤N程度上是Java的實(shí)驗(yàn),而且還沒有證明它們是值得的。

C#的命名空間與C ++中的命名空間更為相似。與Java不同,名稱空間不指定源文件的位置。(實(shí)際上,對(duì)于Java源文件位置來說,對(duì)應(yīng)它的包目錄結(jié)構(gòu)并不是絕對(duì)必要的。)

C#包括委托,而Java不包括。有人認(rèn)為委托使方法調(diào)用模型復(fù)雜化,因?yàn)槲惺峭ㄟ^反射來處理的,這通常很慢。另一方面,它們可以通過消除聲明新的(可能是匿名的)類以掛接到事件的需要,從而簡(jiǎn)化代碼。

Java要求源文件名必須與其中的唯一public類匹配,而C#允許public同一文件中有多個(gè)類。

C#允許使用指針,某些語言設(shè)計(jì)者認(rèn)為這是不安全的,但是某些語言功能試圖確保不會(huì)意外濫用此功能。指針還極大地使諸如Java的RMI(遠(yuǎn)程方法調(diào)用)之類的技術(shù)復(fù)雜化,在該技術(shù)中,可以在一臺(tái)完全獨(dú)立的計(jì)算機(jī)上運(yùn)行的程序中引用駐留在一臺(tái)計(jì)算機(jī)上的程序?qū)ο?。一些人推測(cè),Java中缺少內(nèi)存指針(被對(duì)象引用的更抽象的概念所取代)是網(wǎng)格計(jì)算時(shí)代的頭號(hào)功臣,網(wǎng)格應(yīng)用程序可以將單個(gè)應(yīng)用程序分布在許多物理硬件上。

C#支持goto關(guān)鍵字。有時(shí)這可能很有用,但是通常建議使用結(jié)構(gòu)化的控制流方法。

C#具有真正的多維數(shù)組,相對(duì)Java可用的數(shù)組(C#稱為鋸齒狀數(shù)組)。多維數(shù)組始終是矩形的(在2D情況下,或?qū)τ诟蟮木S數(shù)類似),而數(shù)組可以存儲(chǔ)各種長(zhǎng)度的行(同樣在2D情況下)。如果內(nèi)存是一個(gè)瓶頸(只有一個(gè)內(nèi)存引用而不是兩個(gè)內(nèi)存引用,則矩形陣列可能會(huì)加快訪問速度);如果內(nèi)存不完整但成本高昂,則鋸齒狀數(shù)組可以節(jié)省內(nèi)存(每行一個(gè)指針的代價(jià)) 。矩形數(shù)組還消除了為每行顯式分配內(nèi)存的需要。

Java不包括運(yùn)算符重載,因?yàn)闉E用運(yùn)算符重載可能導(dǎo)致難以理解和調(diào)試的代碼。C#允許操作符重載,如果謹(jǐn)慎使用,則可以使代碼更簡(jiǎn)潔,更易讀。Java缺乏重載使其在某種程度上不適合某些數(shù)學(xué)程序。相反,.NET的數(shù)字類型不與add / subtract / etc共享公共接口或超類方法,限制了數(shù)值庫的靈活性。

默認(rèn)情況下,C#中的方法是非虛擬的。但是,在Java中,默認(rèn)情況下方法是虛擬的。虛方法保證將調(diào)用對(duì)象的最終重載方法,該方法由運(yùn)行時(shí)確定。在調(diào)用或編寫任何虛擬方法時(shí),您始終必須牢記這一點(diǎn)!如果該方法聲明為非虛擬方法,則調(diào)用的方法將由編譯器確定。這是Java和.NET平臺(tái)的設(shè)計(jì)者之間的主要哲學(xué)差異。

Java 1.5的泛型使用類型擦除。當(dāng)Java源代碼編譯為字節(jié)碼時(shí),有關(guān)泛型類型的信息將會(huì)丟失。.NET 2.0的泛型在編譯后得以保留,因?yàn)閺?NET公共語言運(yùn)行時(shí)2.0版(簡(jiǎn)稱CLR)開始,對(duì)泛型的支持。Java的方法允許Java 1.5二進(jìn)制文件在1.4 JRE中運(yùn)行,但要付出額外的運(yùn)行時(shí)類型檢查的代價(jià)。

C#是由ECMA和ISO標(biāo)準(zhǔn)定義的,而Java是專有的,盡管在很大程度上是通過開放社區(qū)流程進(jìn)行控制的。

C#API完全由Microsoft控制,而Java API通過開放的社區(qū)流程進(jìn)行管理。

.NET運(yùn)行時(shí)允許托管和非托管代碼,從而實(shí)現(xiàn)Java的純托管代碼環(huán)境中不存在的某些類型的錯(cuò)誤,但也可以與現(xiàn)有代碼進(jìn)行交互。

問題:java在默認(rèn)中,所有方法都是虛方法,這意味著什么?

答:這意味著,java中的所有對(duì)象,基本上都有了動(dòng)態(tài)代理的潛在可能

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2980

    瀏覽量

    105718
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7618

    瀏覽量

    138702
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2115

    瀏覽量

    74167
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DSP C語言與主機(jī)C語言主要區(qū)別

    DSP C語言與主機(jī)C語言主要區(qū)別1)DSP的C語言
    發(fā)表于 11-03 15:14

    AVR單片機(jī)與51單片機(jī)的主要區(qū)別有那些?。?/a>

    本帖最后由 eehome 于 2013-1-5 10:04 編輯 AVR單片機(jī)與51單片機(jī)的主要區(qū)別有那些???(勞請(qǐng)高手將得能應(yīng)用領(lǐng)域、編程控制及設(shè)計(jì)等方面詳細(xì)點(diǎn)兒,謝謝啦!)
    發(fā)表于 07-16 22:51

    請(qǐng)問TMS570與RM48X的主要區(qū)別有哪些?

    本帖最后由 一只耳朵怪 于 2018-5-22 14:43 編輯 問下TMS570與RM48X的主要區(qū)別有哪些?
    發(fā)表于 05-22 01:45

    請(qǐng)問DSP的C語言同主機(jī)C語言之間區(qū)別是什么?

    DSP的C語言同主機(jī)C語言主要區(qū)別?
    發(fā)表于 09-17 05:55

    藍(lán)牙信標(biāo)和藍(lán)牙標(biāo)簽之間主要區(qū)別在哪里?

    什么是藍(lán)牙信標(biāo)?什么又是藍(lán)牙標(biāo)簽?藍(lán)牙信標(biāo)和藍(lán)牙標(biāo)簽之間主要區(qū)別在哪里?
    發(fā)表于 06-26 06:51

    HDL語言中的unsigned與signed的主要區(qū)別是什么

    unsigned是什么意思?signed是什么意思?HDL語言中的unsigned與signed的主要區(qū)別是什么?
    發(fā)表于 09-24 07:02

    C語言JAVA區(qū)別在哪

    一、前言C語言屬于匯編型語言。是區(qū)別于解釋型語言的(如JAVA)做個(gè)比較編譯型
    發(fā)表于 12-09 08:20

    javac之間的數(shù)據(jù)交互

    最近作一個(gè)tiemsten數(shù)據(jù)庫的項(xiàng)目,用到了jni技術(shù)。在這個(gè)項(xiàng)目中,我們用java來寫界面和業(yè)務(wù)邏輯,用c語言寫數(shù)據(jù)庫odbc訪問。單純的odbc其實(shí)沒有什么難的,但是在java
    發(fā)表于 11-27 10:22 ?1821次閱讀

    Java編程和c語言哪一種更有優(yōu)勢(shì)_C語言JAVA區(qū)別是什么

    軟件開發(fā)編程語言多達(dá)600余種,每種都有各自的特點(diǎn)和應(yīng)用領(lǐng)域。目前,在國(guó)內(nèi),最熱的幾門編程語言無外乎JavaC、C++了,
    的頭像 發(fā)表于 02-05 17:23 ?2.5w次閱讀

    JAVA語言優(yōu)缺點(diǎn)

    本視頻主要詳細(xì)介紹了JAVA語言優(yōu)缺點(diǎn),首先介紹了JAVA語言優(yōu)點(diǎn),分別有簡(jiǎn)單、面向?qū)ο?、分布?/div>
    的頭像 發(fā)表于 12-26 16:10 ?1.5w次閱讀

    步進(jìn)電機(jī)和伺服電機(jī)之間主要區(qū)別是什么呢?

    在許多領(lǐng)域都需要各種電機(jī),包括知名的步進(jìn)電機(jī)和伺服電機(jī)。但是,對(duì)于許多用戶而言,他們不了解這兩種電機(jī)的主要區(qū)別,因此他們始終不知道如何選擇。那么,步進(jìn)電機(jī)和伺服電機(jī)之間主要區(qū)別是什么? 基本結(jié)構(gòu)
    的頭像 發(fā)表于 09-10 17:47 ?2.8w次閱讀

    NTC與PTC的主要區(qū)別和應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《NTC與PTC的主要區(qū)別和應(yīng)用.zip》資料免費(fèi)下載
    發(fā)表于 02-06 14:03 ?2次下載
    NTC與PTC的<b class='flag-5'>主要區(qū)別</b>和應(yīng)用

    步進(jìn)電機(jī)和伺服電機(jī)的主要區(qū)別

    在許多領(lǐng)域都需要各種電機(jī),包括知名的步進(jìn)電機(jī)和伺服電機(jī)。但是,對(duì)于許多用戶而言,他們不了解這兩種電機(jī)的主要區(qū)別,因此他們始終不知道如何選擇。那么,步進(jìn)電機(jī)和伺服電機(jī)之間主要區(qū)別是什么?
    發(fā)表于 08-21 10:14 ?2828次閱讀
    步進(jìn)電機(jī)和伺服電機(jī)的<b class='flag-5'>主要區(qū)別</b>

    RET天線的工作原理 RET扇形天線和RET全向天線之間主要區(qū)別

    RET天線的工作原理 RET扇形天線和RET全向天線之間主要區(qū)別 RET天線工作原理及扇形天線與全向天線的主要區(qū)別 引言: 隨著無線通信技術(shù)的發(fā)展,天線作為無線通信系統(tǒng)中的重要組成部分,起到了接收
    的頭像 發(fā)表于 11-28 14:07 ?1442次閱讀

    dwdm與wdm的主要區(qū)別

    光纖通信中廣泛使用的多路復(fù)用技術(shù)。它們的主要區(qū)別在于波長(zhǎng)間隔、系統(tǒng)容量、成本和應(yīng)用領(lǐng)域等方面。 波長(zhǎng)間隔 DWDM和WDM的主要區(qū)別在于它們使用的波長(zhǎng)間隔。WDM技術(shù)使用較大的波長(zhǎng)間隔,通常在20nm到
    的頭像 發(fā)表于 07-18 10:34 ?1057次閱讀