接下来是C#和JAVA在语言层面的对比,话说.net 3.0之后,语言层面优雅不少(即使有些是语法糖),加入了更过函数式编程的用法,如LINQ, lambda等,这些就不作对比了,为什么?因为JAVA这块貌似拿不出东西来比,据说scala等java平台后来者这一点好很多,不过还没用过,期待JAVA迎头赶上啊~!这里主要对比各自的基础框架,基本上是.net2.0与jdk1.6的比较:
1 、JAVA对已声明异常需要在代码中做处理,否则无法通过编译,这是个比较不好做评价的设计,虽然有助于提高程序的健壮性,但是却也会把一些问题隐藏起来,个人认为这个设计用在服务器程序中是非常好的,至少你的服务不会因为一个异常而终止。
2、成员可见性上,JAVA默认为包可见,一定程度降低了封装性,另外protected修饰符在JAVA中为包可见及子类可见,.NET中仅为子类可见;
3、JAVA反射机制存在读写限制,需调用setAccessible方法给予权限,个人觉得有点鸡肋;
4、可替换jar文件中的class文件实现局部更新,这点在某些情况下非常好用;
5、JAVA基础类库或者说JAVA代码规范中的接口名字无法让人一眼看到就知道是个接口,如.net里接口会固定首字母为I ;
6、JAVA里的枚举设计的比较繁琐,很多情况都在使用静态常量代替,相比之下,.net中的枚举更为直观;
7、JAVA只是简单的将泛型设计成一个语法糖;
8、JAVA里没有值类型概念,基础类型int,byte等不是原生的对象,需要经过包装,导致Map<Byte,String>里用一个int key=1去查找的结果肯定为NULL,即使MAP里存在KEY=1的数据,这个必须批评下;
9、运行在实例调用的方法表里出现静态方法,这容易导致混淆;
10、相比.net,JAVA里的时间操作比较麻烦;
11、JAVA中做单元测试十分方便,每个类都可以加个main函数,虽然.net也可以,但配置相对麻烦;
12、JAVA中环境变量的配置估计是不少新手的噩梦。