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

原创 2017年01月03日 20:22:21

最近在学习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中可以使用标号来跳出或者继续执行某一层循环,标号实际上就是用来命名循环的一个名称,使用“标号名:来定义,后面接循环体。在breakcontinue后面可以接上标号名来表示跳出标号名对应的循环或者继续执行指定的循环。

 

继承:

C#中使用冒号来表示类的继承关系,例如:class Child:Base

Java中使用extends关键字来表示,例如:class Child extends Base

C#中使用base关键字来代指基类对象,调用基类成员和方法。Java中使用super关键字来代指基类。

 

访问修饰符:

C#中使用publicprotectedprivateinternal来对方法和变量的可访问范围进行控制,控制范围如下:

· public:同一程序集内或者引用该程序集的任何代码都可访问。

· protected:类、结构或该类的子类内的代码可以访问。

· private:只有类或结构内的代码可以访问。

· internal:同一程序集中的代码可以访问,其他程序集不可以。

Java中使用publicprotectedprivate和默认(不使用修饰符)来进行控制,控制范围如下:

· public:同一个包中或者引用该包的任何代码都可以访问。

· protected:同一个包种的任何类或结构或者包外的子类可以访问。

· private:只有类或结构内的代码可以访问。

· 默认:同一个包种的任何代码可以访问,包外代码不能访问。

 

final关键字:

Javafinal关键字除了用来修饰常量,还可以用来修饰方法和类。

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#中接口只能够包含方法,属性(getset),委托,事件以及索引器(方括号重载)。

Java中使用implements关键字来继承接口,继承多个接口的话,接口名之间用逗号分隔,接口继承接口的时候使用extends关键字。Java中接口可以包含方法和变量,变量必须声明为共有、静态或者final的,或者不使用限定符。

 

try…catch…

C#中完整的try…catch…结构包含trycatchfinally,一个catch只能捕获一种异常。

Java中完整的try…catch…结构也由trycatchfinally组成,一个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();

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

java与C#区别整理

1、属性:Java中定义和访问属性均要用get和set方法,C#则以特殊形式: public int TaskId         {             get { return _tas...

在c#中 RemoveAt、 Remove、delete用法区别

删除DataRow:有两种方法可以删除DataRow,分别是Delete方法和Remove方法和RemoveAt方法。 其区别是: Delete方法实际上不是从DataTable中删除掉一行,而是...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

C#事件委托和回调的用法区别

事件包括:事件发送者、事件接收者和事件处理程序。 关于事件,我们首要知道的是事件的发送者必须知道发送什么类型的事件,以及相关 的事件参数。而事件的接收者必须了解其事件的处理方法必须使用的返回类型和...

C# abstract virtual interface的区别(付static、override用法)

1.Virtua:当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存...

thrift的用法入门,实现C#和java通信哦

thrift的简介,就是实现J

【转载】Java中this与super的几种用法与区别

1.子类的构造函数如果要引用super的话,必须把super放在函数的首位. class base { base() { system.out.println("base"); } } p...

JAVA基础:String, StringBuffer, StringBuilder ——区别,用法及常见问题

引言这几天看到知乎上讨论一道入门级JAVA面试题目,发现自己竟然答不上来,遂查阅相关资料恶补一下。问题:String,StringBuffer和StringBuilder区别?衍生问题 - 为什么能...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)