C#转Java心路历程

前言:因为目前gis圈里,搞b/s的基本后台都用的是java、c++,java占主流。不过c/s的主流还是C#,主要集中在ArcEngine、skyline、osgEarth上做二次开发。但我一直是做b/s的,虽然搞了三年的C#,还是准备转java。有句话说的好,做一件事,最好的时间就是十年前,或者现在。所以别犹豫,干就完了。

接下来对比一下C#和java的不同之处吧:

1、getter setter

C#的get set写起来非常顺手,只要字段后面跟个大括号,里面写上get;set;就行,但是java必须写全,这一点让人很难受。虽然C#编译的时候,底层也是自动补全get和set方法,但是用户写起来爽呀。

2、继承

C#的继承,无论是继承类还是继承接口,都用冒号连接就行,非常方便。但是java继承类必须用extends,继承接口必须implements。

3、方法引用

C#里叫委托,java里就叫方法引用,本质上都是用另一种方式来调被引用的那个方法。

4、Lamda表达式

C#里Lamda表达式用 => 连接,java里用 ->连接。

5、锁

线程里的锁,C#的关键字是lock,java里是synchronized 意思是同步的,即同一个时刻只能有一个线程来访问,他们都是要把某一块代码包起来。在jdk1.5时也新增了lock关键字,准确的说是方法,需要手动mylock.lock和mylock.unlock。

6、数组声明

java声明数组既可以 int[ ] arr=……也可以int arr [ ]=……,官方其实推荐第一种写法,c#则只能是第一种写法。

7、数组遍历

java的forEach循环:

// 打印所有数组元素

for (double element: myList) {

      System.out.println(element);

}

c#的forEach循环:

// 打印所有数组元素

foreach(double element in myList) {

      Console.WriteLine(element);

}

8、时间类型

java中Date的构造函数可以传一个millsec,表示的是从1970年1月1日起的毫秒数,即时间戳,这一点和js类似。

9、时间类型的格式化

java中对于Date类型的格式化需要用到SimpleDateFormat类,对Date的加减需要用到Calender类,c#则只用Date或者DateTime就行。

10、java注解 vs c#特性

注解或特性说白了都是给计算机看的,不同的注解特性有不同的功能。不过我感觉java中注解经常使用,而c#中特性一般使用的并不太多。

11、异常

java和c#都是用的try catch捕获异常,但是抛异常不太一样。java是不仅需要在方法声明之后要加一个类似throws RunTimeException来抛,也需要在方法体里写throw new exception(注意:方法体里是throw,声明时是throws),而c#里则只需要在方法体里直接throw new exception就行。

12、命名空间

命名空间是c#里的概念,java里叫package,两个是一个意思,体现的是功能的模块性。

13、集合

java中集合的类型巨多,可分为set list map三大类,每一种又有两三种子类。c#主要还是用list,且在c#中遍历集合主要还是用for 或者foreach循环。而java中虽然也可以用for遍历,但是一般不用这种方式,用的是迭代器iterator来遍历。最最最特殊的是,集合的移除元素不是用集合本身的方法,而是用迭代器的remove方法。我的天呐~~~~。虽然也可以用foreach遍历,但是本质上还是调用的迭代器。

14、枚举

java中的枚举可以实现一个接口,里面的每个枚举项都可以重写这个接口,从而在调用的时候表现出不同的内容,感觉跟多态似的。然而在c#好像不能这么用?反正我从来没有这么玩过。

15、泛型

java中的泛型指定类型时只能用包装类型或者引用类型(Interger Double String),不能用基本数据类型(int double string)。c#中则都是用基本数据类型。泛型方法中尖括号放置的位置也有所不同,c#一般是放在方法名称后面,而java是放在返回值的前面。

16、list类型对比

java中的list类型分为arraylist、linkedlist、vector三种,linkedlist底层是用双向链表实现的,其他两个底层都是用object数组实现的,一个线程安全一个不安全,两个的数组扩容时的默认容量也不太一样。所以综合上来说,linkedlist的效率最高。

17、map vs dictionary

键值对,在c#中叫dictionary,在java中叫map,java中的map又分为hashmap linkedhashmap、treemap、hashtable、properties。key都不可重复,我觉得c#中的dictionary更像java中的linkedhashmap,都可以按照添加的顺序去遍历。补充一句,java中集合的无序性的意思是向集合里添加的时候不是按索引的123456去添加,而是根据hash值去计算一个位置。所以遍历的时候仍然是有顺序的,只不过不是添加的顺序而已。

18、可变参数

c#中的可变参数用关键字params表示,java中用三个点表示…

19、占位符

c#里的占位符比较简单,只有{0}{1}{2}……,java里就比较多了,string.format用的是类似c语言的占位符,如%s 、%d 、%f等等,message.format用的也是{0}{1}{2},拼接sql语句时用的是?占位符,在xml文件中,如在mybaties框架里,用的是#{0}或者#{param1}或者#{变量1}#{变量2}#{变量3}或者${变量1}${变量2}${变量3}。

持续更新中。。。。。。

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIGIS.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值