Java VS C#.Net
1
常量:使用final关键字
常量:使用const、readonly关键字
2
使用Eclipse导入已有工程
使用VS直接打开各个项目的解决方案即可
3
没有属性,使用变量需要定义get,set方法
存在属性{get;set;}
4
使用foreach(object o in objectList){}
存在foreach(object o in list){}
5
无函数指针
有专门的函数指针----委托
6
无var 关键字,类型不能动态匹配
存在var 关键字
Var x=new A();
7
一个.java文件只能有一个public class
不存在此约束
8
不存在结构体一说,一般大家指的结构体就是指的class
有结构体struct ,属于值类型
9
List只是一个接口,需要ArrayList 或
LiinkedList 实现
IList 是接口,List<T>是实现
10
在linux上可以很好的运行
在linux上运行起来比较麻烦,需要将.net平台移植到linux才可以。所以除非技术爱好者,一般很少有人这样做。
11
不存在使用关键字将值类型变成引用传递的情况
可以使用 ref、out等关键字将值类型的引用传递
12
没有as 关键字的用法
存在as ,用来转换类型的 a as List<string>
13
使用 instanceof 判断是否可以转换
使用is 判断是否可以转换
14
GC:存在,但是全部托管,不能主动回收
GC:存在,除去特殊指定外剩余全部托管。如果有需要,自己也可以主动对托管变量进行回收
15
用Extends进行继承
类似于C++,使用“:”进行继承
16
使用final的类不能继承
使用sealed 表示类不能被继承
17
无索引器
有索引器,这个比较有用,想学.net的可以重点看下
18
生成的是字节码,在jvm(java 虚拟机)上运行
生成IL语言在.NET CLR(公共语言运行时(.net虚拟机)上运行
19
生成是的.jar 文件
生成结果是,exe 或者.dll文件
20
命名规范:
常量:使用全部大写字母加下划线的组成
类命名:Pascal 如:AppleFruit
方法和变量:Camel 如:appleFruit
命名规范:
常量:使用全部大写字母加下划线的组成
类命名:Pascal 如 AppleFruit
变量:Camel 如:appleFruit
方法:Pascal
21
无法折叠代码块,需要添加特殊的组件,研究了一下比较麻烦,性价比不高
使用
#region
#endregion 折叠代码块
22
F(final int x,final int y)表示x,y不能被修改
研究了一下,貌似没有很好的方法,如果有你有的话可以联系我
23
构造函数中使用super引用父类的构造函数
使用():base引用父类的构造函数
24
Package in java
(1)使用包 package来包含类的程序集
(2)引用包时使用import
(3)包之间是并列关系,不存在包含关系
(4)包的物理结构和逻辑结构一定要一致
(5)包不存在别名一说
Namespace in C#
(1)使用明明空间来包含程序集
(2)引用命名空间using
(3)命名空间可以存在包含关系
(4)命名空只是一种逻辑结构,可以与物理结构不一致
(5)允许使用命名空间的别名(当命名空间比较长时,引用的比较麻烦)
25
数值类型使用“==”比较
字符串比较使用 equals比较
数值类型比较使用==
字符串使用equals比较和使用==比较差别不是非常大(当有比较的字符串是null时,两者还是存在区别的)
26
String.formate时(%s)与后面的变量保持一一对应
String.formate时{0}使用索引来指示,使用后续的对应变量,如果需要格式化的话,使用“:”来指定
27
大部分工程都需要安装程序,然后debug模式下连接服务器,然后请求才会到达ide中,和php的调试请求差不多
一般本地直接可以run起来,通过运行的UI来调用本地的代码
28
没有goto 语句
保留了goto语句
29
没有指针的概念
有指针,但是需要在unsafe的情况下使用
30
枚举:
除了和C#一样的设置常量数值,java仍保留了特殊类的基本共跟你过,让玩家可以自己玩,而C#对此做了特殊限制
枚举:
使用enum枚举器来进行枚举,只能enum设置常量数值
31
多线程使用synchronized使代码同步
使用lock{}来锁定代码
32
不能重载运算符
可以重载运算符,但是不鼓励
33
可变参数:
Void sum(int…list){}以“…”三个字为关键字
可变参数:以params为关键字
34
对异常的描述:
java中,异常分为两种,运行时异常(也就是uncheckException)和已检查异常checkException,但是checkException是必须要处理的,也就是不能抛出,必须通过try-catch来完成,在方法的定义上也必须写上 throws 某某异常,需要Check Exception如果不处理的话是不能进行编译的。对于运行时异常可以直接抛出,无需专门的try catch
C#和 C++类似,不需要对代码强制trycatch ,也不需要在写出某种throw后,一定要在方法的定义上加上 throws...
C#作为微软拿出来与java对抗的语言,在语法和特性上一定是要优于java 的,同事微软还提供了大量的语法来支持.net 和office、sqlserver、access等微软其他产品的契合。但是java作为开源产品中很重要的语言,如今已经快接近20岁了,有大量的成熟的插件和组件以及开源的框架来配合,这点是C#无法媲美的,所以无所谓孰优孰劣。貌似以前看过这样一句话,大意是,java 是开源的,有大量丰富的开源框架可以用,C#是闭源的,但是微软很给力(虽然微软现在已经开始拥抱.net平台了,但是C#可以有成熟的开源环境还需要非常长的路要走)。
文本大致比较了一下java和C#的基本语法和基本概念以及他们的ide,其目的是:
1、让程序员可以再熟悉一门语言的情况下,再学习另外一门语言可以快速的入门。
2、对自己在工作后开始接触java做一个总结。
不论怎么对比java和C#,毕竟他们是属于两个平台,两种完全不同的语言,所以语法上千差万别,本文也只是为了让大家快速的入门、上手而做了一些记录。如果文中哪里有差错,大家可以指出。如果还有一些重要的语法差异,被我忽略了,也可以指出来。