疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java和.NET在开发中的不同盘点


 

我是用VS2008和VS2010开发。NET程序,通过MyEclipse8.5开发JAVA程序,下面从IDE、语言、插件的不同点来做下简单的说明。但由于经验知识还有限,本篇文章只能从比较表面的以及自己常用的功能点来说明我所看到的不同点。

  IDE的不同点:

  给我的第一感觉就是MyEclipse在开发过程编写查看代码也非常便利,甚至有很多VS没有的功能,下面列举自己现在遇到的一些不同点:

  1、MyEclipse没有像VS里的#region,#endregion一样的代码段区域,在一个方法或类里,可以#region 功能点…#endregion这样把代码片段折叠起来,MyEclipse除非用其他一些插件才能达到这个效果。

  2、MyEclipse导入新项目,如果JRE版本不一样,需要选择使用本地JRE版本,项目右键->Build Path->Configure Build Path->Libraries->Java Build Path里修改JRE版本,但有时还会出现编译问题,原因是没有选择编译的JDK版本,项目右键->Build Path->Configure Build Path->Java Compiler里修改Compiler compliance level.对于VS,高版本代码打开低版本代码,会自动升级,或者手工选择在。NET哪个版本下编译,会比较方便。

  3、对于一个大括号或小括号的代码段,双击该符号后面,则自动选中括号内部的代码段,这个可以方便查看一个代码段,VS没有这样的功能。

  4、调试代码的时候,VS就表现出比MyEclipse更强大了,它们都可以在断点处修改已经存在的变量的值,但是VS在监控临时变量框里输入变量时同样可以智能提示自己写的代码,而MyEclipse不能自动提醒,并且VS可以拖动断点到已经运行的代码,这个功能在调试问题时是非常强大和有用的,但是MyEclipse不能拖动断点。

  5、MyEclipse双击代码编辑框里文件的Tab栏,就可以切换全屏显示代码编辑块和多框显示,这点比VS更方便一点,Package Explorer框的旁边有个Link Vith Editor按钮,可以快速定位文件在包里的位置,这个也比较方便,但是VS里一个文件右键后可以直接选择打开对应的物理文件目录,在MyEclipse里没有这个功能。

  6、JAVA项目是通过导入方式打开,不是通过像VS里双击。sln或。csproj文件就可以打开整个工程。但是打开一次过后,下次再打开MyEclipse,它都会自动加载已经打开过的项目。而VS是每次只能打开一个解决方案,解决方案里包括不同项目。如果新增了解决方案,下次就需要单独打开了。

  语言的不同点:

  Java语言和C#语言非常相似,虽然内部会有很多区别,提供的API也不一样,但开发一个具体功能点的思路常用的都差不多,由于对比较新的技术和特性开发过程中接触不多,我所遇到的不同点包括:

  1、JAVA里默认修饰符是包内可见(对应同一个文件夹目录,而不是项目大jar包下)的,protected的变量和方法都是包内和子类可见的,.NET里是只有自己和子类可见NET里类的默认修饰符是Internal,程序集内可访问。方法和字段默认为private的,和JAVA默认包内可见不一样。

  2、如果找到一个JAR包,Java查看新jar包的方法字段描述,需要有单独的对应jar包的doc文档,才能看到接口调用参数说明,否则看起来不直观,但是如果有源码打出来的jar包,调试的时候可以方便的看到该包的源代码NET里只要有了dll文件,就能方便的看到方法元数据调用参数,但是看到参数详细说明,还是需要对应dll的xml文档。

  3、Byte类型的数字范围不一样,Java里是-128到127,.NET是0-255,一般需要互相交换数据和处理都是转换成16进制,然后取8bit的后2个bit,这样它们的值都是一样的,方便同步加密解密或相关处理

  4、JAVA里文件保存后默认自动编译,但是这个也得益于它把每个java文件编译成一个class文件,.NET里需要单独每次执行编译项目,因为它一个项目一个dll文件,如果保存其中一个。cs文件都执行编译,则工作量太大影响开发速度。

  5、Java里的Final关键字,当给一个字段时,表示该字段不能修改,构造函数里都不能修改,这个和C#的const有点像,但是const默认是static的。和C#的readonly也比较像,但是readonly可以在构造函数里修改。当它作为一个方法的修饰符时,它类试c#的sealed类,不能重写它。

  6、Java包的名字是和物理文件位置一一对应的,C#里命名空间可以随便写,并且编译出来的程序集也可以随便更改,可以不和命名空间保持一致,程序集和JAVA里单独打出来的jar包是差不多的意思。

  7、Java里推荐用get,set方法来对内部变量赋值和获取值,.NET里可以用字段get,set获取,并且vs2008后可以直接get;set;的方式,借助语法糖,编译器后会自动生成等价的get,set内部字段。

  插件的不同点:

  1、MyEclipse自身就是一个插件,里面集成了大量开源框架,而VS是微软一个大一统的IDE,要用其他开源插件,需要单独下载和单独配置。

  2、Java里实现webservice的方法很多,除了javax.jws包里只有的JAX-WS,java webservice规范自带版本,还有axis,xfire的webservice开源实现,axis包括axis1,axis2,xfire已更名为cxf了,但是各种实现方法各异,在和。NET发布的webservice互相调用时,经常遇到一些问题,总体来说Java对wsdl的格式要求更严格。

  上面都是自己最近开发过程中根据自己遇到的问题分析和整理的结果,涉及的面有限,需要自己以后不断完善相关技术点,并且整理和理解的结果也可能不完全准确,如有问题,请指正