JAVA和.net的区别

   我们目前对.NET的理解大部分可以归纳为:起初它是Java平台(注意是平台,不要跟Java语言搞混淆)的一个克隆品,后来慢慢演变,有了自己的特性。由于Java平台最显著的特点就是“平台独立性”(或者说不知道谁发明的Write once,Run anywhere这个话)。理论上,你可以写一个程序编译完后,跑在任何一个安装有JVM的操作系统上。大部分人认为.NET的出现是效仿Sun公司的这个伟大的概念——平台独立性,从而与Java抗衡。再后来又有一些人不知道从哪得出的结论说,就算有像Mono这样的非Windows平台.NET CLR,也有好多.NET程序不能移植到其他操作系统中,比如Winform几乎不能通过Mono移植到Linux上去,因此得出一个骇人听闻的结论:微软连模仿都没模仿完整,居然是伪跨平台。

  以上就是目前我见过的最多的结论:.NET致命的弱点,就是它不是真正的跨平台。为此,我有以下几点说明:

  (1).NET平台出现的意义不是支持跨平台,它出现的目的只是优化传统的Windows开发模式,使Windows开发更加方便快捷。它解决了COM时代的Dll Hell问题(.Net程序集版本控制),集成了多种语言(方便各种各样的程序员),每种语言编写的组件(程序集)之间可以毫无障碍地通讯,集合ob ject-Oriented和Component-Oriented于一体,你可以从一个组件(dll)中派生出一个新的类型而不需要该类型的所有源码(这个UnManaged时代不可能有),真正的实现了二进制兼容性(你改动程序集中的某一个公开成员,如果使用这个程序集的客户端程序没有使用到这个公开成员,那么客户端完全不需要重新编译),提供C++中没有的内存管理,支持异常处理等等。严格来说,微软发布.NET的第一天就是为了它的Windows,就没打算让你写的程序跑在其他操作系统之上(微软到目前为止还没有发布官方的非Windows平台的.NET CLR)。

  (2)再说Java平台和.NET两者追求的目标,前者从出现开始就认为:在互联网世界中,我要让一种语言跑在任何一个操作系统中;而后者则认为:在互联网世界中,我要让所有的语言都跑在同一个操作系统中(Windows)。两个平台从一开始设计的目的就不一样。

  (3)两者强调的重点不同:


  如上图,红色部分都是其他人扩展出来的功能。

  (4)上面3中所述,两者平台结构类似,我不清楚微软到底有没有剽窃Java,但可以肯定的是如果两者东家原意,两个平台都是可以做到“跨平台”和“支持多语言”的。 至于为什么说使用Mono还不能把有些.NET程序移植到Linux,这个很容易解释,微软本来就没打算将.NET程序移植到其他平台,.NET中包含的一些丰富框架都是与Windows紧密相关的,你使用了这些框架,是很难再把它们翻译成非Windows平台中可以执行的代码。而且,Java也并不是完全的跨平台,跟你开发实际用到的框架有关。出现以上不能移植的情况,关键有两个地方,一个是你开发时使用的框架,一个是CLR(或者JVM),要看后者到底有没有能力把前者翻译成对应平台的可执行代码。

  综上,两个平台的侧重点不同,你觉得比较苹果和香蕉哪个好吃有用吗?

时间: 2024-10-29 00:32:14

JAVA和.net的区别的相关文章

编程语言 c++应用方向-C++,VB,Java等编程语言的区别及应用领域

问题描述 C++,VB,Java等编程语言的区别及应用领域 作为一个新手,我想知道Visual C++和Visual Basic,Java的区别,我学的是C++,但是不知道用C++可以做些什么,希望有高手指明一下方向. 解决方案 我个人认为,C更接近底层设备,也就是说一般c用来和硬件打交道,java更适合一些应用程序的编写,学习C++其实就是从C到java的一个过渡!面向过程编程到面向对象编程的过度! 解决方案二: c++语言是面向对象的编程语言,它认为世间一切都是由对象(object)组装起来

java equals和==的区别详解_java

大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中八大基本类型中自动变量的字面值(自动变量就是用int a = 1;这种形式来定义的变量).如果是自动变量比较值的话肯定是用==来比较,因为equals()是一个方法,所以必须由对象调用才可以用于比较.而自动变量既不是类的实例也不是类的引用所以不能用equals()方法. 2.boolean tem

浅谈java中Math.random()与java.util.random()的区别_java

今天突然想起来,java产生随机数的问题,上机试了一下,找到了一点区别,在这里总结一下: 直接调用Math.random()是产生一个[0,1)之间的随机数, 如果用 java.util.Random random=new Random();random.nextInt() 这样产生一个长整型的随机数并且与上一次是一样的,如果过一会再产生就不会一样了,例如: for (int i = 0; i < 10; i++) { Random random=new Random(); Thread.sle

java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别

以前一直没有注意过这个问题,前两天机缘巧合上网查了一下,然后自己测试验证了一下.虽然网上说法很多,但是关于NoClassDefFoundError并没有给出一个样例,所以一直无法理解,索性自己验证了一下,收获还不少. ClassNotFoundException ClassNotFoundException这个错误,比较常见也好理解. 原因:就是找不到指定的class. 常见的场景就是: 1 调用class的forName方法时,找不到指定的类 2 ClassLoader 中的 findSyst

Java application和applet区别

下面哪一项不是Java application和applet的不同点? A.applet中不再需要main()方法 B.Java applet有Web browser执行 C.执行方式不同 D.applet由若干个类构成 答案是:D 以前在学习java的时候听说过这个东西,只是知道这个东西不在运用了,不过这个东西到底是什么不知道,今天看到这样的一个问题,我开始研究了一下这个applet.下面是在网上搜集到的信息: =========================================

C和CPP的区别 &amp;amp; C++,Java and Python的区别

今天在论坛上看到两个学神讨论C++的优劣性引申出来的各种问题,深深感觉自己差距很大,现就部分问题做个小的总结. C和CPP的区别: 1. C没有bool类型.布尔类型是int.0是假,非0是真.   2. C里字符常量(如'a'.'\n'.'\0'等)是int型,而C++里是char型.但这不影响使用.   3. 没有引用类型的变量,一般使用指针.函数的参数也不能是引用类型,想要副作用请用指针.   4. 没有模版.可以用宏代替.但是C99开始支持inline,用法和C++一样. (C99 is

Java 接口和抽象类区别

1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了.当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用 .面对对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用. 说到了抽象,我就不能不提到曾让我头痛的Java接口和Java抽象类了,这也是本文我想说的重点. 既然面向对象设计的重点在于

java与javascript的区别

谈到JavaScript人们往往会想起Java了,虽然JavaScript与Java有紧密的联系,Java 是一种比 JavaScript 更复杂 许多的程式语言,而 JavaScript 则是相当容易了解的语言.JavaScript 创作者可以不那么注重程式技巧,所以许多 Java 的特性在 Java Script 中并不支援,同时两者却是两个公司开发的不同的两个产品.Java是SUN公司推出的新一代面向对象的程序设计语言,特别适合于Internet应用程序开发:而JavaScript是Net

[Java] equals与==的区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! == 是一个运算符.  equals则是string对象的方法. Java中 值类型 是存储在内存中的栈中.  而引用类型在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中.所以字符串的内容相同,引用地址不一定相同,有可能创建了多个对象. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同. equals将此字符串与指定的对象比较.当且仅当该参数不为 null,并且是与此对象