java编程思想笔记07-复用类

复用代码是java众多引人注目的功能之一.但是想要称为革命性的语言,仅仅能够复制代码并堆之加以改变是不够的,它还必须能够做更多的事情.

7.1组合语法

组合:只需要将一个类的对象引用到另一个类中即可.

7.2 继承语法

继承是所有oop语言和java语言中不可缺少的一部分.

7.2.1 初始化父类

继承机制的存在,也就导致了其实在创建一个对象的时候,会直接创建object对象,然后一级一级的创建所有的父类对象,该对象就拥有了所有父类对象的可以继承的成员.

因此,抽象类和接口只是不能直接new而已,但你在创建它的子类和实现的时候,它们也会在内存中占据一片空间,可以推断java虚拟机在给接口分配内存空间的时候,只会维持一份,因为,接口中的成员都是稳定的,不存在多线程问题.而会为每个子类的抽象类分配单独的内存空间.

7.3 代理

java并没有提供对它的直接支持,这是继承和组合的中庸之道.(不详解,请看设计模式之代理)

7.4 结合使用组合和继承

7.4.1 确保正确清理

为什么java里面还需要清理:因为java中有操作流对象的类,这些类的对象必须我们来完成清理,它们的存在对于性能来说是巨大的消耗.

许多情况下,清理并不是问题,但是真正需要我们动手清理时,就得多做努力并且加倍小心.例如上述讲到的流对象.

7.5 在组合和继承之间选择

组合和继承都允许在新的类中放置对象,组合是显示的这样做,而继承是隐式的做.

7.6向上转型

"为新的类提供方法"并不是继承技术中最重要的方面,其最重要的方面是用来表现子类和父类之间的关系.

7.6.1 为什么称为向上转型

历史原因,绘制类图的时候把父类放在上面

7.6.2 再论组合与继承

判断到底使用组合还是继承,一个最清晰的方法就是问一问自己是否需要从子类向父类进行转型.如果必须转型,则继承是必要的,但如果不需要,则应当好好考虑自己是否需要继承.

7.7 final关键字

  1. 一个永不改变的编译时常量
  2. 一个在运行时被初始化的值,而你不希望它被改变.

    一个即时static和final的域只占据一段不能改变的存储空间.
    final修饰对象引用,引用不可变,但是对象自身可以变化.
    final赋值的时机:1声明 2构造赋值

7.7.1 final方法

不能被覆盖
final与private
类中所有的private方法都隐式的声明为private,由于无法使用,所以也无法覆盖,可以共同使用但是没有任何意义.

7.7.2 final使用忠告

要预见类是如何被复用的一般是很困难的,特别是对于一个通用类而言更是如此.

java的标准库就是一个很好的例子.java1.0/1.1 vector类被广泛的运用,其中使用final确又使用了同步,完全浪费了final的效率.

hashtable的设计方法要比vector的类库要简洁许多,明显不是同一个人设计,对于通用类库而言,这显得很草率.

7.8 初始化和加载

因为java中的所有事物都是对象,每个类的编译代码都在自己的class文件中,该文件只在需要使用程序代码时才会被加载.一般来说,"类的代码在初次使用时才加载".

通常发生在创建对象的时候,但是在使用累的static域的时候也会加载.

7.8.1 继承和初始化

父类静态,子类静态,父类构造,子类构造,对象元素

你可能感兴趣的:(java,java基础)