因工作安排,后期需要维护一个java项目。所以稍微熟悉下java,开此篇记录下java与c#的区别点,方便增强自己学习效果。肯定是不全的,可能是有错的,欢迎批评指正。
一、关键字
描述 | C# | Java | 备注 |
引用其他类库 | using | import | |
命名空间 | namespace | package | 声明一组相关对象的作用域。 |
定义常量 | const | final | |
访问控制修饰符 | internal | default | java默认为default,c#默认为private |
表示父类 | base | super | 用于从派生类中访问父类的成员。 |
继承类 | : | extend | |
继承接口 | : | implements | |
不允许继承 | sealed | final | 防止类派生;防止方法和属性在派生类中被重写。 |
类型判断 | is | instanceof | 评估对象与给定类型是否兼容。 |
循环遍历 | foreach() | for(type element: array) | 例:for(int x : numbers ){} |
锁 | lock | synchronized | |
可变数量参数 | params T | T... | 指定采用可变数目的参数的方法参数。 |
外部实现的方法 | extern | native | 声明外部实现的方法。 |
布尔值 | bool | boolean | |
二、代码结构
- java中,如果一个类定义在某个包中,那么package语句应该在源文件的首行。package中内容不用花括号包起来,范围适用于全文见。
- java中,如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
- java中,一个源文件中只能有一个public类。
- java中,一个源文件可以有多个非public类。
- java中,源文件的名称应该和public类的类名保持一致。
- java中,调用父类构造函数,需要在子类构造函数中显示调用super(params);C#中在子类构造函数声明后加上:base(param)来实现。
三、编码风格
- java中,方法名使用帕斯卡命名法,首字母小写。
- java中,左花括号不换行。
四、其他
- 在 Java 中,int类型前缀0表示8进制;在C#中忽略0,前缀0x表示8进制。
- 在 Java 中,标识符中允许有美元符($),且允许作为首字符;c#中是@字符。(都是字母数字下划线加前文特殊符号)
- 在 Java 中,重写父类方法不需父类方法标示为virtual。没有覆盖概念。
- Java 不支持隐式类型的局部变量(C# 支持
var
关键字)。 - 在 Java 中,可以仅按值传递参数,而在 C# 中,你可以按引用以及值进行传递。 (C# 提供
ref
和out
关键字,用于按引用传递参数;Java 中无此类等效项)。 - Java 不支持预处理器指令,如
#define
。 - Java 不支持无符号整数类型,而 C# 提供无符号整数类型,如
ulong
、uint
、ushort
和byte
。 - Java 不支持运算符重载;在 C# 中,可以重载运算符和转换。
- 在 Java
switch
语句中,代码可以贯穿到下一个 switch 部分,但在 C# 中,每个switch
部分的结尾必须终止 swith(每个部分的结尾必须以break
语句结束)。 - 在 Java 中,指定由带
throws
关键字的方法引发的异常,但 C# 没有检查异常的概念 –throws
关键字在 C# 中不受支持。 - Java 不支持语言集成查询 (LINQ)。