免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C#與JAVA的比較
  
                                                         ASP.NET基礎(chǔ)教程:C#與JAVA的比較
        
        簡單地說,它們不是一種語言,語法有差別,編程時(shí)具體用到的類庫或者函數(shù)庫也不一樣。

  雖然它們不是一種語言,不過它們卻也有所聯(lián)系。廣泛地說,C可以看作其他三種語言的源語言,因?yàn)槠渌N語言幾乎都是從C而來的,無論從數(shù)據(jù)類型還是控制語句看,其他三種語言都有從C得來的跡象。

  其中C++則一般看作是對C語言的擴(kuò)展。因?yàn)椋谜Z言沒有面向?qū)ο蟮恼Z法結(jié)構(gòu),而當(dāng)時(shí)業(yè)界又迫切需要面向?qū)ο蟮木幊烫匦?,所以貝爾?shí)驗(yàn)室的開發(fā)者就為C添加了面向?qū)ο蟮慕Y(jié)構(gòu)?,F(xiàn)在C++已經(jīng)不只是C的擴(kuò)展了,它已經(jīng)完全可以被看作一種新的編程語言。雖然C的特性以及庫函數(shù)仍然被C++支持,不過C++擁有自己的獨(dú)立的類庫體系,功能相當(dāng)強(qiáng)大。

 ?。剩幔觯嵴Z言是一種完全的面向?qū)ο笳Z言,雖然它的底層(運(yùn)行時(shí)庫)是用C語言開發(fā)的,可是并不依賴于C。因?yàn)椋剩幔觯岬倪\(yùn)行是在運(yùn)行時(shí)庫的支持下進(jìn)行的,所以運(yùn)行效率比起可以更接近底層的C/C++來說效率會有所影響,不過Java的類庫采用很好的設(shè)計(jì)理念設(shè)計(jì),非常好用,也非常實(shí)用,已經(jīng)成為業(yè)界的一種標(biāo)準(zhǔn)開發(fā)語言。它的跨平臺的特性尤其讓很多開發(fā)者歡迎,你只需要開發(fā)一次就能在所有安裝了Java運(yùn)行時(shí)庫的系統(tǒng)上運(yùn)行。Java發(fā)展了十幾年了,可以應(yīng)用領(lǐng)域非常之廣泛,Web開發(fā)有JSP,J2EE,桌面領(lǐng)域現(xiàn)在有JavaFX。

 ?。茫J俏④涢_發(fā)的一種編程語言,語法類似Java,幾乎就是從Java的翻版。運(yùn)行原理和Java也類似,也是通過運(yùn)行時(shí)庫的支持運(yùn)行。不過支持的平臺還很有限。JAVA幾乎被所有平臺支持,而C#目前只被Windows和Linux支持,Windows下的支持當(dāng)然是由微軟自己開發(fā)的,而Linux下的支持則有MONO支持。實(shí)際上,MONO也是把C#應(yīng)用轉(zhuǎn)化為JAVA應(yīng)用而已,所以本質(zhì)上,C#仍然只是被微軟自己的操作系統(tǒng)支持。應(yīng)用平臺受到限制,是它最大的缺點(diǎn)。

  C/C++的優(yōu)點(diǎn)在于與底層比較接近,可以控制的粒度更加精細(xì),是開發(fā)系統(tǒng)級應(yīng)用的最佳選擇。關(guān)于缺點(diǎn),我想正是源于其優(yōu)點(diǎn),因?yàn)樗鼈兡芸刂频木幊淘亓6染?xì),所以編程比較困難,煩瑣,容易出錯(cuò)。

  Java和C#都比較高級,可以看作高級語言的高級語言,優(yōu)點(diǎn)是開發(fā)容易,但運(yùn)行效率不如更為底層的C/C++。

  具體選擇使用的時(shí)候,可以根據(jù)實(shí)際的項(xiàng)目需要選擇。運(yùn)行效率要求高的,底層控制要求高的用C/C++,否則可以選擇Java或C#;跨平臺的要求高的可以用Java。

  關(guān)于跨平臺,C/C++也是很好的語言,因?yàn)樗衅脚_都支持,不同的是,不同平臺支持的實(shí)現(xiàn)不同,類庫不同,要編寫跨平臺的程序,需要選擇跨平臺的類庫,如標(biāo)準(zhǔn)類庫,如果標(biāo)準(zhǔn)類庫的支持不夠也只需要附加編寫一個(gè)跨平臺的支持類庫。

  幾種語言內(nèi)容都很多,在這里就不詳細(xì)列舉了,要學(xué)好每一種都需要花費(fèi)相當(dāng)大的精力,祝你能有所成就!
 
        C#與JAVA的相同之處:由于C#與JAVA都是基于C++發(fā)展起來的,因此二者之間具有很多相似之處,具體如下:

  1、C#和JAVA語言的編譯結(jié)果是獨(dú)立于計(jì)算機(jī)和編程語言的,可執(zhí)行文件可以在受管理的執(zhí)行

  環(huán)境中執(zhí)行;

  2、C#和JAVA語言都是采用了自動的垃圾回收機(jī)制;

  3、C#和JAVA語言都取消了指針操作;

  4、C#和JAVA語言都沒有頭文件;

  5、C#和JAVA語言都只支持單重繼承,要實(shí)現(xiàn)與多重繼承類似的功能,必須通過接口來實(shí)現(xiàn);

  6、類都是從Object類派生而來,類的對象通過關(guān)鍵字new生成;

  7、C#和JAVA語言都支持線程;

  8、C#和JAVA語言都沒有全局變量和全局函數(shù),所有的變量和函數(shù)都屬于某個(gè)類所有;

  9、C#和JAVA語言都支持對數(shù)組和字符串邊界的嚴(yán)格檢查,不會出現(xiàn)邊界溢出的情況;

  10、C#和JAVA語言都使用“.”操作符,不再使用“->”和“::”操作符;

  11、C#和JAVA語言都將null和bool作為關(guān)鍵字;

  12、C#和JAVA語言中所有的值都必須先初始化后才能使用;

  13、C#和JAVA語言中的if語句都不允許采用整數(shù)作為判斷條件;

  14、C#和JAVA語言中的try語句塊都可以后接finally語句塊。

  C#與JAVA的不同之處:

  盡管C#和JAVA有很多相同之處,但是由于二者是兩家不同公司開發(fā)的高級程序設(shè)計(jì)語言,它們又相互獨(dú)立,

  自成體系,各自具有一些自己特有的特點(diǎn),下面將C#與JAVA之間的不同之處如下:

  1、屬性

  對于那些經(jīng)常使用快速開發(fā)工具,如Delphi或者Visual Basic的開發(fā)人員來說,屬性是一個(gè)非常熟悉的概念。

  一般來說,通過getXXX可以讀取屬性的值,而通過setXXX可以設(shè)置屬性的值。

  JAVA中比較常見的屬性操作語句: foo.setSize(foo.getSize()+1); label.getFont().setBold(true);

  c#中比較常見的屬性操作語句: foo.size++; label.font.bold=true;

  很明顯,上述的屬性設(shè)置方式較JAVA來說更為簡潔,可主讀性也更強(qiáng)。這充分體現(xiàn)了C#簡單的特點(diǎn)。

  JAVA對于屬性的定義:public int getSize(){ return size; } public void setSize(int value){ size=value; }

  c#對于屬性的定義進(jìn)行了簡化:public int Size{ get{ return size; } set{size=value; }}

  2、index

  C#提供index來給對象加上索引的功能,從而用與處理數(shù)組類似的方式來處理對象,JAVA語言則不支持index

  C#中定義index的典型方式如下:

  public Story this[int index]

  {

  get{return stories[index]; }

  set{

  if(value!=null){

  stories[index]=value

  }

  }

  3、delegate :可以認(rèn)為是一種類型安全、面向?qū)ο蟮暮瘮?shù)指針。

  C#使有delegate可以通過一個(gè)名字訪問不同的函數(shù),它實(shí)現(xiàn)和JAVA中的interface類似的功能,但是它比interface更為好用。

  4、event

  C#提供對event的直接支持,它通過delegate和event關(guān)鍵字實(shí)現(xiàn)對事件的處理。event關(guān)鍵字隱藏所有delegate方法,運(yùn)算符“+=”和“-+”允許程序員自由加入或者刪除時(shí)間處理程序。

  5、enum:枚舉用于指定一系列的對象。

  C#通過如下語句來定義和使用枚舉:

  定義:public enum Direction{North,East,West,South};

  使用:Direction wall=Direction.North;

  JAVA不直接支持枚舉,如果要實(shí)現(xiàn)和C#相類似的功能,必須先定義一個(gè)類

  public class Direction{

  public final static int NORTH=1;

  public final static int EAST=2;

  public final static int WEST=3;

  public final static int SOUTH=4; }

  在定義了Direction類后,JAVA可以通過引用類中的值來使用枚舉:

  int wall= Direction.NOTRH;

  6、foreach語句

  C#提供了標(biāo)準(zhǔn)的for循環(huán),同時(shí)還提供了foreach語句(從VB中引入)來循環(huán)處理集合中的元素。

  JAVA遍歷集合中的所有元素的典型處理方式如下:

  while(!collection.isEmpty())

  {

  Object o=collection.get();

  connection.next();

  …

  }

  C#遍歷集合中的所有元素:foreach(object o in collection){…}

  7、統(tǒng)一數(shù)據(jù)類型:

  大多數(shù)的高級程序設(shè)計(jì)語言都有基本數(shù)據(jù)類型,如整型、浮點(diǎn)類型等。同時(shí),為了更好地滿足實(shí)際的需要,對不同的數(shù)據(jù)類型有不同的處理方式,顯然,如果能夠?qū)唵螖?shù)據(jù)類型的處理和對復(fù)雜數(shù)據(jù)類型的處理結(jié)合在一起,并用一致的方式加以處理的話,無疑會大大提升應(yīng)用程序設(shè)計(jì)的效率,增強(qiáng)程序設(shè)計(jì)的靈活性。

  JAVA語言在處理基本數(shù)據(jù)類型的時(shí)候也采取分別處理的策略,但是在基本數(shù)據(jù)類型的基礎(chǔ)上提供了一系列封裝這些基本數(shù)據(jù)類型的類,例如:整型(int)被類Integer所封裝,雙精度浮點(diǎn)(double)被類Double封裝。

  C#提供了一種和JAVA不同的方式來實(shí)現(xiàn)數(shù)據(jù)類型的統(tǒng)一。事實(shí)上,在c#中,即使是int這樣的簡單數(shù)據(jù)類型在C#內(nèi)部也是通過一個(gè)結(jié)構(gòu)體Int32來實(shí)現(xiàn)的,在C#中,可以這樣認(rèn)為,int只是結(jié)構(gòu)體Int32的一個(gè)別名。由于C#中的結(jié)構(gòu)體也繼承自類Object,這樣,Object類中定義的方法,各個(gè)結(jié)構(gòu)體也擁有,于是,在C#中可以通過如下的方式來操作整數(shù):int I=5; System.Console.WriteLine(i.ToString());

  8、操作符重載

  通過操作符重載可以用一種比較自然的方式來操縱各種數(shù)據(jù)類型,從而大大提升程序的可讀性和靈活性。C#中的“==”操作符在Object類中進(jìn)行了定義,在Object中定義的==操作符通過比較兩個(gè)值的引用來獲得最后的結(jié)果。如果使有和集合相關(guān)的類,則必須在這樣的類中實(shí)現(xiàn)ICompar接口,這個(gè)接口中定義了一個(gè)方法CompareTo,該方法返回兩個(gè)對象的比較結(jié)果,在此基礎(chǔ)上,可以進(jìn)一步定義各個(gè)實(shí)現(xiàn)比較的操作符,如

  “>”、“<”、“>=”、“<=”等。事實(shí)上,數(shù)字類型(int、long等)可以直接使用這些比較操作符,它們的內(nèi)部都實(shí)現(xiàn)了ICompare接口。

  9、多態(tài)性

  虛似方法提供了多態(tài)性的技持。多態(tài)意味著派生類可以定義一個(gè)和基類中同名的方法。盡管JAVA和C#都支持多態(tài)性,但是它們的具體實(shí)現(xiàn)方式還是有一定的差別。

  在JAVA語言中,默認(rèn)情況下,基類的對象可以直接調(diào)用派生類中的虛似方法,在C#語言中,基類要調(diào)用派生類中的虛似方法必須通過virtual關(guān)鍵字來實(shí)現(xiàn)。同時(shí),在C#語言中,一個(gè)方法要重載基類中的同名方法,還必須通過關(guān)鍵字override來實(shí)現(xiàn)。在C#中實(shí)現(xiàn)多態(tài)的典型程序如下:

  Class B{ public virtual void foo{}}

  Class D:B{ public overried void foo(){}}

  以上只是簡單地比較了C#和JAVA之間的異同,事實(shí)上,這二者之間的比較遠(yuǎn)不止上面所介紹的內(nèi)容,要學(xué)好這兩種語言,需要經(jīng)過大量的實(shí)踐工作,在實(shí)踐中區(qū)分開兩種語言的共同點(diǎn)和不同點(diǎn)。
