1 初始化
初始化的一些基本知识:
1 在类里定义一个对象引用时,如果不将其初始化,此引用就会获得一个特殊值null。
2 在定义类成员的地方为变量赋值(C++中不允许这么做)。
3 编译器会对“向前引用”发出警告
4 无法阻止自动初始化的进行,它将在构造器被调用之前发生。
public class Counter{ int i; Counter() { i = 7; } //...... }
i首先会被置0,然后变成7。
5 在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。
6 静态初始化只有在必要时刻才会进行。只有在第一个Table对象被创建的时候,它们才会被初始化。
7 初始化的顺序是先静态对象,而后是“非静态对象”。
思考题:对象的创建过程。(P96)
8 编译器不允许指定数组的大小。
9 Random.nextInt()方法,这个方法会返回0到输入参数之间的一个值。
10 数组的创建是在运行时刻进行的。
11 如果你创建了一个非基本类型数组,那么你就创建了一个引用数组。
2 访问权限控制
3 继承
3 将导出类引用转换为基类的引用的动作,称之为向上转型。
在向上转型的过程中,类接口中唯一可能发生的事情是丢失方法,而不是获取它们。
4 final
对常量定义的方式:定义为public:可以被用于包之外; 定义为static,强调只有一份; 定义为final, 则说明它是一个常量。
一个既是static又是final的域只占据一段不能改变的存储空间。
空白final:一个类中的空白final域可以做到根据对象而有所不同,却又保持其恒定不变的特性。必须在构造函数中对它进行初始化。
final参数:在参数列表中以声明的方式将参数指明为final,这意味着你无法在方法中更改参数引用所指向的对象。
final方法:把方法锁定,以防任何继承类修改它的含义。确保在继承中使方法行为保持不变,并且不会被覆盖。
5 如果某方法为private,那么它就不是基类的接口的一部分。
6 在使用继承时,由于导出类具有基类接口,因此它可以向上转型至基类,这对多态来讲至关重要。
4 多态
一些基本知识点:
1 封装通过合并特征和行为来创建信的数据类型。
实现隐藏则通过将细节“私有化”把接口和实现分离开来。
多态的作用是消除类型之间的耦合关系。
2 继承允许将对象视为它自己本身的类型或其基类型来加以处理,这种能力允许将多种类型视为同一种类型来处理,而同一份代码也就可以毫无差别地运行在这些不同类型之上了。
3 多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要它们都是从同一基类导出而来的。
多态也称为运行期绑定。
4 对象既可以作为它自己本身的类型使用,也可以作为它的基类型使用,这种把对某个对象的引用视为对其基类型的引用的做法称作向上转型。