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}。

持续更新中。。。。。。

一个很强大的工具, 能将c#代码片段、文件甚至工程直接换成java代码,并能彻底解决外部引用的DLL问题,最强的是支持c#工程的直接换,生成的Java代码质量也很不错。软件已破解,去除了未注册版最多只能换1000行的限制,亲测可用!压缩包内含帮助文档,不过由于软件的使用很简单,帮助文档基本可以忽略。(小提示:如无法运行,请确认是否安装了.NET framework) 下面是一些英文介绍: C# to Java Converter features include: 1. Folder conversion: Entire folders of C# code files are converted to Java code files.(文件夹换) 2. Code snippet and file conversion: Our snippet conversion accuracy is outstanding and does not require you to insert entire methods or classes. Heuristics are used to convert code fragments wit h missing declarations. (代码片段和文件换) 3. Full support for the latest .NET code syntax: Generics and other newer C# features are converted where possible to the Java equivalent.(全面支持最新版的.NET语法) 4. Conversion options: You can specify numerous conversion options via our Options dialog. Code formatting options, custom type & member replacements, custom string replacements, and miscellaneous options. (可以指定换规则) 5. File comparison feature: After converting a project or folder, you can compare original and converted files side-by-side. Comparing converted code to original code.(原代码与换后代码的比较) 6. Running from the command line: C# to Java Converter can be launched directly for a specific project, folder, or file conversion from the command line. Command line.(命令行执行) 其他一些特点: 1. Converts all versions of C# code (2002, 2003, 2005, 2008, and 2010) (可以换所有版本的C#代码) 2. Evaluates all referenced assemblies and .NET projects in order to resolve external references more completely.(能彻底解决外部引用的dll类库) 3. Converts C# ref parameters using Java generics 4. Superb conversions of all types of arrays 5. Handles the numerous coding alternatives and ambiguities of C# code 6. Flawless conversion of all aspects of inheritance and interfaces 7. Allows custom replacement of strings in the final converted code 8. Accurate even with poorly formatted C# code
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AIGIS.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值