Thinking in java:对比C++和java

    技术2022-05-19  24

    附录B 对比C++和java

    1.java比C慢约20倍。

    2.所有东西都必须置入一个类中,要用全局函数,可将static方法和数据成员置入一个类。

    3.类定义结尾没有分号。没有类声明,只有类定义。

    4.主类型(primitive type)boolean、char...

    条件表达式必须是boolean,char是16位Unicode字符,静态字符串会自动转换成String对象。

    5.>>>代表逻辑右移,插0,>>代表算术移位,插符号位。

    6.数组有length成员,运行时会检查越界抛出异常。所有数组都在堆区,可以复制数组(只是复制数组句柄)。

    7.非主类型的对象必须用new创建在堆区,不能在栈区创建。

    8.不必进行提前声明,可以在定义前使用。

    9.没有预处理机。

    10.用包代替命名空间。

    11.类成元的对象句柄自动初始化为null,基本类数据成员也会初始化为默认值。static和非static成员等同。

    12.new创建对象,返回一个引用(句柄),引用可以重新赋值。

    13.如果定义了一个非默认构造函数,就不会有自动生成的默认构造函数。没有拷贝构造,因为所有变量都是按引用传递。

    14.没有析构函数,变量不存在作用域问题。

    15.所有对象都是从根类Object继承的。

    16.垃圾收集仍有可能产生内存泄露,分配存储空间的固有方法,finalize()???

    17.内建多线程支持,继承Thread类,用syschronized作方法的类型限制符,使得同时只有一个线程能使用该对象。

    18.public、private、protected包含在每个类成员定义里,默认是friendly,只有同一个包的元素可以访问。除了多线程很少用private。protected可有继承类或包内其它元素访问。

    19.类嵌套,内部类有一个指向外部类的句柄。

    20.final方法类似于inline,建议进行内联。

    21.extends关键字表示继承,super调用父类方法,也可用super调用父类构造函数。

    super();          super.f();

    22.抽象类abstract既可包含抽象方法,也可包含具体实现。interface只有抽象方法,没有数据成员,用implements实现。抽象类不能实例化,子类要是非抽象类,必须实现所有抽象成员。接口中的方法必须是public,成员变量默认静态常量static final。

    23.没有virtual关键字,所有非static方法都会动态绑定。

    24.有方法重载,没有运算符重载,所以String不支持+,+=。

    25.java标准库。联网、数据库(JDBC)、多线程、分布式对象(RMI、CORBA)、压缩。

    26.更健壮。

    对象句柄初始化为null

    检查句柄、出错时抛出异常

    检查数组越界

    垃圾收集

    傻瓜式异常处理机制

    内建多线程支持

     

    附录C java编程规则

    1.类名首字母大写,方法首字母小写,包名全部小写。

    2.可以考虑每个类置入一个main(),用来测试该类


    最新回复(0)