現(xiàn)在的面向?qū)ο蟮恼Z言大多數(shù)都源自C++,java去掉了C++中那些復(fù)雜,實(shí)用性低的語言特性,達(dá)到了一個(gè)不錯(cuò)的平衡。

C#是在java如日中天的時(shí)候產(chǎn)生了,因此它不可避免的引入了java中絕大多數(shù)優(yōu)秀的元素。

因此但從語言特性上,兩種語言不會出現(xiàn)一種能實(shí)現(xiàn),而一種無法實(shí)現(xiàn)的。

即便大型的應(yīng)用,也是都可以實(shí)現(xiàn),只不過可能在特定的方面,一種要比另一種做的好。

就算是所謂的跨平臺。假如微軟能推出linux版本的CLR和.net framework。c#一樣可以跨,因?yàn)樗蚸ava都是擁有底層托管機(jī)制的。

非要說語言差別,下面基本應(yīng)該全了,不過這些在另一種中都有替代實(shí)現(xiàn)方法。
1.屬性:
java中定義和訪問均要用get和set方法,可以不成對出現(xiàn)。
c#中是真正的屬性,定義時(shí)get和set必須同時(shí)出現(xiàn),房問時(shí)用.號即可。不用get,set

2.對象索引
就是對象數(shù)組
public Story this [int index] {

3.C#中,不用任何范圍修飾符時(shí),默認(rèn)的是protect,因而不能在類外被訪問.

4.因?yàn)镴AVA規(guī)定,在一個(gè)文件中只能有一個(gè)public類,而且這個(gè)類的名稱必須與文件名一模一樣,這是一個(gè)區(qū)別

