java與c#的語法對比


1,命名空間與包
C#為了把實現相似功能的類組織在一起,引入了命名空間的概念(namespace)
Java中與此對應的東西叫做包(package)
2,類的訪問控制方面的不同
C#只有兩種:public和默認(同internal)
public能被所有的類(同項目中和不同項目中)訪問
internal(在class關鍵字前不加控制符時默認為internal),表明類只能在同一項目中訪問
Java也只有兩種:public和默認
public能被所有的類訪問
默認(在class關鍵字前不加控制符時)只能被同一包中的所有類訪問
3,類成員的訪問控制
C#中有四種:public,protected,private(默認),internal(注意這里internal和默認是不同的)
public能被所有的類訪問
protected只能被子類訪問
private(也即不寫任何控制符時的默認情況下)只能類內部訪問
internal能被同一項目中的類訪問
Java也有四種:public,protected,private和默認
public能被所有的類訪問
protected既能被同一個中的其他類訪問,也可以被不同包中的子類訪問
private只能在類內部使用
默認可以被這個包中的其他類訪問,如果一個子類與父類位於不同的包中,子類也不能訪問父類中的默認訪問控制成員
4,C#中類的繼承用通過冒號:實現,在Java中用extends
C#中實現接口通過冒號:實現,在Java中用implements
C#中密封類用sealed實現,在Java中用final
C#中常數用const實現,在Java中用final
C#中屬性用set,get代碼塊實現,在Java中一般用類似於C#中的字段代表屬性,或者用setter,getter構造器實現
C#中有部分類(partial)的概念,Java中沒有
C#中有readonly修飾屬性只讀,Java中沒有
C#中有virtual和override修飾虛方法和重寫方法,Java中沒有,Java中默認父類中的方法都是virtual的
Java中有static{},synchroized{}代碼塊的概念,C#中沒有
Java中有標簽(如labelA:)的概念,C#中沒有
C#中子類調用父類的方法用base.method(),Java中用super.method()
C#中用is來判斷一個實例是否是某一個類的,Java中用instanceof
C#中用foreach(int i in array)來對數組中每一個元素的遍歷,Java中用for(int i : array)

~~~~~~~~~~~~~~~~~~~~~

1. C#命令輸入和輸出語法是:Console.ReadLine()和Console.WriteLine()(當然不換行的話就去掉Line,這些想必大家都知道,所以文章中只提供比較常用的)。

Java命令輸入和輸出語法是:System.In.Read()和System.Out.Println()

心得:其實兩個語言語法本質都一樣就是名字不一樣。

2. C#中在一個.cs文件中可以存在多個Public修飾符修飾的類。

Java中在一個.java文件中有且僅能存在一個Public修飾符修飾的類。

心得:目前還不知道為啥java會有這樣的限制,不過這一點很容易范錯誤。

3. C#中Switch語句接受的類型是byte、char、string.

Java中Switch語句接受類型是byte、char、string、int

心得:java語言貌似支持的多一點。

4. C#中存在屬性與字段是兩個概念,屬性是屬性訪問器,是對字段的封裝。

Java中貌似沒有屬性訪問器,屬性和字段是一個概念,通過自己實現方法來封裝屬性的訪問,一般是getxxx()和setXXX()方法

心得:這點我還是比較贊同C#的做法,畢竟從編程的角度來說,C#將屬性作為語法通用的,不需要用戶手動去實現,省去了大量的重復編碼。

5. C#中構造函數調用基類或者當前重載構造函數語法是直接在構造函數后面:base()和:this()就可以實現。

Java中相同原理語法是在構造函數模塊中的第一條語句使用this()或者super()。

心得:這個我個人覺得c#設計的比較好,因為從程序的可讀性方面,這樣也容易使得讀者容易讀懂代碼,對於程序員來說也容易區分,比較容易知道運行順序;而Java的實現方式必須使得使用者記住在第一條語句,有的時候在編寫一個大的程序的時候,很有可能會忽略這個。

