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實現結構體,讓字節流封送簡單起來