java与c++的区别

来源:互联网 发布:java调用webservice 编辑:程序博客网 时间:2024/04/30 03:26

//1.Java中字符串不能多行书写。多行书写用引号隔断,加号相连。  
  //2.Java的标识符可以用美元符号开头。  
  //3.Java中没有无符号变量或无符号常量的概念。所有的变量都是有符号的。  
  //4.Java中变量的字长是固定的。不存在char和wchar之分。  
  //5.Java中变量未初始化就使用将是编译错误。  
  //6.Java中不能把0和非0整数当boolean值用。要使一个整型变量在0和1之间交替变化,不能用非运算,可以这样。int   x=0;x=(x+1)%2;  
            //java的类型检查比C++严格。byte   b=3;b=b-1;是错误的。非运算符(!)只能对boolean数据操作。  
  //7.Java中变量不能嵌套定义,即子块变量名不能与父块变量名同名。但类成员函数中的局部变量可以隐藏类成员变量,即二者可以有相同的名字。  
  //8.Java中没有全局变量和全局函数,相应功能由类中的static成员代替。全局常量加public   static   final标记。  
  //9.Java中函数的参数如果是基本数据类型,使用的是传值调用。其他自定义类型是传地址(句柄)调用。  
  //10.对象的句柄之间赋值,只能让两个句柄指向同一个对象,对象的内存不会被复制。也不存在运算符重载,字符串重载加号是系统实现的特例。没有拷贝构造函数的概念。因此,继承是很单纯和简单的。  
  //11.Java的左移位运算分带符号左移>>和不带符号左移>>>。byte,short,char的移位运算自动提升为int再移位。  
  //12.Java没有goto语句,但有goto保留字。  
  //13.Java数组也是在堆内存中分配的,并且是对象.int[]   intArray   =   new   int[100];   中括号可以写在数组名的前面。       这样是错误:int   a[5];  
                  //奇怪的是,这种堆上创建的数组大小也不可改变。  
  //14.Java中没有真正的多维数组,只有数组的数组,且可能是不规则的矩阵形式。  
              /*  
                int   xx[][];  
                xx=new   int[3][];  
                xx[0]=new   int[10];  
                xx[1]=new   int[7];  
                xx[2]=new   int[8];  
                若是规则的矩阵  
                int   yy[][]=new   int[2][3];*/    
  //15.设有class   Person{/*...*/};在C++中,Person   p1;这就在栈上产生了一个对象,Person   *p1=new   Person;在堆上产生了一个对象。  
            //在Java中,只能在堆上产生对象:Person   p1=new   Person;     代表对象的p1称作句柄,相当于C++中的引用。  
            //Java中句柄要在栈上占一个指针大小的内存,所以Java中的句柄实际上是变相的指针(所以Java比C++更广泛的使用指针)。  
  //16.Java中的成员变量会被自动初始化,函数中的局部变量与C++一样不会被初始化。  
  //17.Java中::操作符用.代替。  
  //18.离开作用域,句柄失效,但它所代表的对象占用的内存没有没有马上回收,而是在之后一个不确定的时间由一个称为垃圾回收器的程序回收。  
  //19.不存在运算符重载,所以没办法用'=='比较两个对象的内容。只能在对象中定义equals方法进行比较。用'=='比较两个句柄,相当于比较两个对象  
              //的指针,不会比较两个对象的内容。  
  //20.不小心把类的构造函数写了返回值,Java会把它当成普通成员函数,C++会报错。  
  //21.Java中类成员变量定义时可以附带给一个初始值。class   a{private   int   a=10;},但构造函数中的赋值会覆盖这个值。  
  //22.Java可以在一个构造方法中用this关键字调用另一个重载的构造方法。  
  //23.finalize方法,类似C++的析构函数。由垃圾回收器调用,但不一定会总是被调用。System.gc()可以启动垃圾回收器。  
  //24.Java中有static代码块的概念,只有在类第一次加载时被调用。即在第一次在代码中涉及类名时被调用   。  
  //25.Java用extends实现继承。Java只支持单继承,但可以同时实现多接口。所有的继承都相当于C++中的public继承。Java子类的函数不会隐藏基类的同名不同参的函数。  
            //没有virtual关键字,但所有的函数天生具有多态性。访问控制增加default型,具有同一包访问权限。  
  //26.Java中子类用super调用父类的构造函数。  
  //27.变量加final限定是常量,方法加final限定子类中不能再覆盖改写,类加final标记不能被继承。函数形参加final,函数体中不能修改该值,相当于C++中加const限定。  
  //28.Java中的成员函数如果前面加abstract,没有函数体,而用分号结束,就是抽象方法,而在C++中是一个函数申明后面跟=0。  
              //有抽象方法的类为抽象类必须加abstract限定。  
  //29.要throw异常的函数括号后要跟throws   Exception,throw的异常对象必须是Exception的子类对象,且使用有throw的函数必须try{}catch{}。Java因为封装了很多异常类,处理异常绝对比C++方便易用。  
  //30.finally代码块不论是否发生异常都会执行。即使try块有return语句且没发生异常。但若有System.exit(0);被执行,finally语句块不会被执行。  
  //31.Java用implements关键字实现接口   。用interface定义接口。所谓接口,就是类中的所有方法都是抽象的。接口中只能定义常量和抽象方法,常量的public   static   final可以省写。  
          //接口之间也可以用extends关键字继承,实现部分接口的类是抽象类,使用implements关键字。接口的方法默认是public的。  
          //  
  //32.Java用synchronized(任意对象){}实现线程同步。或者synchronized限定函数。  
   
  //33.Java有instanceof关键字判断一个类是否实现某个接口,也用它判断一个对象是否属于某个类   。  
  //34.Java的所有类都继承自Object类。对象间的比较要覆盖Object类的equals方法实现。  
  //35.Java可以在函数调用时的参数上定义匿名内部类。  
  //36.Java提供条理清晰结构分明的档案组织方式:package   import;  
                    //拥有一个优秀,涵盖面广,扩充性强的Java   Libraries.  
  //                     java   class   fields(侯捷译为栏位),C++称为data   member  
  //java在使用集合类时也可能会有内存泄漏。  
  //37.Java的类中没有黙认无参构造函数也可以创建对象数组。如:  
  class   A  
  {  
  public   A(int   a){}  
  }  
  class   test  
  {  
  A[]   a=new   A[20];  
  }

原创粉丝点击