C#与Vb Java的区别

来源:互联网 发布:4g网络不稳定怎么设置 编辑:程序博客网 时间:2024/05/21 17:46

 

      C#与Java的区别总结如下:

    C#和Java都是比较规范的面相对象的编程语言,vb是基于对象的一种程序设计语言,所以C#语言,与Java语言相似,不同点少,C#和Java与Vb之间的差别多点,但是无论哪种语言,基本的数据类型和运算之间不会有冲突。

 

    下面是对这三种语言关系的总结。

   

一:语法基础

 

   1,运算符

     在C#中有sizeof 运算,在Java和Vb中没有(Java中有instanceof >>>,vb中有>>)。

     sizeof运算符用来返回某种数据类型(值类型)所占用的字节数,用法如下:

    class Program    {        static void Main(string[] args)        {            Console.WriteLine(sizeof(Int32));    //显示int32 类型所占字符数            Console.WriteLine(sizeof(double));   //显示double类型所占字符数        }    }


    运行结果:

 

 

   

  2,数据类型

      C#中有枚举类型,用enum关键字,Java中没有枚举类型,vb中有。

enum Ages{ZhangSan,LiSi,WangWu,aLiu}


 

  3,语句

      C#中特有语句foreach。foreach语句的作用是遍历数组。用法如下:

    class Program    {        static void Main(string[] args)        {                        int[] arr = new int[]{0,1,2,3}; //定义arr数组,并赋值            int even=0,odd=0;              //定义两个变量,并将初值赋为0            foreach (int i in arr)  //遍历arr数组中每一个数            {                if (i % 2 == 0)    //如果数组arr中的元素为偶数                    even++;        //even 变量加1                else               //如果不为偶数                    odd++;         //odd变量加1            }            Console.WriteLine(even);            Console.WriteLine(odd);        }    }


      运行结果:

 

    

 

  4,方法

    在C#中,一个参数在默认情况下是按值传递的,按引用传递的时候,要有关键字ref,Java中也是按值传递和按引用传递,在Vb中则是按值传递和按地址传递,名称不一样,性质一样。

    Vb中的关键字传值为ByVal,传地址为byref。传地址(引用),传递的是值得引用,传递后,指向的还是那个空间;传值,传递的是具体的值,传递后就不再有任何关系啦。

 

  5,C#和Java中个都有包,vb中没有;

    C#中方法以大写字母开头,变量以小写字母开头,Java中方法类似变量,以小写字母开头,类名以大写字母开头,vb中变量名称命名,或者是窗体名称命名的时候,都采用大写字母开头(驼峰式);

    C# Java注释语句一样(/*  */),vb用“’”;

    C#和Java都要有一个标准库来提供输入输出,C#中用Console.ReadLine (),Java中用BufferedReader keyin=new BufferedReadReader(new InputStreamReader(System.in);   System.out.printIn();

 

 

  6,循环

    C#中switch语句后必须用break;java和Vb中可以不用,在Java和vb中都允许为case语句使用“自然下移”语义,即如果当前case 的结果不对应,自动跳转到下一个case。

 

 

二:类

  1, C#和Java中都有class关键字标志的类,为应用类型,且每个类都有访问修饰符(public)。vb中也有类,创建的时候是在模块中,利用类生成器,而在C#和Java中直接定义在一个空间中即可。

 

  2,构造函数

  C#中有构造函数和析构函数,构造函数名称和类名一致,且没有返回值,用来初始化一些值,析构函数用来终止操作,Java中也有构造函数,不同的是在Java中不用定义析构函数,因为Java中存在自动垃圾回收机制。

 

  3,继承

  C#和Java中都有继承,C#中是单一继承,多个继承用接口实现,Java中存在多继承,父类名称间用“,”隔开;

  C#中继承用“:” 如Dog类继承Animal类 class Dog:Animal ,Java中用extends关键字,如A继承B class A extends B

  意义一样,不同的只有关键字。

 

  4,关系

   C#和Java中类间的关系有依赖,关联,组合,聚合。

   依赖关系在类中就是一种实用,A类依赖B类,就是A中使用B类,B类修改直接影响到A类,关系弱

   关联关系在类中就是一种引用,A类关联B类,就是A中引用了B类中的方法,在A类中以属性的形式表示,强依赖

   组合聚合都是整体和部分之间的关系,不同的是组合关系为contain-a (不可分割)聚合关系为has-a(可分割)

 

   在vb中我们经常讨论的是模块,窗体,类模块之间的关系。

    窗体是可视化的窗体,运行的时候展示,模块呢则是代码展示,类模块主要是为了与面向对象挂钩,在类模块中定义的东西,达到了封装的目的,就类似于第三方控件。

 

  还有在这里也体现了作用域,在模块中定义的变量为局部变量,在类模块中定义的变量是全局变量。

  

 

三:异常处理

  C#中,一个方法检测到一个错误条件时,引发异常,如除数为0。实例如下:

    class Program    {        static void Main(string[] args)        {            int result=0;                                   //定义result变量,并赋初值为0            Console.WriteLine("请输入X的值:");            int x = Convert.ToInt32(Console.ReadLine());   //用x 获取键盘输入的值            Console.WriteLine("请输入Y的值:");                        int y = Convert.ToInt32(Console.ReadLine());   //用y 获取键盘输入的值            try            {                result = 24 / (x-1) / (y - 1);             }            catch (Exception e)                           //捕获异常            {                Console.WriteLine(e.Message);             //输出原因            }            Console.WriteLine("结果为{0}", result);       //输出result结果        }    }

  运行结果:

 

 

 

  Java中也有异常处理语句,跟C#语言一样,但vb中如果有异常了,需要我们手动添加异常处理语句。形如:on error goto xx    xx:

 

 

 四:语言和运行过程

  1,解释型语言

    把做好的源程序翻译一句,然后执行一句,直到结束…….执行速度慢,效率低,依赖解释器,跨平台好.

 

  2,编译型语言

  把做好的源程序全部编译成二进制代码的可运行程序…...执行速度快,效率高,依赖编译器,跨平台差

  编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,以后要运行的话就不用重复翻译啦,直接使用编译的结果就行啦。

 

  Java是半编译半解释型语言,C#是编译型语言,Java等的源码先编译成字节码,再由虚拟机“解释”执行字节码。其中Java运行过程为源程序.java --编译器.class--操作系统平台

 

    vb则是解释型语言,它运行前要生成.exe格式的文件,vb6.0版本之前的则是伪编译型语言,最终最终编码不能执行,需要动态链接库去解释执行,vb6.0和vb6.0之后的版本则是直接产生可执行的代码。

 

 

附:程序的执行过程

     1load到内存区

     2,找到main方法开始执行

     3,执行过程中内存管理

           code segment(代码段) 存放代码的方法和函数

           data segment(数据段)静态变量字符串常量

           stack(栈)   局部变量

           heap(堆)    new出来的东西

原创粉丝点击