zoukankan      html  css  js  c++  java
  • C#和Java的区别

    最开始时微软公司将Java当做一种能解决C和C++中存在的问题的语言,并不在意,并继续维持和培训着其C和C++技术和编程人员。接下来不幸的是,正当微软尽力在Visual J++基础上拓展Java功能,并使之与Windows操作系统紧密结合在一起的时候,Sun公司对微软提出法律诉讼说其违反了许可证协议中的条款,最终的结果是微软公司不得不停止其Visual J++产品的开发。(微软公司仍然销售Visual J++,但是从1998年10月以来就没有新的版本发布,并且在.Net平台上也没有Visual J++的位置了)接下来的事情就很清楚了,微软公司开发了C#语言。接下来的一部分将讨论C#与Java的相似性。
      C#与Java的区别
      C#最引人的地方是它与Java的区别而不是其相似性。下面主要来介绍C#区别于Java的不同的运行特点及Java完全没有的特点。
      中间语言
      当MSIL被编译成最终的机器码时,微软公司在如何选择上是非常灵活的。微软公司很谨慎的对外宣称说MSIL不是解释型的,而是被编译成机器码。因为开发人员都有这样一个观念:Java程序天生就比C程序运行慢,所以这暗示着基于MSIL的程序优于解释型的Java字节码。当然,既然C#和其它MSIL产品编译器还未发布,那么这一点就还未证明,但是Java无处不在的即时编译器使得C#和Java在效能上是一样的。象“C#是编译型的,Java是解释型的”这样话只是销售中的技巧。Java的字节码和MSIL码都是的类似汇编的中间语言,在运行时执行这些中间码。
      与COM的整合
      对于基于Windows的C#开发人员来说,最大的收获是对COM的无损整合,COM是微软Win32的组件技术。实际上,任何一种.Net体系结构上的语言最终都可能去写COM的客户端和服务器端程序。用C#编写的类也会作为COM组件的子类;结果类(resulting class)也能作为COM组件使用,并作为COM组件的子类。
      微软公司的目标是使越来越多的语言都能访问组件,并使这些组件能整合到.Net体系结构中。已有几个厂商开始着手开发支持.Net功能的编程语言,如COBOL和Haskell。开发人员能选择不同的语言解决不同问题,更重要的是,开发人员不必为采用.Net体系结构而必须学习新语言,可以选择一种他们熟悉的语言。

      总结
      本文的第一、二部分对C#做了一肤浅的总体介绍,主要是其产生动机及与Java的相似性。第三部分则涵概了C#的语言特点。用范例说明了C#与Java两者在相似性外,它们又是非常不同的,有许多细微的语义和设计区别,适合不同的技 术和市场环境,又谈到了微软公司对C#进行标准化方面的尝试,及其对Java的影响。
    c#与java的区别

    1.属性:
    java中定义和访问均要用get和set方法,可以不成对出现。
    c#中是真正的属性,定义时get和set必须同时出现,房问时用.号即可。不用get,set

    2.对象索引
    就是对象数组
    public Story this [int index] {

    3.C#中,不用任何范围修饰符时,默认的是protect,因而不能在类外被访问.

    4.因为JAVA规定,在一个文件中只能有一个public类,而且这个类的名称必须与文件名一模一样,这是一个区别

    5.在C#中,它是以Main方法来定位入口的.如果一个程序中没有一个名为Main的方法,就会出"找不到入口的错误".不要把Main写成main哟

    6.C#预定义的简单数据类型比Java多。例如,C#有unit,即无符号整数

    7.忘掉Java中的static final修饰符。在C#中,常量可以用const关键词声明
    C#的设计者还增加了readonly关键词,readonly域只能通过初始化器或类的构造函数设置
    8.公用类的入口点:c#是可以对Main进行重载(java中是main),允许有int返回值和空参数的Main

    9.在Java中,switch语句只能处理整数。但C#中的switch语句不同,它还能够处理字符变量。请考虑下面用switch语句处理字符串变量的C#代码

    10.C#没有>>>移位操作符

    11.goto关键词:
    Java不用goto关键词。在C#中,goto允许你转到指定的标签。不过,C#以特别谨慎的态度对待goto,比如它不允许goto转入到语句块的内部。在Java中,你可以用带标签的语句加上break或continue取代C#中的goto。

    12.int[] x = { 0, 1, 2, 3 };
    int x[] = { 0, 1, 2, 3 };
    但在C#中,只有第一行代码合法,[]不能放到变量名字之后。

    13.与Java不同的是,C#允许为名称空间或者名称空间中的类指定别名:
    using TheConsole = System.Console;

    14.在Java中,包的名字同时也是实际存在的实体,它决定了放置.java文件的目录结构。在C#中,物理的包和逻辑的名称之间是完全分离的
    .NET中包的实体称为程序集(Assembly)。每一个程序集包含一个manifest结构。manifest列举程序集所包含的文件,控制哪些类型和资源被显露到程序集之外,并把对这些类型和资源的引用映射到包含这些类型与资源的文件。程序集是自包含的,一个程序集可以放置到单一的文件之内,也可以分割成多个文件。.NET的这种封装机制解决了DLL文件所面临的问题,即臭名昭著的DLL Hell问题。

    15.在Java中,java.lang包是默认的包,C#中不存在默认的包

    16.C#中的访问修饰符与Java中的基本对应,但多出了一个internal。简而言之,C#有5种类型的可访问性,如下所示:

    public:成员可以从任何代码访问。
    protected:成员只能从派生类访问。
    internal:成员只能从同一程序集的内部访问。
    protected internal:成员只能从同一程序集内的派生类访问。
    private:成员只能在当前类的内部访问。

    17.由于C#中不存在final关键词,如果想要某个类不再被派生,你可以使用sealed关键词

    18.与Java不同,C#中的接口不能包含域(Field)。
    另外还要注意,在C#中,接口内的所有方法默认都是公用方法。在Java中,方法声明可以带有public修饰符(即使这并非必要),但在C#中,显式为接口的方法指定public修饰符是非法的。例如,下面的C#接口将产生一个编译错误。

    19.C#中的is操作符与Java中的instanceof操作符一样,两者都可以用来测试某个对象的实例是否属于特定的类型。在Java中没有与C#中的as操作符等价的操作符。as操作符与is操作符非常相似,但它更富有“进取心”:如果类型正确的话,as操作符会尝试把被测试的对象引用转换成目标类型;否则,它把变量引用设置成null。

    20.C#仍旧保留了C++的内存手工管理方法,它适合在速度极端重要的场合使用,而在Java中这是不允许的

    21.在C#中,所有的异常都从一个名为Exception的类派生

    22.枚举器即enum类型(java无),把它作为一个变量值的类型使用,从而把变量可能的取值范围限制为枚举器中出现的值。

    23.结构(Struct)与类很相似,而结构是一种值类型,它存储在栈中或者是嵌入式的,结构可以实现接口,可以象类一样拥有成员,但结构不支持继承

    24.属性声明语法的第一部分与域声明很相似,第二部分包括一个set过程和/或一个get过程

    25.传值方式:
    在java中简单数据类型的值传参时,都以传值方式;
    在c#中如果加ref则会以引用的方式传值(方法内部改变该参数,则外部变量一起跟着变);
    加out与ref基本相同,但out不要求参数一定要初始化.

    26.c#保留了指针。unsafe

    27.代理:代理(delegate)可以看作C++或者其他语言中的函数指针
    代理用来封装可调用方法。你可以在类里面编写方法并在该方法上创建代理,此后这个代理就可以被传递到第二个方法。这样,第二个方法就可以调用第一个方法。
    代理是从公共基类System.Delegate派生的引用类型。定义和使用代理包括三个步骤:声明,创建实例,调用。代理用delegate声明语法声明。
  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/seerlin/p/1005537.html
Copyright © 2011-2022 走看看