5.在C#中,它是以Main方法來定位入口的.如果一個(gè)程序中沒有一個(gè)名為Main的方法,就會出"找不到入口的錯(cuò)誤".不要把Main寫成main喲

6.C#預(yù)定義的簡單數(shù)據(jù)類型比Java多。例如,C#有unit,即無符號整數(shù)

7.忘掉Java中的static final修飾符。在C#中,常量可以用const關(guān)鍵詞聲明
C#的設(shè)計(jì)者還增加了readonly關(guān)鍵詞,readonly域只能通過初始化器或類的構(gòu)造函數(shù)設(shè)置
8.公用類的入口點(diǎn):c#是可以對Main進(jìn)行重載(java中是main),允許有int返回值和空參數(shù)的Main

9.在Java中,switch語句只能處理整數(shù)。但C#中的switch語句不同,它還能夠處理字符變量。請考慮下面用switch語句處理字符串變量的C#代碼

10.C#沒有>>>移位操作符

11.goto關(guān)鍵詞:
Java不用goto關(guān)鍵詞。在C#中,goto允許你轉(zhuǎn)到指定的標(biāo)簽。不過,C#以特別謹(jǐn)慎的態(tài)度對待goto,比如它不允許goto轉(zhuǎn)入到語句塊的內(nèi)部。在Java中,你可以用帶標(biāo)簽的語句加上break或continue取代C#中的goto。