6. C#中存在靜態構造函數,即在類運行時,只執行一次。

Java中是不存在靜態構造函數的。

心得:這點我也不知道為啥Java中不存在,不過在網上查了下,有網友說是因為這違背了面向對象的思想,后面也跟了一大堆理由,不過我總看都覺得該網友沒有很好理解面向對象思想。這個問題我覺得也值得深入研究,有興趣的可以跟我一起研究下,至於C#中出現這個,我也沒仔細深入研究為什么會出現這個情況,我只知道有的時候在類構造的時候,有些參數是執行一次的,但是細想這些也可以通過其他方法實現,所以暫時也說不出C#中靜態構造函數的優點,不過竟然微軟定義了該語法,而且是在3.5定義的我相信必有它的用處。

7. C#中繼承接口和抽象類都是使用:符號的。

Java中繼承用Extends標識符,實現用Implements,且如果同時存在,Extends必須在Implements之前。

心得:C#相對來說是比較自由,直接用:就實現繼承和實現。

可是Java中區別比較明確,這點我覺得還是java比較好,這樣寫的代碼比較直觀,可讀性比較好,雖然寫的字數多。

8. C#中用Sealed修飾符表示密封,即不可繼承,用Const表示常量。

Java中使用Final修飾符表示密封和常量。

心得:Java中用一個修飾符代表2個功能,從設計角度說,不怎么符合功能單一原則,所以我個人覺得必要的時候還是拆分表示,可讀性和區別性會好點。

9. C#的Is運算符可以用於類型的判別。

Java中用Instanceof進行類型的判別。

10. C#中存在Internal修飾符,表示程序集的訪問級別。

Java中存在類似的修飾符Default,表示同一類和同一包中的訪問級別。

心得:C#中訪問修飾符大概有以下幾種:

Public:公共的,最大的訪問權限。

Internal:程序集的,命名空間級別的訪問權限。

Protected:受保護的,類以及子類的訪問級別權限。

Private:私有的,只能在該類中訪問級別權限。

Java訪問修飾符有以下幾種:

Public:公共的,最大訪問級別。

Protected:受保護的,同一類,同一包中的類和子類訪問級別。

Defalut:同一類,同一包中的類訪問級別。

Private:私有的,同一類中訪問級別。

縱觀,其實都差不多,但是平時必須注意,細節決定成敗。

11. C#中異常直接用Throw拋出。

Java中如果要拋出異常,貌似必須現在方法或者類定義后面用Throws進行聲明。

心得:這點也沒深入研究,所以不發表觀點。

12. C#中有命名空間,用Using關鍵字引入。

Java中有包,類似命名空間定義,用Import引入包。

13. C#中同步鎖定,用Lock關鍵字。

Java中同步鎖定,用Synchronized關鍵字。

14. C#基本數據類型中有string,且有包裝類String。

Java基本數據類型是沒有string,用String取代。

http://blog.csdn.net/kingmax54212008/article/details/49623235

http://blog.csdn.net/kingmax54212008/article/details/49623001

Java的常用包

  • java.lang:  這個包下包含了Java語言的核心類,如String、Math、Sytem和Thread類等,使用這個包無需使用import語句導入,系統會自動導入這個包中的所有類。
  • java.util: 這個包下包含java的大量工具類/接口和集合框架類/接口。如Arrays和List、Set等。
  • java.net: 這個包下包含了一些Java網絡編程相關的類/接口。
  • java.io: 這個包含了一些Java輸入/輸出編程相關的類/接口。
  • java.text: 這個包下包含一些Java格式化相關的類。
  • java.sql: 這個包下包含了java進行JDBC數據庫編程的相關類/接口。
  • java.awt: 這個包下包含了抽象窗口工具集(Abstract Window Toolkits) 的相關類/接口,這些類主要用於構建圖形用戶界面(GUI)程序。
  • java.swing:這個包下包含了Swing圖形用戶界面編程的相關類/接口,這些可用於構建平台無關的GUI程序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM