您的位置:首页 > 编程语言 > Java开发

java和C#在用法上的区别整理

2017-01-03 20:22 357 查看
最近在学习Java,在学习的过程中发现真的是太像了,所以就边学边整理整理学习过程中发现的Java区别于C#的地方,有什么地方漏下的,欢迎留言补充纠正,谢谢。

 

在入门时最常用的标准输出流:
在C#中使用Console.WriteLine()
在Java中使用System.out.println()

 

变量命名:
C#中使用字母或者下划线开头
Java中除了字母和下划线,还可以使用美元符号($)开头

 

数字表示:
Java中数字表示可以用下划线来帮助阅读,例如:2_000_000(这是Java7中新增的功能)

 

常量定义:
C#中使用const关键字来定义常量
Java中使用final关键字来修饰常量

 

注释(这块儿跟语言无关,与编译器有关):
除了正常的“//”和“/**/”以外,
VS中可以使用“///”来为代码添加可读性更强,格式更规范的注释(在编程的时候VS还能够根据注释中的内容给出语法提示)
Eclipse中可以使用下面的结构添加注释,以便于生成Javadoc(“@”后面的标签有很多,编译器有提示):

/**

 *@author someone

 …

*/

 

判断类对象所属的类:
C#中可以使用Object对象的GetType().Name来获取类名称,也可以使用is运算符来判断对象是否是某个类的实例。
Java中使用Object对象的getClass().getName()来获取类名称,也可以使用instanceof关键字来判断对象是否是类的实例,例如:

SomeClassa = new SomeClass();
boolean b = a instanceofSomeClass;      //这里instanceof前后都是空格连接这里比较特殊

 

数组:
C#和Java中一维数组的用法基本相同。

对于多维数组的区别:
C#中可以有两种定义方式:
1.       int[][][]
arr= new int[10][][];      //这样定义只有第一维数字可以指定
arr[0] = newint[10][];                //指定第二维


arr[0][0] = newint[10];                   //第三维



Arr[0][0][0] = 100;
2.       int[,,]
arr =new int[10, 10, 10];

arr[0, 0, 0] = 100;
Java中多维数组的定义:

int[][][]arr = new int[10][10][10];

arr[0][0][0]= 100;

 

标号:
在C#中如果不使用goto语句,只能通过逻辑判断来跳出多层循环,或者使用return语句来跳出方法体。
在Java中可以使用标号来跳出或者继续执行某一层循环,标号实际上就是用来命名循环的一个名称,使用“标号名:”来定义,后面接循环体。在break和continue后面可以接上标号名来表示跳出标号名对应的循环或者继续执行指定的循环。

 

继承:
C#中使用冒号来表示类的继承关系,例如:class
Child:Base。
Java中使用extends关键字来表示,例如:class
Child extends Base。
C#中使用base关键字来代指基类对象,调用基类成员和方法。Java中使用super关键字来代指基类。

 

访问修饰符:
C#中使用public,protected,private和internal来对方法和变量的可访问范围进行控制,控制范围如下:
· public:同一程序集内或者引用该程序集的任何代码都可访问。
· protected:类、结构或该类的子类内的代码可以访问。
· private:只有类或结构内的代码可以访问。
· internal:同一程序集中的代码可以访问,其他程序集不可以。
Java中使用public,protected,private和默认(不使用修饰符)来进行控制,控制范围如下:
· public:同一个包中或者引用该包的任何代码都可以访问。
· protected:同一个包种的任何类或结构或者包外的子类可以访问。
· private:只有类或结构内的代码可以访问。
· 默认:同一个包种的任何代码可以访问,包外代码不能访问。

 
final关键字:
Java中final关键字除了用来修饰常量,还可以用来修饰方法和类。
C#中使用const关键字来修饰的函数不允许修改数据成员,也不允许调用非const的函数。
Java中使用final关键字来修饰的函数不能被子类覆盖。
C#中使用sealed关键字来定义不能被继承的类。
Java中使用final关键字来定义不能被继承的类。

 

类的组织结构:
C#中使用“命名空间”的概念来组织多个功能相同的类、结构体等,使用using关键字来引入其他的命名空间。
Java中使用“包”来组织多个类,使用import关键字来引入包中的类,可以在import引入的包路径的最后使用通配符“*”来引入包中所有的public类,例如import
java.util.*。包路径之间不是简单地包含关系,例如我们导入java.util.*,但是并不包括java.util.jar.*中的内容。

 

接口:
C#中继承接口和类一样,只需要用冒号将类名和接口隔开即可,如果继承多个接口,用逗号分开。C#中接口只能够包含方法,属性(get,set),委托,事件以及索引器(方括号重载)。
Java中使用implements关键字来继承接口,继承多个接口的话,接口名之间用逗号分隔,接口继承接口的时候使用extends关键字。Java中接口可以包含方法和变量,变量必须声明为共有、静态或者final的,或者不使用限定符。

 
try…catch…:
C#中完整的try…catch…结构包含try、catch和finally,一个catch只能捕获一种异常。
Java中完整的try…catch…结构也由try、catch和finally组成,一个catch可以捕获多种异常(使用管道字符分隔异常类),例如:

try{}catch(ExceptionType1 | ExceptionType2 e) {} finally {}

 

函数可能引发的异常:
C#中可以通过添加注释来写明可能抛出的异常(///这类注释)。
Java中可以再函数参数列表之后添加throws关键字,后面加上可能引发的异常类型(多个异常类型用逗号隔开),开指出函数可能引发的异常,例如:

publicvoid fun(int a, int b) throws ExceptionType1, ExceptionType2… {}

 

线程:
C#中使用Thread类来实例化一个线程,例如:
Thread t = new Thread(newThreadStart(SomeThreadFun));   //SomeThreadFun是一个方法名,也可以是类的成员函数

t.Start();
Java中也使用Thread类来实例化一个线程,Thread类的构造方法传入一个类的实例,类必须实现Runnable接口,例如:

publicThreadClass extends Runnable {
public void run(){   //Runnable就需要实现这一个方法

    //do something

}

}

ThreadClassa = new ThreadClass();

Threadt = new Thread(a);

t.start();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息