12.int[] x = { 0, 1, 2, 3 };
int x[] = { 0, 1, 2, 3 };
但在C#中,只有第一行代碼合法,[]不能放到變量名字之后。

13.與Java不同的是,C#允許為名稱空間或者名稱空間中的類指定別名:
using TheConsole = System.Console;

14.在Java中,包的名字同時(shí)也是實(shí)際存在的實(shí)體,它決定了放置.java文件的目錄結(jié)構(gòu)。在C#中,物理的包和邏輯的名稱之間是完全分離的
.NET中包的實(shí)體稱為程序集(Assembly)。每一個(gè)程序集包含一個(gè)manifest結(jié)構(gòu)。manifest列舉程序集所包含的文件,控制哪些類型和資源被顯露到程序集之外,并把對這些類型和資源的引用映射到包含這些類型與資源的文件。程序集是自包含的,一個(gè)程序集可以放置到單一的文件之內(nèi),也可以分割成多個(gè)文件。.NET的這種封裝機(jī)制解決了DLL文件所面臨的問題,即臭名昭著的DLL Hell問題。

15.在Java中,java.lang包是默認(rèn)的包,C#中不存在默認(rèn)的包

16.C#中的訪問修飾符與Java中的基本對應(yīng),但多出了一個(gè)internal。簡而言之,C#有5種類型的可訪問性,如下所示:

