admin 管理员组文章数量: 1184232
2024年3月19日发(作者:oracle最全教程pdf)
Java和.NET的区别以及各自的优势
一、Java
是简单的
Java与C++极为相似,但却简单得多。高级编程语言的所有特性中,不是绝对需要的
都已删去了。例如,Java没有算符过载、标题文件、预处理、指针运算、结构、联合、多
维数组、模板及隐式类型变换。如果你知道一点C、C++或Pascal,你很快就会驾驭Java。
这里是一个简单的JavaHelloWorld程序:
publicclassHelloInternet{
publicstaticvoidmain(Stringargv[]){
n(“HelloIn-ternet!”)
}
}
是面向对象的
Java是一种面向对象的编程语言。除了简单的类型,如数字和布尔算子之外,Java中
的大部分都是对象。正如任何面向对象的语言一样,Java代码也按类组织。每个类定义一
组规定对象行为的方法。一个类可以继承另一个类的行为。在类的根层次上,通常是类对
象。
Java支持单继承类层次结构。这就是说,每个类一次只能继承一个别的类。有些语言
允许多继承性,但这可能造成混乱,使语言不必要地复杂化。例如,难以想像,一个对象
会继承两个完全不同的类的行为。
Java还支持摘要类的接口。这允许编程人员先定义接口的方法,而不必急于马上确定
方法的实现。一个类可以施行多个接口,从而具有真正多继承性的许多优点。一个对象也
可实施任意数量的接口。Java接口与IDL接口极其相似。很容易建立IDLJ编译器。这就
是说,Java可用于CORBA对象系统来建立分布式对象系统。鉴于在许多计算机系统中都
采用IDL接口和CORBA对象系统,这种兼容性是重要的。
是静态类型的
在一个Java程序中,必须定义所用对象(数字、字符、数组等)的类型。这有助于编程
人员很快发现问题,因为当程序编译时可以检测类型错误。不过,Java系统中的对象也有
动态类型。要求一个对象为动态类型往往是可能的,所以编程人员写的程序可以对不同类
型的对象做不同的事。
是编译型的
当运行Java程序时,它首先被编译成字节代码。字节代码非常类似于机器指令,所以
Java程序非常高效。然而,字节代码并不专对一种特定的机器,所以Java程序无需重新
编译便可在众多不同的计算机上执行。
Java源程序被编译成类文件,它相当于程序的字节代码表现。在一个Java类文件中,
所有对方法及实例变量的参照均按名进行,并在第一次执行代码时加以分辨。这使得代码
更通用,更不易受修改的影响,而仍具高效。
是体系结构中立的
Java语言对每种计算机都一样。比如,简单的类型都是不变的:整数总是32位,长
整数总是64位。令人奇怪的是,诸如C及C++等时编程语言却不是这样。由于这些语言
定义如此自由,每种编译器及开发环境便各有不同了,这使程序的移植成为讨厌的问题。
Java程序的移植却很容易,而且不需要进行重新编译。
是健全的
Java程序不可能造成计算机崩溃。Java系统仔细检测对内存的每次访问,确认它是合
法的,而且不致引起任何问题。不过,即使Java程序也可能有错误。如果出现某种出乎意
料之事,程序不会崩溃,而把该例外抛弃。程序会发现这类例外,并加以处理。传统的程
序可以访问计算机的全部内存。程序可能(无意识地)修改内存中的任何值,这就会造成问
题。Java程序只能访问内存中允许它们访问的那些部分,所以Java程序不可能修改不拟
修改的值。
是小巧的
由于Java的设计是要在小的计算机上运行,作为一种编程语言来说其系统是相对较小
的。它能有效地在4MB以上RAM的PC机上运行。Java翻译器只占用几百KB。这种翻
译器对Java的平台无关性和可移植性是可靠的。由于Java很小,它对内存很小的计算机,
如基于Java的PC机,以及电视机、烤箱、电话机及家用计算机等,是很理想的。
是多线程的
Java程序可以执行一个以上的线程。比如,它可以在一个线程中完成某一耗时的计算,
而其它线程与用户进行交互对话。所以用户不必停止工作,等待Java程序完成耗时的计算。
在多线程环境中的编程通常是困难的,因为许多东西可能同时出现。但是,Java提供
了易于使用的同步特性,使编程更为方便。
Java线程通常被映射为实际的操作系统线程,只要底层操作系统支持这种映射。因此,
用Java写的应用程序可说是“MP热”。这就是说,如果它们在多处理器机器上运行,它
们更将表现不凡。
是可收集无用的存储单元的
用C及C++写软件的编程人员必须仔细跟踪所用的内存块。当一个块不再使用时,他
们务必让程序释放它,从而方可再用。在大的项目中,这可能很困难,并往往成为出错和
内存不足的根源。在Java的情况下,编程人员不必为内存管理操心。Java系统有一个叫
做“无用单元收集器”的内置程序,它扫描内存,并自动释放那些不再使用的内存块。
是快速的
Java比典型的脚本语言大为有效,但它比C慢20倍。这对大多数应用是可接受的。
不久的将来,代码生成器就可供利用了,这将使Java程序几近于用C或C++编写的程序
那么快。
是安全的
Java程序没有指针,而且象这样的字节代码程序强在类型上,所以在执行之前它可能
验证Java程序。被验证的Java程序得以保证不突破Java语言的任何限制,而且可以安全
地执行。Java字节代码验证被Web浏览器用来确保小程序不含病毒。
是可扩展的
Java程序可与用其它语言编写的现存程序库连接。由于Java数据结构与C的数据结
构的类型极为相似,这是相当方便的。最大的问题在于,现有多线程程序库为数不多。Java
程序可以声明某些方法是内部的,然后,把这些内部方法映射成软件库所定义的功能,从
而动态地链接到虚拟机。
二、.NET
1. 标准集成:XML、SOAP及其它
过去,微软的体系结构建立在COM/DCOM基础上,COM/DCOM是进程间通信的
二进制标准。虽然这个标准本身没有什么失误,但是它与微软以外的领域格格不入。也就
是说,这个标准成了实现与其它软件平台互操作的瓶颈。
除此之外,数据也是一个问题。虽然ADO简化了数据访问,但是把数据从一个地方
传送到另外一个地方就成了问题。ADORecordset(记录集)对象是一个存储了数据的二
进制结构,而这种二进制格式对于非微软的平台没有任何意义。
.Net弥补了这些缺陷,因为它完全基于标准。比如,数据用XML的格式通过进程边
界,而这个数据有一个到XSD的连接,所以任何客户端都可以正确地转化数据。
SOAP基于XML,用于与Web服务的通信。集成SOAP以后,不管客户端运行的是
不是微软的操作系统,都可以实现简单的可编程访问。
2. 简化应用
COM所面临的一个头痛的问题就是应用。COM利用Windows注册表来定位机器上
的组件。这个想法是不错的:每个注册的组件只有一个实例,所有的应用程序都使用相同
的版本。COM具有向后兼容性,也就是说新版本兼容老版本,但是开发人员可能会破坏
这种兼容性。
.Net则采用了不同的方法:它根本就没有使用注册表。相反,微软的建议是每个应用
程序使用自己局部的组件(在.Net称为“assembly”)。利用这种方法,用于应用程序Foo
的AssemblyX如果发生变化,AssemblyX的ApplicationBar不会受到任何影响。这种
方法听起来好象以前一台机器上同一个DLL的多个拷贝,的确是这样。不过你不会遇到应
用程序查找WindowsSystem32目录的问题。
由于.Net不使用注册表,很多应用都可以用简单的拷贝命令来完成,通常没有必要开
发安装程序。此外,应用程序不会琐定assembly,所以升级DLL的时候不必关闭应用程
序。
3. Web服务支持
在流行的Web服务方面,微软发挥着重要的作用,而.Net为开发Web服务带来了前
所未有的便利。用Notepad就可以建立简单的Web服务,甚至不必利用编译器,只要对
它们进行简单的调用即可,因为.Net会对它们进行编译,甚至提供一个测试页供用户检验
其功能。.Net拥有所有必需的渠道,可以生成用户所需的所有文件,比如WSDL文件。
.Net也是一个聪明的Web服务使用者:只要设置了指向某个Web服务的索引,你就
可以把它当作本地的assembly。你可以获得完整的Intel许可和功能实现帮助。
Web服务对于发送数据是非常重要的,感谢,Web服务可以利用简单或者
复杂的数据,并以XML格式把它们发送到任何客户端,最后设置一个链接,指回到一个描
述数据模式的XSD。
4. 用于所有.Net语言的标准工具集
最终,你会拥有一个适用于所有语言的集成工具集。你会拥有一个统一的IDE、调试
工具以及其它类似的工具。因此,其它公司可以把他们的语言嵌入IDE环境,并获得.Net
工具所有的支持。比如富士通开发了,它已经直接集成到IDE中,因此可
以用COBOL编写Web服务和Windows应用并获得微软提供的调试和profiling(监管)
工具。
.Net是个开放的架构,所以其它厂商也可以提供自己的工具。比如Borland,该公司
已经宣布其下一版Delphi将具有建立.Net应用的功能,同时它也保证,Delphi会拥有自
己的IDE,不会嵌入。
5. 对移动设备的支持
发布不久,微软就推出了移动Internet工具包(Microsoft Mobile
Internet Toolkit,MMIT),以便用.Net构建移动应用。该工具包提供了可视化功能,你
可以直观地拖动和下拉面向移动设备的窗体和控件。该工具包有利于正确书写标记语言(比
如WML、WAP等等)。
.Net简化架构(.Net Compact Framework)不久就会面市,它是.Net架构的缩略
版,设计用于PocketPC设备。有了这个架构,开发人员就可以开发出丰富的PocketPC
计算机应用。你可以编写一个运行于小型设备上的应用,比如用于PocketPC设备或者具
有Web功能的手机。事实上,MMIT包含了很多仿真程序,它们使用了真正为这类设备
编写的ROM代码,所以在你的应用程序投入使用之前,可以首先测试其用于此类设备时
的性能。
6. 代码管理
.Net管理用户的代码,从很多方面看,这一点都是很重要的,比如减少bug以及构建
更多可扩展的应用。.Net可以处理以下操作:内存分配和回收,进程及线程的创建和终止,
以及运行代码的访问许可。
VB开发人员先前面临的问题——比如内存管理、线程和进程创建——现在都可以
由.Net来处理。而C++程序员可以转向C#,.Net代替他们处理这些操作后,内存泄露和
其它bug出现的可能性将大大减少。拥有了被管理的代码,你可以访问.Net所有跨语言的
能力。
7. 平台独立
虽然.Net是为微软的操作系统创建的,但是微软的确为ECMA标准委员会发布了一部
分框架和C#。比如,Monoproject实现了Linux的.Net,包括架构和C#编译器。这意味
着很多应用(特别是基于Web的应用)一次编写完成后就可以运行于多种平台上。
8. 充足的学习资源
.Net的学习曲线非常重要,可能.Net的方面的书要比其它所有编程技术的书都多。此
外,微软和第三方团体开设了很多课程,可以让开发人员很快就上手。最后,很多网站为
开发人员员学习.Net提供了技术和指导。
9. 现代化语言
和C#都是现代化的语言。它们完全是面向对象的,设计的时候消除了很多VB
和C++的矛盾。这两种语言使用了多层式架构(n-tier),这是一种基于组件的方法。
比如,C#取消了指针和其它一些结构,它们曾经给C++程序员(特别是新手)带来
很多严重的问题。代码由.Net架构管理后,和C#都从中受益。这个架构还包括一
些基础的对象,它们是开发多线程、支持XML等应用所必须的。
10. 跨语言标准基本类型
VB开发人员曾经面临一个致命的问题:VB中的字符串与C++中的字符串不同,所以
调用WindowsAPI函数的时候会出现一些问题。.Net确定了所有类型的标准定义,所以
VB中的字符串和C#中的字符串相同,也和中的字符串相同。这意味着你
再也不必担心语言A中的整型数据是32位而语言B中只有16位。你可以确信不同语言
的数据类型都相同,可以更好地进行跨语言集成。
优点多于缺点
.Net具有很多明显的优点,可以提高开发人员的效率,减少bug,加快应用开发并简
化使用。IT人员对.Net保持了应有的警惕,因为它毕竟还是个新事物,需要有一个比较艰
难的学习曲线。但是对于大多数组织而言,其优点远远多于缺点。有了.Net,你可以在未
来的开发项目中赢得更高的生产力。
版权声明:本文标题:Java和.NET的区别以及各自的优势 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1710852228a576296.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论