C#、C与JAVA的一些区别

背景:

电子书解析模块需要在多个手机平台上实现,于是我将java翻译成C#@mobile、C@brew。在这个过程中体验了一次java同其他语言之间的区别。简而言之,我对多语言的态度是:语言是相通的;语言至少精通一种。把过程中记录的区别晒一下:

<==============================C#修改区别================================>

1.C/C++:有全局变量、全局常量、全局函数的概念
2.ReadLine=>println
3.C/C++要经过编译和链接,即C#并不被编译成目标文件(.obj),而是直接生成可执行文件(.exe)或动态链接库(.dll)
4.析构函数:C++程序员需要在析构函数中写上一系列delete语句来释放存储
5.readonly、const、final
6.C++中没有对抽象类进行直接声明的关键字,而认为只要在类中定义了纯虚函数,这个类就是一个抽象类。

1.C#方法不可声明异常抛出
2.in是C#的关键字
3.override的书写位置
4.java中的静态模块在C#中是用静态构造函数来表达
5.get/set方法:public T data { get; set; }
6.DataInput=>BinaryReader
7.readInt=>ReadInt32
readShort=>ReadInt16
readByte=>ReadByte
8.new string(name, "UTF-8")=>Encoding.UTF8.GetString(name,0,name.Length)
9.在构造函数体内中的super(block, id)=>直接在构造函数后追加:base(block, id)
10.C#中的常量关键字const对应于java的final
11.C#中类型转换除了像java那样各种类型有独自支持的转换方法,还将类型转换都封装到一个类Convert来管理。
12.NullPointerException@java<===>NullReferenceException@C#
13.C#中保留了析构函数
14.FileNotFoundException@C#<===>IOException@java
15.Hashtable的遍历
C#:
IEnumerator e = myHashtable.Values.GetEnumerator();
Java:
Enumeration e= myHashtable.elements;

 

<==============================C修改区别================================>

1.属性类<====>自定义结构体struct,方法类<====>以名字区分开的函数
2.接口<====>头文件.h,接口实现类<====>#include头文件的.C文件,就像是C#/Java中的接口与实现类搭配,在C中,.h总带着一个.c文件。
3.C语言中没有C#/Java中方便的List,必须自定义Vector
4.C#/Java的new<====>C的malloc,手动分配空间
5.C#/Java的GC是开辟了一个独立的线程,幕后包办释放开发人员使用的内存
  而C必须自己手动释放(free)任何内存空间,某种程度上来说这也是C比C#/Java高效却麻烦的地方。
  所以,当你对外提供的接口中有自定义结构体时,别忘记也附带一个专门用来释放该结构体的方法。
6.C是面向过程,简而言之,一切只在一个函数里面演绎(如变量的生命周期只能在一个函数里);C#/Java是面向对象,只要是对象还未被GC歼灭,变量可以存活到任何时候。C没有继承。
7.C指针就是指向内存地址的针头,从某种意义上说,就像C#/Java面向对象编程,C却是面向内存编程。
  所以C代码到处充斥着指针,可以说,没有指针的代码不能成为C代码。内存是以字节为基本单位,所以   一个内存单位=1个字节
8.C的API没有那么健全,有时候不要指望找到C#/Java对应的便捷函数
9.C#/Java中的string<====>C中的char *,并且以\0为结束符,但不计入字符串成员。
10.C的基本类型与C#/Java不太一致,如boolean、byte
11.头文件的#include(只include头文件),如同C#的using,java的import

你可能感兴趣的:(多语言,C,C++,C#,Java,BREW)