public:成員可以從任何代碼訪問。
protected:成員只能從派生類訪問。
internal:成員只能從同一程序集的內(nèi)部訪問。
protected internal:成員只能從同一程序集內(nèi)的派生類訪問。
private:成員只能在當(dāng)前類的內(nèi)部訪問。

17.由于C#中不存在final關(guān)鍵詞,如果想要某個(gè)類不再被派生,你可以使用sealed關(guān)鍵詞

18.與Java不同,C#中的接口不能包含域(Field)。
另外還要注意,在C#中,接口內(nèi)的所有方法默認(rèn)都是公用方法。在Java中,方法聲明可以帶有public修飾符(即使這并非必要),但在C#中,顯式為接口的方法指定public修飾符是非法的。例如,下面的C#接口將產(chǎn)生一個(gè)編譯錯(cuò)誤。

19.C#中的is操作符與Java中的instanceof操作符一樣,兩者都可以用來測試某個(gè)對象的實(shí)例是否屬于特定的類型。在Java中沒有與C#中的as操作符等價(jià)的操作符。as操作符與is操作符非常相似,但它更富有“進(jìn)取心”:如果類型正確的話,as操作符會嘗試把被測試的對象引用轉(zhuǎn)換成目標(biāo)類型;否則,它把變量引用設(shè)置成null。

20.C#仍舊保留了C++的內(nèi)存手工管理方法,它適合在速度極端重要的場合使用,而在Java中這是不允許的

21.在C#中,所有的異常都從一個(gè)名為Exception的類派生

22.枚舉器即enum類型(java無),把它作為一個(gè)變量值的類型使用,從而把變量可能的取值范圍限制為枚舉器中出現(xiàn)的值。

23.結(jié)構(gòu)(Struct)與類很相似,而結(jié)構(gòu)是一種值類型,它存儲在棧中或者是嵌入式的,結(jié)構(gòu)可以實(shí)現(xiàn)接口,可以象類一樣擁有成員,但結(jié)構(gòu)不支持繼承

24.屬性聲明語法的第一部分與域聲明很相似,第二部分包括一個(gè)set過程和/或一個(gè)get過程

