前言:因为目前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}。

持续更新中。。。。。。

C#转Java心路历程相关推荐

  1. 自学java心路历程(学了半年。。。直到更久。。。。。)

    自学背景环境: 我是91年的.之前在小贷行业,混了快四年,经历过3家公司倒闭,在找工作发现没什么特技,太难.毕业都近4年了.但是我觉得必须要有所改变,要学.然后听了朋友的意见,不去培训学校自己自学. ...

  2. Java小白到大神的心路历程(Java SE)

    万事万物皆有其发展规律,学习Java也不例外. 以下是我根据教学经验,总结出来的小白在学习Java各阶段时的心路历程,当你在学习期间欣喜.困惑时,不妨看一看,也许这些都是必经之路. 使用Java完成第 ...

  3. 心路历程(六)-一个人的后台

    回想一下,心路历程(五)是2016年2月份写的了,距离现在(2017/07/17)已经是一年多了.那是的是还是一个刚自学完的矛头小子,为找工作,房子,生存而烦恼的应届生.而在今年(2017)的3.24 ...

  4. 应用优化前心路历程~

    19年五月份,突然脑回路一抽,着手开发了一款基于键盘音效的桌面级软件---keytones;命名有点~糙.当时开发的初衷就是为了在deepin系统上能使用一款键盘音效软件,原因当然就是deepin系统 ...

  5. ArchSummit微课堂|蘑菇街DevOps实践及心路历程分享

    本文整理自 #ArchSummit微课堂#--赵成分享的蘑菇街DevOps实践及心路历程,主要介绍一些运维体系建设中的的经历和实践, 什么是DevOps?为什么是DevOps? 蘑菇街DevOps实践 ...

  6. RadHat 6 系列心路历程、新功能及变化

    RadHat 6.0系列心路历程 首先最大的改变是配置内核为2.6.32  .默认文件系统升级为为ext4(比ext3速度更快,可达16TB).其它可用文件系统附加件包括XFS(可扩展到100TB)和 ...

  7. 心路历程(四)-我的2015

    当我再次敲着键盘时,距离上一次发表博客已经两个多月了.太久没写博客都有点陌生了,因为昨天对自己的2015年做了一个总结,所以才有勇气来写这篇博文,有了那种强烈的动机.亨利福特说过一句话:你相信自己行或 ...

  8. 人工智能AI工程师学习路线心路历程和总结分享

    背景: 刚开始接触人工智能AI的时候,感觉很新鲜.很新颖,是一个未来的方向.充满了无限的憧憬,给自己定了一个目标:学习人工智能.接下来的问题:怎么学习?开始想过报名培训班,经过咨询之后,费用是一大笔开 ...

  9. 从开发者到讲师的心路历程

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

最新文章

  1. pythonurllib模块-python爬虫之urllib模块和requests模块学习
  2. mysql表中的多对多关系表_「一对多」关系型数据库中一对多,多对一,多对多关系(详细) - seo实验室...
  3. UA OPTI512R 傅立叶光学导论17 离散傅立叶变换简介
  4. stdthread(8)并发recursive_mutex 递归锁
  5. linux5支持32,Red Hat发布RHEL5.3 可支持32颗虚拟CPU
  6. android学习日记16--GridView(网格视图)
  7. CentOS7.0使用Yum安装Nginx
  8. html固定dl高度_HTML入门笔记1
  9. Qt工作笔记-遍历文件夹里面的所有文件,并在QTreeWidget内显示
  10. CAN笔记(11) 位时序
  11. eclipse调试java web_eclipse调试web项目
  12. MFC初步教程(三):菜单
  13. Word排版艺术—读书笔记
  14. 微积分导论--Continuity
  15. Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)并执行wasm...
  16. 兄弟组件之间的传值vue
  17. android 下的 WATCHDOG(2)
  18. 集群搭建——SGE与PBS
  19. Microsoft Visual C++ 14.0 网盘下载
  20. java压缩文件,在线下载文件并压缩

热门文章

  1. visio 2010如何激活
  2. linkedin 架构_投票:您如何使用LinkedIn?
  3. UE4虚幻引擎UI界面动画制作!
  4. 使用Appinum爬取微信朋友圈
  5. 初学java者写家庭收支账本
  6. 单片机:AT89s52 定时器 time0
  7. Android apk打包命名规则
  8. 计算机上安装的网络协议,怎么安装网络协议
  9. 学习Linux系统清理/var/log/journal/垃圾日志教程
  10. StarUML 3 中文文档 包图