Java和.NET开发过程中的一些不同

发表于:2012-6-26 09:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Lawson    来源:51Testing软件测试网采编

  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默认包内可见不一样。

  插件的不同点:

  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的格式要求更严格。

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

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号