25.傳值方式:
在java中簡單數(shù)據(jù)類型的值傳參時(shí),都以傳值方式;
在c#中如果加ref則會以引用的方式傳值(方法內(nèi)部改變該參數(shù),則外部變量一起跟著變);
加out與ref基本相同,但out不要求參數(shù)一定要初始化.

26.c#保留了指針。unsafe

27.代理:代理(delegate)可以看作C++或者其他語言中的函數(shù)指針
代理用來封裝可調(diào)用方法。你可以在類里面編寫方法并在該方法上創(chuàng)建代理,此后這個(gè)代理就可以被傳遞到第二個(gè)方法。這樣,第二個(gè)方法就可以調(diào)用第一個(gè)方法。
代理是從公共基類System.Delegate派生的引用類型。定義和使用代理包括三個(gè)步驟:聲明,創(chuàng)建實(shí)例,調(diào)用。代理用delegate聲明語法聲明。
 

C#、Java之比較 很多人說C#是微軟用來和Java抗衡的武器,因?yàn)槎咴诤艽蟪潭壬嫌兄@人的相似

,盡管如此,兩者不同的地方也很多,所謂“于細(xì)微處見差異”。那么兩者的相似和區(qū)

別都在什么地方呢?我們從今天開始,會從各個(gè)角度來對比C#和Java的特點(diǎn),希望能對

1、C#和.NET平臺的概貌
2000年6月,微軟發(fā)布C#語言和.NET平臺。C#語言是一種強(qiáng)類型的,面向?qū)ο蟮恼Z言
,它具有語法簡單、表達(dá)力強(qiáng)的特點(diǎn),而.NET平臺則是構(gòu)成微軟的“.NET計(jì)劃”的基石
。
.NET平臺的核心包括兩方面,一方面就是著名的通用語言運(yùn)行機(jī)(Common Language
Runtime),雖然這個(gè)名詞起得晦澀了點(diǎn),不過大家可以拿它和Java的虛擬機(jī)來作比較,
二者完成的任務(wù)大致相同;另一方面就是一大堆通用函數(shù)庫,這些庫函數(shù)可以被多種語
言調(diào)用,并且通過編譯都產(chǎn)生一種共同的中間語言(Intermediate Language),這種語
言也可以拿Java的字節(jié)碼來類比,雖然完成的方式有些不一樣。

2、C#和Java
        下面簡單地把C#和Java的相似處列出來,雖然在這里我們重點(diǎn)討論的是C#和Java的 
不同點(diǎn),但是了解一下二者的相同之處也是很有必要的。 
二者都編譯成跨平臺的、跨語言的代碼,并且代碼只能在一個(gè)受控制的環(huán)境中運(yùn)行
自動回收垃圾內(nèi)存,并且消除了指針(在C#中可以使用指針,不過必須注明unsafe 關(guān)鍵字)都不需要頭文件,所有的代碼都被“包(package)”限制在某個(gè)范圍內(nèi),并且因?yàn)闆]有頭文件,所以消除了類定義的循環(huán)依賴所有的類都是從對象派生出來,并且必須使用New關(guān)鍵字分配內(nèi)存用對象加鎖的方式來支持多線程都具有接口(interface)的概念內(nèi)部類繼承類的時(shí)候不會以某種特定的訪問權(quán)限來繼承;沒有全局函數(shù)或者常量,一切必須屬于類;數(shù)組或者字符串都自帶長度計(jì)算和邊界檢查;只使用“.”操作符,沒有“->”和“::”;"null”、“boolean”和“bool”成為了關(guān)鍵字;任何變量均在使用前進(jìn)行初始化;  不能使用整數(shù)來返回到if條件語句中,必須使用布爾值;“Try”模塊后可以有“finally” ;
C#JAVA之比較(圖表說明)
 

 

C#

JAVA

目標(biāo)

提供易用、面向?qū)ο?、跨平臺

提供易用、面向?qū)ο?、跨平臺

GC

豐富的類庫

中間語言

IL

JVM

自動生成文檔

(/out生成XML文檔)

有(javadoc生成HTML文檔)

值類型

都是對象派生的

基本類型是專門的

