最近在学习Java。之前一直是做的.NET开发,用的C#,正好最近有空闲时间,就看了看一直想了解的Java。
都说C#和Java很是接近,看了几天的书,发现确实如此,基本该有的东西两边都有,内容都大同小异,不过C#到底是占了后出来的便宜,很多地方比Java封装得更方便些。当然,这不是重点,简单的几天学习,虽说总体相近,但处处还是透露着不同,本着随手做一做读书笔记心态,大概收集了些简单的,大抵是些语法上的不同。
因为本身就是初学者,有错误的地方还望指正,谢谢。
|
Java |
C# |
常量 |
使用 final 关键字 (const作为保留关键字,没有使用) |
使用const 关键字 |
== |
在对比string的时候,只能对比两个string是否引用同一位置,对比值是否相等的正确做法应该使用equals()方法 |
C#中的string重载了== 操作符,使其在内部调用了equals方法,所以可以直接使用于对比值 |
goto 语句 |
goto虽然作为保留字,但是并没用使用。 |
可以使用,但是不推荐,通常goto语句被认为是一种拙劣的程序设计风格。 |
break |
除了中断当前的控制流程外,Java还支持带标签的break。
label: { While(XXX) { While(XXXXX) { //退出循环语句块 break label; } } } //会直接跳到这里
某种程度上说,这是goto语句的一种替代,但是只能跳出语句块,不能跳入 |
只能跳出当前的break关键字所在的语句块。 |
运算符重载 |
不支持 |
支持,但不是全部 |
在构造函数中调用其他构造函数 |
直接使用this(参数)调用 |
在当前构造函数的方法签名后使用:this(参数)调用 |
包与命名空间 (两者类似,但是又不相同) |
包,使用package 同时使用import导入类 |
命名空间,使用namespace 同时使用using导入类 |
继承关键字 |
使用extends |
使用 : |
调用父类构造函数 |
使用super(参数)调用 |
在构造函数的方法签名后使用: base(参数)调用 |
调用父类方法 |
使用super.方法名(参数) |
使用base.方法名(参数) |
方法的重写 |
直接重写,使用相同的方法签名。方法默认动态绑定,即为所有方法创建方法表。
使用final关键字,可以使方法无法在子类中被重写 |
使用同样的方法签名,同时使用override 关键字,且父类需要重写的方法必须是虚方法virtual关键字,或者为抽象方法abstract关键字。且只为这些方法创建方法表。
没有声明为虚方法或者抽象方法的方法,无法在子类中被重写
|
类型判断 |
使用instanceof |
使用is |
访问修饰符 |
除相同修饰符外,默认为对本包可见,没有修饰符 |
除相同修饰符外,默认为对相同命名空间可见,可以显式使用internal关键字 |
定义封闭类(不可被继承) |
使用final关键字 |
使用sealed关键字 |
可变参数方法 |
方法名(类型…参数名){} |
方法名(params 类型[] 参数名){} |