Think in Java——复用类

版权声明:本文为博主原创文章,转载注明出处即可。 https://blog.csdn.net/bskfnvjtlyzmv867/article/details/86606995

复用类方法

Java复用代码的思路有两种:

  • 组合:在新类中产生现有类的对象,再添加新的扩展成员与行为;
  • 继承:新类继承自现有类,拥有现有类的全部特性。

组合一般是将现有类型作为新类型底层实现的一部分来加以复用,而继承复用的是接口,这里的接口含义就是父类的成员与行为。

final关键字

  1. 在定义一个常量的时候,必须对其进行赋值。一个既是 static 又是 final 的域只占据一段不能改变的存储空间。如何理解?finalstatic final 的区别是:final 在一个类对象唯一,static final 在多个对象中都唯一。所以一个既是 static 又是 final 的域只占据一段不能改变的存储空间,只有一份;
  2. 对于基本数据类型,final 修饰后数值会恒定不变。如果用来修饰引用,final 使得引用恒定不变,一旦初始化指向一个对象,不可以再指向别的对象,对象自身可以更改
  3. final 修饰的数据不一定编译时就已经知道值,下面代码例子就是需要运行时才能知道。除此以外,static final 修饰的会在类加载时确定值,而和类的对象创建初始化无关;
    final int a = new Random(47).nextInt(20);
    static final int b = new Random(47).nextInt(20);
    
  4. Java允许 final 定义的数据先为空白,但必须在构造函数中进行赋值,保证在使用前已经进行初始化。除此以外,空白 final 有一个很好的点值得提一下,一个类中的 final 域不同的对象不同的初始化能具有不同的值,前提不能是 static final 修饰;
  5. final 修饰方法主要是不想子类继承的时候修改,这是现在用来修饰方法的主要动机。Java SE5/6 之前可能还有个动机是想提高代码效率,用 final 修饰过的方法调用时将会转为内嵌调用,不用再有入出虚拟机栈、栈帧那种操作,不过现在推荐让编译器和JVM去处理效率问题;

初始化与类加载

  1. 类在初次被用时,字节码文件才会被加载。通常这是指类的第一个对象创建时会被加载,但是当访问 static 域或方法也会发生加载。所有的 static 对象和代码都会在加载时依程序中的顺序依次初始化一次
  2. 执行某个类中的 main 方法时,会先加载这个类。

猜你喜欢

转载自blog.csdn.net/bskfnvjtlyzmv867/article/details/86606995