跨平臺

公共語言運(yùn)行時(shí)

虛擬機(jī)

操作符重載

結(jié)構(gòu)類型

委托和事件

內(nèi)置的委托和事件

接口和內(nèi)部類定義

傳遞參數(shù)

值、引用傳遞

只能值傳遞

屬性

支持

不支持

枚舉

不安全模式

JNI可達(dá)到同樣效果

分度器

拋出異常

數(shù)組

規(guī)則、不規(guī)則均可

不規(guī)則

接口

支持

支持

Switch

可用表達(dá)式

只能整數(shù)

Foreach

只能用forwhile

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
自從互聯(lián)網(wǎng)出現(xiàn)以來,Java就成了許多開發(fā)者的首選.而許多C++開發(fā)者在較短的時(shí)間內(nèi)轉(zhuǎn)移到了Java開發(fā)者的隊(duì)伍中來. Java成功的開發(fā)和實(shí)現(xiàn)了許多高質(zhì)量的多線程動畫, 游戲, 以及分布的應(yīng)用程序. 更重要的是,Java 語言是完全平臺無關(guān)的. 

被稱作Apllets(小應(yīng)用程序)的Java程序在被下載到本地以前必須首先通過安全認(rèn)證,這樣就避免了任何病毒鉆入用戶的計(jì)算機(jī)的企圖. 許多新的改進(jìn),諸如旋擺軟件包(swing package), Java2D API, 連網(wǎng)軟件包(java .net)在最初的Java開發(fā)包發(fā)布以后被加進(jìn)了這種語言里. 從Sun公司發(fā)布Java以來,它的許多競爭對手開發(fā)了這種熱門語言的替代品,一些公司甚至在兩年以前就開始了. 

現(xiàn)在一家無需更多介紹的公司--微軟已經(jīng)發(fā)布了一種新的叫做微軟.NET的技術(shù). .NET家族的一種主要的語言是C#或者說C-sharp. 這種語言是從Java/C++繼承而來的. 從我的對C#的六個(gè)月的技術(shù)上的經(jīng)驗(yàn)來說,我覺得C#或多或少與Java是相似的.但是C++的許多功能,比方說操作符重載(它在Java中已經(jīng)被移去了)還存在于C#中. 

Java程序能夠在安裝了Java虛擬機(jī)或者JVM的任何平臺上運(yùn)行.但是.NET程序的平臺要求安裝了通用語言運(yùn)行庫或者稱做CLR. 它是所有.NET語言運(yùn)行所需的運(yùn)行庫.所以一種.NET語言能夠調(diào)用另一種.NET語言寫成的模塊和函數(shù). 更進(jìn)一步的說,如果你學(xué)習(xí)了種像C#之類的語言,那么你就很容易學(xué)習(xí)另一種.NET語言因?yàn)樗械?NET語言遵循微軟所謂的.NET Framework(架構(gòu)). 這種架構(gòu)包括了編寫和安裝健壯的.NET應(yīng)用程序所必需的類庫.使用.NET你可以通過ASP.NET進(jìn)行服務(wù)器端的編程,這點(diǎn)非常像JAVA中的servlets. 

就象Java中的Applets, C#引入了WinForms 和WebForms的概念.使用WinForms你可以設(shè)計(jì)基于Windows的應(yīng)用程序而使用WebForms你能夠開發(fā)Web應(yīng)用程序. 這點(diǎn)可以要么通過C#編程或者是使用Visual Studio.NET這樣的開發(fā)環(huán)境工具來實(shí)現(xiàn). 它包含了Visual C#,使用Visual C#你可以非常容易的編寫C#應(yīng)用程序. 

在我們使用Visual C++編程的時(shí)候,WinForms幾乎就是win32程序.用C++來開發(fā)這些程序是可能的.但是VC++給我們提供向?qū)砗喕覀兊拈_發(fā)過程.現(xiàn)在Visual C#也在做同樣的工作.因此如果你已經(jīng)是一個(gè)VC++的程序員了,那么你最好試一試VC#. 
Java程序和C#程序的比較 

