在本文中我采用JAVA与C++对照学习的方式,罗列了一些自己的总结,希望对大家有帮助


Java与C++不同点:

   (1)、java属于解释型语言,但是它还是需要编译,但它并不是将源代码编译成二进制代码,而是编译为字节码,然后解释执行字节码,因此具有很好的跨平台性。这与C++的编译型(编译成二进制代码)语言是不同的。

   (2)、在Java中不区别定义与声明,C++中需要使用extern来声明一个已经定义过的变量。并且在Java中如果变量没有初始化,就直接使用的话,程序在编译时就会报错,而C++中只会在执行时给出一个随机值。

      (3)、在Java中const成为保留关键字,并不使用它,在定义一个常量的时候,Java中使用final。而C++中可以使用const、#define、enum来定义常量。final修饰的表示只能够被赋值一次,赋值后便不可更改。

   (4)、在Java中goto也被作为保留关键字,当需要跳出循环时,可以使用break、continue都可以用来带标签,而跳出当前循环体。而在C++中break与continue不具备此功能。

   (5)、在Java中不能在嵌套的两个块中声明名字相同的变量与常量,而在C++中不存在此限制,C++中会依据不同的块,给予变量不同的作用范围与生命周期。

   (6)、Java中没有运算符重载的功能,但是我们在使用“+”来连接字符串的时候,这确实又体现了运算符的重载,可并不能因此就说它具有运算符重载的功能。而运算符重载是C++的一大特点与难点。

   (7)、Java与C++的内联机制不同,C++中使用inline关键字来声明内联函数,而java是否内联,是交由虚拟机来决定的。

   (8)、Java中,一个构造器可调用另外一个构造器,使用this(...)与super(...)C++中是不能够这样的。并且Java的垃圾回收是由Java虚拟机来进行操作,因此它没有析构器。这与C++需要手动回收资源也是不同的。

   (9)、Java与C++的继承也是有些不同,最大的区别是Java不支持多继承,只能够单继承。Java中继承使用的关键字是extends代替了C++中的“:”,并且java中的所有继承都是public的,而C++可以设置多种权限的继承。

   (10)、Java中一个类只能继承一个父类,但是可以实现多个接口,它提供了接口的概念,而C++中没有此概念,C++中使用纯虚基类实现了接口的功能。但是二者是有很大差别的。

   (11)、Java中的数组与C++的数组也是不尽相同的。在Java中比如定义一个数组

int[] a;首先是在栈区分配了一段空间,名字为a,当再次使用a = new int[10];的时候,它会在堆区分配10个位置,名字分别是a[0]、a[1]...这与C++中是有很大差别的,C++中一维数组分配的位置都在栈区,并且可以通过a++这种方式来遍历数组,它定义数组也不需要new,可以直接给出数组的大小。

   (12)、在参数传递方面,二者也略有不同,java中都是值传递,而C++中有值传递与引用传递(指针传递实质上也是值传递,只不过传的是地址)。由于java中都是值传递,它具备以下几个特点:①一个方法不能修改一个基本数据类型的参数(即数值型与布尔型);②一个方法可以改变一个对象参数的状态,③一个方法不能让对象参数引用一个新的对象。

   Java的特性:

   (1)、Java具有两大类的数据类型,分别是:8种基本数据类型,对象引用数据类型。其中Java将布尔类型,原来在C++中false就是0,true就是1。Java中直接定义为false与true。

   (2)、Java中String的字符串为不可变字符串,StringBuffer为可变字符串,也就是String的值一旦被创建它就不可被修改。因为这个类前面使用了final来修饰。

      (3)、在一个Java源文件中,只能有一个公有类(public),但可以有任意数目的非公有类。如果在其中此时再定义接口,接口的属性也只能是默认,不能是public。

      (4)、在类中的静态方法,没有this指针,因为它是属于一个类的,而不是某个对象。在静态方法中不能直接访问非静态变量(可通过调用方法来访问变量),但是可以直接访问本类中的静态变量。非静态方法可以直接访问静态变量。

      (5)、Java中的super与this的区别:super不是一个对象的引用,不能将super赋给另外一个对象的变量,它只是一个指示编译器调用父类方法的特有关键字。而this是一个对象的引用,它指向它自身,同一个类不同对象拥有不同的this。

      (6)、关于final的几个重点:final定义的类,不能够被继承。如果在某个类中(非final类)某个方法使用了final来修饰,那么在子类中不能使用重写这个方法。final类中所有方法自动地成为final方法,但是其中的变量并不是final的。

      (7)、在Java中有一个关键字,instanceof来判断一个类B是否属于类A的子类,常常用于在类型转换时,进行检查类的匹配问题。

      (8)、不能构造接口对象,但是可以声明接口变量;不能构造抽象类对象,但是可以声明抽象类变量。

      (9)、接口的修饰符只能为默认的default或者public,它其中的所有方法都是抽象的,被自动设为public,变量自动设为public static final。

      (10)、Java中抽象类与接口的差别:①抽象类用class来修饰,接口用interface来修饰,抽象类可以继承,接口也可以继承;②一个类可以实现多个接口,但是只能继承一个抽象类;③抽象类可以有非抽象的方法,继承它的子类可以对这些方法重写;但是接口中的方法全部为抽象方法,实现这个接口的类,必须全部用重写接口中的方法;④在抽象类中定义的方法,他们的修饰符可有这些选择:public protected default private。而接口中的方法全部是public的;⑤抽象类可以有构造函数,而接口没有构造器。


RunTimeException




IoException




Error




Exception




Throwable


      (11)、java中的异常可用这个图来表示:




异常处理用try{}catch{}来扑捉,一般在catch末尾finally来释放掉一些稀有资源,不管释放扑捉到异常,finally中的语句一定会被执行的。一般来说,对于异常也可不出,某个方法有异常,在调用它的方法中继续用thows继续抛出异常,让上一级处理。一般规定除RunTimeException以外其他的异常,在程序中出现时,都必须处理。