版权声明:本文为博主原创文章,转载注明出处即可。 https://blog.csdn.net/bskfnvjtlyzmv867/article/details/86606995
复用类方法
Java复用代码的思路有两种:
- 组合:在新类中产生现有类的对象,再添加新的扩展成员与行为;
- 继承:新类继承自现有类,拥有现有类的全部特性。
组合一般是将现有类型作为新类型底层实现的一部分来加以复用,而继承复用的是接口,这里的接口含义就是父类的成员与行为。
final关键字
- 在定义一个常量的时候,必须对其进行赋值。一个既是
static
又是final
的域只占据一段不能改变的存储空间。如何理解?final
与static final
的区别是:final
在一个类对象唯一,static final
在多个对象中都唯一。所以一个既是static
又是final
的域只占据一段不能改变的存储空间,只有一份; - 对于基本数据类型,
final
修饰后数值会恒定不变。如果用来修饰引用,final
使得引用恒定不变,一旦初始化指向一个对象,不可以再指向别的对象,对象自身可以更改; final
修饰的数据不一定编译时就已经知道值,下面代码例子就是需要运行时才能知道。除此以外,static final
修饰的会在类加载时确定值,而和类的对象创建初始化无关;final int a = new Random(47).nextInt(20); static final int b = new Random(47).nextInt(20);
- Java允许
final
定义的数据先为空白,但必须在构造函数中进行赋值,保证在使用前已经进行初始化。除此以外,空白final
有一个很好的点值得提一下,一个类中的final
域不同的对象不同的初始化能具有不同的值,前提不能是static final
修饰; final
修饰方法主要是不想子类继承的时候修改,这是现在用来修饰方法的主要动机。Java SE5/6 之前可能还有个动机是想提高代码效率,用final
修饰过的方法调用时将会转为内嵌调用,不用再有入出虚拟机栈、栈帧那种操作,不过现在推荐让编译器和JVM去处理效率问题;
初始化与类加载
- 类在初次被用时,字节码文件才会被加载。通常这是指类的第一个对象创建时会被加载,但是当访问
static
域或方法也会发生加载。所有的static
对象和代码都会在加载时依程序中的顺序依次初始化一次; - 执行某个类中的
main
方法时,会先加载这个类。