刚刚看完java视频,做了个简单图:
新知识不多,大多是与以往知识的相互碰撞,一下做了java与C#的简单比较:
|
Java |
C#
|
主类名与文件名 |
必须一致 |
可以不一致 |
命名空间导入方式 |
import关键字 |
using关键字 |
常量 |
final关键字 |
Const关键字 |
基本数据类型 |
C#中有无符号数,Java没有。 C#中有值类型,且可自己定义值类型的结构体(struct)。 C#中int等同于System.Int32,是值类型; Java中的int与Integer的对应在C# |
|
初始化 |
调用基类构造函数: SubClass():base(){} |
调用基类构造函数: SubClass(){ super(); } |
Switch语句 |
(1)只能处理int类型 (2)每个case块后写break语句,不然会有穿透问题 |
(1)还可以处理字符变量 (2)要求每一个case块或者在块的末尾提供一个break语句,或者用goto转到switch内的其他case标签。
|
声明数组 |
灵活。 Int[] x={1,2,3};//正确 Int x[]={1,2,3};//正确 |
Int[] x={1,2,3};//正确 Int x[]={1,2,3};//错误 |
面向对象 |
完全面向对象 |
相同 |
继承 |
类的单继承; 可以实现多个接口; |
相同 |
多态 |
支持某些形式的多态性机制 |
相同 |
重写 |
默认方法都可被重写, |
被重写的方法必须添加virtual关键字声明为虚方法, |
访问修饰符 |
4类 Public:成员可以从任何代码访问; Protected:成员只能从派生类访问; Default: |
|
内部类 |
内部类可以直接访问外部类的实例成员 |
C#的内部类不可以直接访问外部类的实例成员;C#的内部类等同于java的静态内部类 |
最终类 |
final关键字定义的类不能再被派生 |
Seale关键字定义的类不能再被派生 |
接口 |
(1)关键字:interface; (2)接口内允许有内部类、静态字段等; |
(1)关键字:interface; (2)接口内不允许有内部类、静态字段等; |
内存管理 |
由运行时环境管理,使用垃圾收集器 |
由运行时环境管理,使用垃圾收集器 |
指针 |
完全不支持。代之以引用 |
支持,你只在很少使用的非安全模式下才支持。通常以引用取代指针 |
泛型 |
Java中泛型实现使用的擦除机制, |
C#的泛型在类型参数传入类型后会产生一个新类型( |
参数引用传递 |
只有值传递 |
使用关键字ref:迫使值参数通过引用传递给方法;
使用关键字out: 在参数未初始化的情况下,在一个函数中输出多个值;
使用关键字params:自动把参数转为数组; |
|
|
|
总结:所有高级语言之间都是相通的,只是一些简单语法上的不同、专业术语不同、再加上某些部分运行机制不同,其实也没有什么。做好比较,减少学习知识量,轻松学习。