zoukankan      html  css  js  c++  java
  • Java&C#语法差别

     

    Java

    C#

     

    主类名与文件名

    必须一致

    可以不一致

    命名空间导入方式

    import关键字

    using关键字

    常量

    final关键字

    Const关键字

    基本数据类型

    C#中有无符号数,Java没有。

    C#中有值类型,且可自己定义值类型的结构体(struct)。
    Java中的基本类型(或叫基元类型)即为值类型,但Java没有结构体,所以不能自定义值类型。
    C#中的值类型(包括所有基本类型)间接继承自Object,有自己的方法可以调用;Java中的值类型(即基本类型)不继承自Object,只是简单的数据,没有方法可以调用。

    C#中int等同于System.Int32,是值类型;bool等同于System.Boolean;等。
    Java中int是基本类型,是值类型,而Integer是引用类型,Integer是int的包装器,int自身没有方法,Integer有一些方法;int与Integer之间可隐式转换(导致装箱和拆箱),但当Integer值为null的时候会在运行时抛出异常。boolean等类似。

    Java中的int与Integer的对应在C#中类似int和Nullable<int>的对应,它们的后者都是前者的包装,且后者可以等于null。但Nullable<int>实际上仍然是值类型的(所以仍然很轻量级),所以从内存上讲C#中int和Object的对应更接近Java的对应一些。C#中Nullable<int>到int的转换必须显式进行,因为Nullable<int>中的值为null时会引发运行时异常。
    其他基本类型与之类似。

    注:

    可以为 null 的类型是 System.Nullable<T> 结构的实例。 可以为 null 的类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。 例如,Nullable<Int32> 读作“可以为 null 的 Int32”,可以将其赋值为 -2147483648 到 2147483647 之间的任意值,也可以将其赋值为 null 值。 可以赋给 Nullable<bool> 的值包括 truefalse 或 null。 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型的功能特别有用。

    初始化

    调用基类构造函数:

    SubClass(){

     super();

    }

    调用基类构造函数:

    SubClass():base(){}

    或者代码中使用base();

    Switch语句

    (1)只能处理int类型或者字符型

    (2)每个case块后写break语句,不然会有穿透问题。

    注:无Goto语句。

    (1)一样

    (2)要求每一个case块或者在块的末尾提供一个break语句,或者用goto转到switch内的其他case标签。

     注:最好不用,不易控制。

    声明数组

    灵活。

    Int[] x={1,2,3};//正确

    Int x[]={1,2,3};//正确

    Int[] x={1,2,3};//正确

    Int x[]={1,2,3};//错误

    面向对象

    完全面向对象

    相同

    继承

    类的单继承;

    可以实现多个接口;

    相同

    多态

    支持某些形式的多态性机制

    相同

    重写

    默认方法都可被重写,派生类和子类方法签名一样时被认为是重写。要声明不能被重写的方法需在方法前加final关键字。重写时可以在方法前添加标注(即C#中的定制特性)@Override,这样一旦此方法找不到被重写的方法时编译器会报错,以防止拼写错误。

    被重写的方法必须添加virtual关键字声明为虚方法,派生类重写子类方法时添加override关键字。

    访问修饰符

    4类

    Public:成员可以从任何代码访问;

    Protected:成员只能从派生类访问;

    Default:默认

    Private:

    Public公有访问。不受任何限制。

    Private私有访问。只限于本类成员访问,子类,实例都不能访问

    Protected保护访问。只限于本类和子类访问,实例不能访问。

    Internal内部访问。只限于本项目内访问,其他不能访问。

    protected internal内部保护访问。只限于本项目或是子类访问,其他不能访问

    内部类

    内部类可以直接访问外部类的实例成员

    C#的内部类不可以直接访问外部类的实例成员;C#的内部类等同于java的静态内部类

    最终类

    final关键字定义的类不能再被派生

    Seale关键字定义的类不能再被派生

    接口

    (1)关键字:interface;

    (2)接口内允许有内部类、静态字段等;

    (1)关键字:interface;

    (2)接口内不允许有内部类、静态字段等;

    内存管理

    由运行时环境管理,使用垃圾收集器

    由运行时环境管理,使用垃圾收集器

    指针

    完全不支持。代之以引用

     

    支持,你只在很少使用的非安全模式下才支持。通常以引用取代指针

    泛型

    Java中泛型实现使用的擦除机制,为类型参数传入类型并不导致新类型出现,即传入了类型参数后在运行时仍然完全不知道类型参数的具体类型,它的目的是为了兼容非泛型(所以可以在泛型和非泛型之间隐式转换,会有编译警告但不会有编译错误,这当然其实并不安全);这同时衍生了一系列问题:不能定义泛型类型参数的数组如T[],不能通过new T()的方式实例化泛型,等。
    Java的泛型不支持值类型(使用的话会被自动包装成引用类型)。

    C#的泛型在类型参数传入类型后会产生一个新类型(虽然CLR的优化机制会使引用类型共享同样的代码),可以在运行时得到类型参数的类型信息。可以定义泛型数组,可以添加约束使其可以new。C#的泛型可以使用值类型(不会被装箱)。

    参数引用传递

    只有值传递

    使用关键字ref:迫使值参数通过引用传递给方法;

     

    使用关键字out:在参数未初始化的情况下,在一个函数中输出多个值;

     

    使用关键字params:自动把参数转为数组;

       

    Ref:

    当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

     

    Out:

    out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。

  • 相关阅读:
    eBay商家五大市场调研工具
    最新Android ADT, SDK, SDK_tool等官方下载说明
    Android——关于ListView控件的使用方法
    Auto CAD的相关问题·绘图单位
    淘宝数据分析之数据分析工具的三个需求层次
    电阻器阻值标识的相关知识
    Android软件开发之ListView 详解
    解决android模拟器划动手势时自动输入字母“c” 的问题
    争辩:关于输出大电流的移动电源给小电流的手机充电的问题
    关于C51的中断函数要注意的几个问题
  • 原文地址:https://www.cnblogs.com/xxuan/p/7306363.html
Copyright © 2011-2022 走看看