程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Java與C#的比較學習記錄(1)

Java與C#的比較學習記錄(1)

編輯:C#入門知識

我在大學學的是C語言,自學和選修的是C++,剛畢業也搞過幾天Jsp,寫過幾個Applet.後來轉向delphi做桌面開發,再後來又轉向C#做Web開發.最近相對比較閒,決定學習一下Java,以取長補短,經過半天的忙碌,終於搭建起了開發環境,在網上找了一篇入門的教程,經過幾個小時的練習(嚴格說叫復習),基本熟悉了Java的語法和基本的結構.在這裡對Java和C#做些簡單對比:
1) 歷史
     Java當然比C#長,而且Java脫胎於C和C++,是典型的C風格,C#也是脫胎於C和C++,但由於C#晚於Java,也借鑒了很多Java的東西,另外,由於C#之父也是Delphi之父,因此,C#的體系架構不可避免的帶有Delphi的VCL的影子.單純從語言上來說,可以這麼講,C#是C系列的集大成者,也是高級語言中的集大成者。
2)語法和風格
     都是C風格,書寫上都差不多,至於花括號的擺放,那只是一種習慣。基本的語法,除了一些細微的差別外,兩者基本相同,下面是一些差異比較:
     A)類和接口的繼承和實現:C#都采用符號":"來表示,Java采用關鍵字"extends"和"implements"
     B) 訪問限定,Java的default等於C#的internal,其它都是一樣的。
     C) 常量:Java沒有const關鍵字,一般用final達到類似的效果,在這方面C#有readonly,const等關鍵字,控制上更為靈活一些.
     D) 在類的多態方面:由於Java沒有C#的virtual和override關鍵字,在表達上沒有C#細致和明確。Java的公共,保護,缺省方法默認都是虛方法,所以Java比較容易實現動態注入(Spring技術),C#的訪問安全控制性要靈活很多,但這個也有不好的地方,就是你想動態注入得時候,可能由於不是虛方法而無法注入。
     E)靜態方法:C#的靜態方法是不能繼承的,而Java的靜態方法是可以繼承的(但不能重寫,只能覆蓋).由於靜態方法和屬性是屬於類本身的,因此我覺得靜態方法的可繼承其實是沒有必要的,而且不利於程序邏輯的管理。
     F)基本數據類型:基本的一些關鍵字都相同,但C#的多一些,具體的對應這裡就不說了,這裡特別記錄一下的就是:Java中的int和Integer是有區別的,涉及到基本類型的裝箱和拆箱,但需要特別注意,Integer是當作引用類型的,比如Integer i1=300,i2=300; i1和i2是不相等的,但Integer i1=100,i2=100; 中i1和i2是相等的,區別就是超過255比較就是不等的,而C#中int和Integer是沒有區別的(至少在行為上),C#中的裝箱和拆箱是與object相關的,雖然性能上有差別,但從基本數據類型的行為上來說是沒有差別的。
           另外,C#中為基本類型增加了可空類型,這個估計跟java的引用基本類型類似。
     G)對象清除:機制都差不多,Java中的finalize和C#的dispose效用相當.
     H)異常機制:兩者一樣。
     I) 數組:C#分為兩種數組類型,一種是普通數組,一種是鋸齒數組,但java中沒有區分。
     J)泛型:都來自於C++的模板類和模板方法,用法都差不多就,不過具體細節上估計會有差異,這裡還沒深入了解,不做斷言;
     K)流程控制:有差別的是switch,Java沿用了C++做法,分支可以重疊,但C#要求每個分支都必須有break.從防止出錯上來說,C#比較好,但不可避免的會失去很多技巧性寫法和靈活性。

 

PS:語言之間只有語法的差別,沒有本質的差別。

 

作者:hawksoft

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved