Java與C#語法不同點(C#轉Java隨筆)

1.方法是否可以帶默認參數

在C#裏,方法是可以帶默認參數值的,而Java則不行。帶默認參數值相當於是語言提供的方法重載語法糖(語法糖見我這裏有語法糖,叔叔我們不約),C#有提供,Java則沒有提供,所以Java沒有函數帶默認值的寫法。

例如下C#代碼:

bool UpdateDev(DeviceInfo dmr, bool isSave = false);


換成Java則用重載實現:

boolean UpdateDev(DeviceInfo dmr);
boolean UpdateDev(DeviceInfo dmr, bool isSave);

2.Java接口可以直接new,而C#接口只能通過類實現

3.Java枚舉和C#枚舉帶默認值定義

兩者定義枚舉,給枚舉設定默認值時不同。

C#裏可直接設定,,例如下代碼:

    /// <summary>
    /// 用戶類型
    /// </summary>
    public enum EUserType
    {
        /// <summary>
        /// 普通用戶
        /// </summary>
        User = 0,

        /// <summary>
        /// 管理員
        /// </summary>
        Admin = 1
    }

Java需要定義構造函數,例如下代碼:

/**
 *文件類型
 *
 *文本:0x01
 *圖片:  0x02
 *視頻:0x03
 *音頻:0x04
 *文件夾:0x05
 *
 * @author FanPei
 *
 */
public enum FileType {
	
	FILE(0x01),PICTURE(0x02),VIDEO(0x03),AUDIO(0x04),DIRECTORY(0x05);

	 // 定義私有變量
    private int nCode ;

    // 構造函數,枚舉類型只能爲私有
    private FileType( int _nCode) {
        this . nCode = _nCode;
    }
}

4.java中沒有靜態構造函數嗎?

C#中是有靜態構造函數的,而且沒有修飾符,第一次使用類時,自動調用類的靜態構造函數,然而JAVA中卻沒有提供靜態構造函數,也不叫這個名字,而叫靜態初始化。

二者區別寫法如下:

public class IocObjFactory {

         static //靜態修飾符
	{
		
	}
}
  public class IocObjFactory
    {
        /// <summary>
        /// 以構造函數的形式出現
        /// </summary>
        static IocObjFactory()
        { 

        }
    }

5.java中沒有結構體,C#中有

和C/C++不同,Java中沒有結構體,聯合體。這是Java作爲高級語言的進步,但也使得它在進行網絡字節流封送上顯得捉襟見肘。

這裏所指的是在進行網絡編程,串口編程等需要和某些C語言中結構體形式定義的協議接口進行通訊時,Java由於缺乏結構體和字節數組之間的有效轉換方法,所帶來的編程上的困境。按照通常的想法,我們需要自己去手動的一個字節,一個字節的拼湊,來實現C語言中結構體定義的數據包。在面對大量接口的時候,這樣做顯然絕非是可行的辦法。造成這個問題的根本原因是,指針這一對內存在字節量級操作的語法特性在Java當中是不成立的。其結果就是在C語言裏面通過填充結構體來完成的字節流封送編程變得複雜。

更多內容請訪問:Java實現結構體,讓字節流封送簡單起來


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章