java与C++的不同

 读书笔记有一些,主要是java在对象编程上与C++的不同语法,整理如下:
      1. 垃圾收集 java具有自动垃圾收集功能,也可显式调用System.gc(),但这只是对解释器(虚拟机)的一条建议,不一定立刻执行。撤销引用:referObject=null。java也有finalize()函数,调用时机是在撤销引用后收回内存前,如static型某类对象计数器,在constructor中加1,在finalizer中减1。
      2. 访问控制 除public,private和protected之外,对于成员还有“不设定”的包访问,同一包下的类可调用未设定访问关键字的变量与方法。public、private做为类访问限定,对于private对象只能是包内引用。
      3. 常量常方法 java用final取代了C++的const,只能在申明(类范围)或构造函数初始化(对象范围),而C++还要放在构造函数初始化列表中。可用final限定方法,final方法相当于private static,不允许覆盖,也不随对象而变化,编译器处理final方法调用时,采用内联的形式,即用过程代码取代调用。 
      4. 子类 写子类时,构造函数里如果没有调用超类构造函数super(arg1,arg2...),将自动调用缺省构造函数(有称无参构造函数))。类似ToString()函数有必要重写,但部分功能又与超类相同,则通过super引用调用,如super.toString()。如果有必要重写finalize()方法,确保最后一句总是super.finalize();以确保调用超类的finalize()方法,而构造函数中超类调用总在第一句。
      5. 覆盖与动态绑定 与C++不同被覆盖方法不需要被标记为抽象(C++的virtual),java运行时自动识别类别(动态绑定),即用超类引用指向子类对象,调用被覆盖方法时,将自动调用子类方法。操作符instanceof用来判定某引指向对象是否属某类型,表达式值为trueOrfalse,使用方式:referObject instanceof ClassName。
      6. 抽象超类 含abstract方法必须被申明为abstract类,该类不能被实例化,但能拥有非abstract方法和实例变量,其子类可以实现该方法,也可以保留抽象方法,保留则必须显示声明为abstract类,注意:abstract方法声明不加{}实现体。
      7. 接口 当抽象类中没有可供继承的实现时,我们就申明其为interface,接口在使用上与抽象类没有区别。接口只包含public abstract方法和public final static数据成员,如果要implements接口,则必须实现其abstract方法,如果仍保留abstract方法,就必须申明abstract类。java中没有C++的多重继承,但可以实现多个接口,用“,”分隔。如可以写一个实现多个事件监听接口的类以处理多个GUI事件。
      8. 内部类 包含于其他类定义中的完整类或无名内部类,一般用于事件处理。内部类类似于其他内部成员,可用public等关键字控制访问,可以调用外部类所有数据、方法(在P367中详述规则),定义无名内部类方式:new 接口/超类名(){}。如:addActionListener( new ActionListener(){actionPerformed(){}};    

你可能感兴趣的:(java,C++,职场,休闲)