用.NET平台下的C#语言开发了比较长一段时间,最近项目开始用JAVA来开发了,本文通过自己开发过程中的一些感受说下它们在具体开发过程的不同点,由于经验知识还有限,本篇文章只能从比较表面的以及自己常用的功能点来说明我所看到的不同点。
我是用VS2008和VS2010开发.NET程序,通过MyEclipse8.5开发JAVA程序,下面从IDE、语言、插件的不同点来做下简单的说明。
IDE的不同点:
给我的第一感觉就是MyEclipse在开发过程编写查看代码也非常便利,甚至有很多VS没有的功能,下面列举自己现在遇到的一些不同点:
1、一个变量字段选中后,其他用到该字段的背景颜色自动凸显出来,方便查看有哪些地方用了这个变量,VS2010之前是没有这个功能的。
2、对于一个大括号或小括号的代码段,双击该符号后面,则自动选中括号内部的代码段,这个可以方便查看一个代码段,VS没有这样的功能。
3、MyEclipse没有像VS里的#region,#endregion一样的代码段区域,在一个方法或类里,可以#region 功能点….#endregion这样把代码片段折叠起来,MyEclipse除非用其他一些插件才能达到这个效果。
4、Ctrl+alt+t和Ctrl+alt+r快捷键,这个快捷键在MyEclipse里非常有用,可以分别快速查找工作空间里的type或者resource,可以快速模糊匹配找到文件或某个类型的文件,而VS没有找到这样的功能。
5、MyEclipse智能提醒默认比较简单,只要在输入.后才会自动提醒,可以在window->preferences->Java-Editor->Contenet Assist标签页的Auto-Activation框里的Auto activation triggers for Java设置成.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,这样设置后,在MyEclipse里输入任意字母就能提示了,但是它区分大小写,不像VS输入小写a也能智能提示大写A开头的变量类型等。
6、MyEclipse经常遇到编码问题,对于新手非常不便利,它分为文件打开乱码,和提交请求中文内容乱码两种情况。当工作空间包括多个项目时,有可能一个项目是用GBK编码,另外一个是UTF-8,这样就会导致单个文件乱码,设置整个工程编码在Window->Preferences->General->Workspace选择Text file encoding里的Other设置,为单独项目在Project右键Properties->Resource选择Text file encoding里的Other设置。对于JSP等提交请求内容默认编码是ISO-8859-1,也经常导致乱码,可以在windows->Preferences->general->Content Types里的Text设置不同文件的编码。但是VS没有这么多乱码问题,对新手不容易出现乱码的问题。
7、MyEclipse经常会提示内存溢出等相关内存问题,对于新手也是比较困惑的事情,往往是内存默认配置不够等造成的,修改myeclipse.ini里-vmargs下面的配置参数,比如-Xmx912m表示最大分配堆内存912M,-XX:MaxPermSize=556m表示最大分配非堆内存556M,这个可以让MyEclipse内存可能够用。但部分内存溢出,可能是JVM内存占用溢出,就需要单独设置JVM的内存参数了,在window->preferences->Java->Installed JRE里的,选中默认JDK,然后选择Edit,在Default VM Arguments里配置相关参数即可。如果跑的程序是WEB程序,可能还需要设置Tomcat的内存设置,在window->preferences->MyEclipse->Servers->Tomcat,选中对应版本的Tomcat,然后选择里面的JDK节点,在Optional Java VM arguments里设置内存参数。相对来说VS就不会有这么麻烦的处理了,一般都不用设置内存参数。
8、调试代码的时候,VS就表现出比MyEclipse更强大了,它们都可以在断点处修改已经存在的变量的值,但是VS在监控临时变量框里输入变量时同样可以智能提示自己写的代码,而MyEclipse不能自动提醒,并且VS可以拖动断点到已经运行的代码,这个功能在调试问题时是非常强大和有用的,但是MyEclipse不能拖动断点。
9、默认的Ctrl+左键点击,可以快速定位到该字段或类型的定义处, 和F3一样,但是我觉得ctrl+左键开发过程中更顺手,比VS里默认的F12快速定位会感觉更便利,而且它集成Spring后,Ctrl+左键可以选择定位到注入接口的子实现代码,这样可以很方便的查看实现代码,而VS当使用Spring.net集成时,是不提供这个功能的。
10、MyEclipse里右键-source,可以有很多比较方便的功能,比如生成getter,setter和继承接口父类方法。
11、JAVA项目是通过导入方式打开,不是通过像VS里双击.sln或.csproj文件就可以打开整个工程。但是打开一次过后,下次再打开MyEclipse,它都会自动加载已经打开过的项目。而VS是每次只能打开一个解决方案,解决方案里包括不同项目。如果新增了解决方案,下次就需要单独打开了。
12、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哪个版本下编译,会比较方便。
13、MyEclipse双击代码编辑框里文件的Tab栏,就可以切换全屏显示代码编辑块和多框显示,这点比VS更方便一点,Package Explorer框的旁边有个Link Vith Editor按钮,可以快速定位文件在包里的位置,这个也比较方便,但是VS里一个文件右键后可以直接选择打开对应的物理文件目录,在MyEclipse里没有这个功能。
语言的不同点:
Java语言和C#语言非常相似,虽然内部会有很多区别,提供的API也不一样,但开发一个具体功能点的思路常用的都差不多,由于对比较新的技术和特性开发过程中接触不多,我所遇到的不同点包括:
1、Java包的名字是和物理文件位置一一对应的, C#里命名空间可以随便写,并且编译出来的程序集也可以随便更改,可以不和命名空间保持一致,程序集和JAVA里单独打出来的jar包是差不多的意思。
2、JAVA的一个文件只能有一个公共类,而C#可以多个公共类在一个文件里。
3、如果找到一个JAR包,Java查看新jar包的方法字段描述,需要有单独的对应jar包的doc文档,才能看到接口调用参数说明,否则看起来不直观,但是如果有源码打出来的jar包,调试的时候可以方便的看到该包的源代码。.NET里只要有了dll文件,就能方便的看到方法元数据调用参数,但是看到参数详细说明,还是需要对应dll的xml文档。
4、对于WEB开发,JAVA里Filter,Servlet,Listener是很常用的,Java里的Filter可以用.NET里的module来实现一些功能,但Filter可以制定作用请求范围,module是全局控制的;Servlet相当于一个具体的handler,可以对制定请求进行处理,Listerner可以用.NET里的Application_Start里来完成一些功能,但是JAVA里集成了部分默认Listerner,它在WEB应用启动的时候就开始执行。它们的具体执行流程为:WEB启动时,Listener的ContextInitialized方法->所有Filter的Init(不管filter-mapping的值)->所有配置了load-on-startup大于等于0的Servlet的init方法(不管servlet-mapping的值),具体请求为:具体Servlet的init(只执行一次)->Filter doFilter(请求配置的filter-mapping的value)->Servlet service; 最后网站释放的执行顺序为:Filter destroy-》Listener contextDestroyed。
5、Java里的Final关键字,当给一个字段时,表示该字段不能修改,构造函数里都不能修改,这个和C#的const有点像,但是const默认是static的。和C#的readonly也比较像,但是readonly可以在构造函数里修改。当它作为一个方法的修饰符时,它类试c#的sealed类,不能重写它。
6、Java里没有静态构造函数,如果要实现一些初始化工作,需要用静态代码块,static{…},里面输入内容即可,C#只有静态构造函数的说法。
7、JAVA中有常量池概念,是和堆、栈不一样的区域,虽然和C#一样String都有字符串驻留机制,但是和.NET的又不一样了。因此java里字符串比较最好用equals比较,否则可能出问题。比如"a"+"b"字符串在常量池里,如果它们和”ab”比较将相等,但是"a"+b,b是一个变量,就将放到堆里了,如果还用==”ab”判断将返回false,所以JAVA里尽量用equals来判断字符串,但是.NET里不涉及这个问题,经过计算的字符串,==的结果也会相等。
8、Java里每个文件只要有Main方法入口,它都可以运行,而.NET里需要项目类型修改为控制台应用程序,然后有一个Main方法才能作为一个运行的载体。
9、Byte类型的数字范围不一样,Java里是-128到127,.NET是0-255,一般需要互相交换数据和处理都是转换成16进制,然后取8bit的后2个bit,这样它们的值都是一样的,方便同步加密解密或相关处理
10、Java里推荐用get,set方法来对内部变量赋值和获取值,.NET里可以用字段get,set获取,并且vs2008后可以直接get;set;的方式,借助语法糖,编译器后会自动生成等价的get,set内部字段。
11、JAVA里文件保存后默认自动编译,但是这个也得益于它把每个java文件编译成一个class文件,.NET里需要单独每次执行编译项目,因为它一个项目一个dll文件,如果保存其中一个.cs文件都执行编译,则工作量太大影响开发速度。
12、Java里List是一个接口,这个对在C#里用惯了List集合的,new List已经会报错了,而且它们的泛型也不一样,C#是CLR层的泛型支持,JAVA的泛型不是经过JVM支持的,因此性能相对没有提升。
13、JAVA里默认修饰符是包内可见(对应同一个文件夹目录,而不是项目大jar包下)的, protected的变量和方法都是包内和子类可见的,.NET里是只有自己和子类可见。.NET里类的默认修饰符是Internal,程序集内可访问。方法和字段默认为private的,和JAVA默认包内可见不一样。
http://lawson.cnblogs.com/
插件的不同点:
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的格式要求更严格。
上面都是自己最近开发过程中根据自己遇到的问题分析和整理的结果,涉及的面有限,需要自己以后不断完善相关技术点,并且整理和理解的结果也可能不完全准确,如有问题,请指正。
原文链接:http://www.cnblogs.com/Lawson/archive/2012/06/25/2560761.html
相关推荐
【Java与.NET开发WebService详解大全】 在IT领域,WebService是一种基于标准协议(如SOAP和WSDL)的跨平台、跨语言的通信机制,允许不同系统间的应用进行交互。本篇文章将详细探讨使用Java和.NET(VB.NET为例)开发...
在IT行业中,跨平台通信是常见的需求,Java和.NET作为两个主流的开发平台,它们之间的交互尤为关键。本文将详细讲解如何使用Java调用.NET发布的Web Service(ASMX),并解决在此过程中可能出现的SOAPAction报错和...
本文将详细介绍如何在Java中调用.NET Web服务,涉及的关键技术包括WSDL(Web Services Description Language)、JAX-WS(Java API for XML Web Services)以及一些必要的工具和步骤。 1. **理解WSDL**: WSDL是描述...
在IT行业中,跨平台通信和数据安全是两个重要的议题,特别是在Java和.NET这两个广泛应用的开发环境中。本主题探讨的是如何在Java与.NET之间进行加密算法的互操作,以确保数据在传输过程中的安全性。以下是对这个主题...
- “Web Service调用方式.doc”可能涵盖了.NET环境下的Web服务调用过程,可能包括使用ASMX或WCF创建服务,以及如何在.NET代码中调用Java Web服务。 理解Java和.NET之间的Web服务调用是跨平台开发的关键。通过合理...
在Java和.NET中,虽然AES的算法是标准化的,但具体实现的API可能有所不同,导致加密结果的不一致。 例如,Java的`javax.crypto.Cipher`类和.NET的`System.Security.Cryptography.Aes`类提供了AES加密的功能。Java的...
在IT行业中,跨平台通信是常见的需求,Java和.NET作为两个主流的开发平台,它们之间的交互尤为关键。本示例探讨的主题是“Java调用.NET Web Service”,这涉及到不同技术栈之间的互操作性,主要利用了Java的SOAP...
标签中提到的"android"意味着这些加密解密技术也可以应用于Android开发中,因为Android平台同样支持Java语言,所以这些加密解密方法同样适用。 在实际使用这两套源码时,需要注意以下几点: 1. **密钥管理**:密钥...
Java与.NET之间的SOA互操作教程主要探讨了如何在两种不同的平台上实现面向服务架构(SOA)的服务交互,而无需依赖复杂的Web服务栈或专有中间件。本教程的作者提出了一个基于REST(Representational State Transfer)...
.NET 和 Java 之间的互操作性是跨平台开发中常见的需求,尤其是在涉及到安全性,如数字签名、加密和解密等操作时。RSA(Rivest-Shamir-Adleman)是一种广泛使用的非对称加密算法,它允许数据在不同的系统间安全地...
本压缩包包含十几个适用于Java和.NET开发环境的网页模板,旨在提供跨平台的网页设计解决方案。 首先,我们要了解Java和.NET这两个技术栈。Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的...
此外,VB.NET中的控件和窗体在Java中对应的类库和API也会有所不同,因此UI部分的转换可能需要额外的工作。 说明文档通常会包含如何使用工具的步骤、转换的限制和注意事项,以及可能遇到的问题及解决办法。源代码...
描述中的“没有没用的,多多少少都会有帮助的”可能是指在学习和使用Java的过程中,即使是一些看似不那么直接相关的内容,也可能在某个时刻派上用场。这是因为编程语言和框架的学习通常是相互关联的,理解和掌握基础...
总的来说,这个压缩包可能包含了一些使用Java和.NET开发的J2EE项目,同时也有一些Flash文件,可能是为了增强用户体验而设计的互动元素。对于想要学习J2EE平台和企业级应用开发的程序员来说,这样的资源包可以提供...
在IT行业中,面试是检验求职者技能和知识的关键环节,特别是在Java、.NET和SQL这三个领域。这些技术广泛应用于企业级应用开发,因此对于求职者来说,熟练掌握这些技术至关重要。下面,我们将深入探讨这些公司在面试...
Java程序调用.NET/C#的Web服务是一种跨平台的交互方式,主要依赖于SOAP(Simple Object Access Protocol)协议,使得不同编程语言开发的应用程序能够相互通信。在本场景中,用户已经提供了一个.NET的Web服务,而我们...
.NET提供了Common Language Runtime (CLR) 和 .NET Framework Class Library,简化了开发过程。重点知识点包括面向对象编程、LINQ(Language Integrated Query)、异步编程(async/await)和Entity Framework等。 3...