我們應(yīng)該比較一下用Java寫成的程序和C#的有什么不同. 我們將討論兩個(gè)程序間主要的不同點(diǎn). 

Hello Java 程序 

class Hello { // 類聲明 
public static void main(String args[]) { // main 方法,入口點(diǎn) 
System.out.println("Hello Java"); // 向控制臺輸出Hello Java 
} 
} 

Hello C# 程序 

using System; // 調(diào)用System命名空間 
class Hello { // 類聲明 
public static void Main () { // main 方法, 入口點(diǎn) 
console.writeLine("Hello C#"); // 向控制臺輸出 Hello C# 



在Java中, lang軟件包是自動引入的.在簡單的程序里沒有必要引入這個(gè)包.但是在C#中,我們不得不在所有的程序里調(diào)用System命名空間. 請記住控制臺是System命名空間下的一個(gè)類. 試著運(yùn)行一下上面的程序并查看它們的輸出結(jié)果. 


Main方法 
Java:你有可能編寫一個(gè)沒有main方法的Java程序,只要這個(gè)類是用來作為父類.但是只有類中包含有正確的Main方法的時(shí)候程序才能運(yùn)行. 

C#:沒有正確的Main方法就不可能編譯C#源程序.如果main方法缺失了,那么編譯器就會顯示一個(gè)錯(cuò)誤消息:程序'filename.exe'沒有定義入口點(diǎn). 


繼承 
Java 和C#都不支持多重繼承而且都提供接口的概念作為多重繼承的替代品.但是C#在接口中包括了更高級的內(nèi)容.請?jiān)诒疚哪┱页鲱}為新增加的特點(diǎn)的內(nèi)容. 


操作符和控制流語句 
Java中出現(xiàn)的所有諸如算術(shù),邏輯,自增和自減等操作符都可以在C#中找到. 而Java中的像if, else, if-else, for, do-while, while等控制流語句C#統(tǒng)統(tǒng)支持. 但是C# 增加了C++中流行的goto語句. 


異常處理 
在C#中你可以重用try, catch, finally, throws 語句處理運(yùn)行時(shí)錯(cuò)誤(通常也叫做異常).C# 中的異常處理過程除了一些小的不同以外幾乎與Java完全相同. C#中System.Exception命名空間是所有異常類的基類. 

多線程 
C#中多線程的應(yīng)用比起Java來要容易得多.我們可以使用Monitor 和 Mutex類同步線程. 

新增特點(diǎn) 
索引,屬性和代理是C#中的新概念.索引幾乎與Java中的向量相同. 對其新特點(diǎn)的完全的討論已經(jīng)超出了我們的范圍.但是我將盡量在這個(gè)網(wǎng)站的其它地方解釋它們. C#引入了Java所沒有的操作符重載的概念.但是Java和C#都支持方法重載. 

讓我們回到對接口的討論,我們能夠驗(yàn)證包括在接口中的方法是否是使用is 和 as 操作符實(shí)現(xiàn)的.當(dāng)我們實(shí)現(xiàn)接口的時(shí)候能避免命名沖突.你甚至可以將兩個(gè)接口結(jié)合到一個(gè)中來,并在類中實(shí)現(xiàn)這個(gè)復(fù)合的接口,如下面的代碼所示: 
using System; 
public interface First { 
void A(); 
void B(); 
} 
public interface Second { 
void C(); 
} 
public interface Combined: First, Second { } 

class Combineimple: Combined { 
// 這里是程序代碼 
// main方法 
} } 

而且C#在顯示編譯錯(cuò)誤的時(shí)候還顯示它們的錯(cuò)誤代碼.你可以搜索與SDK有關(guān)的在線文檔尋找和這個(gè)錯(cuò)誤代碼有關(guān)的內(nèi)容并找出這個(gè)錯(cuò)誤發(fā)生的原因的細(xì)節(jié). 
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java與C、C++的區(qū)別
c#
JAVA和C++區(qū)別
c++ 與C#比較
初試C#
Java編程入門
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服