第七章 复用类
第七章复用类一共分为九部分,大纲如下图所示。我这里主要对一些特别注意的地方进行记录。
1、组合语法
这部分主要注意俩点:
1、toString方法
2、初始化的四种方式:
(1) 定义对象的地方–在构造器之前被初始化
(2) 构造器中初始化
(3) 使用之前初始化
(4) 使用实例初始化
2、继承语法
这部分同样也注意俩点:
1、super关键字—表示超类
2、超类的构造器初始化一定在当前类的构造器之前
3、代理
java并不直接支持代理,是通过继承和组合之间的中庸之道实现的。
例如:
class A{
private B b = new B();
public void up(){
b.up();
}
}
首先在A类中声明并实例初始化B类,之后再声明一个同B类中相同的up方法,再在方法中调用b.up()
个人理解A是B的代理类,具有和B相同的up方法,但B又没有完全暴露给A所有方法。
4、final关键字
这部分主要是去理解final关键字的本质。
4-1 final关键字
final的本质是不可以改变储存在堆栈中的引用,如基本类型用final修饰后,恒定不变,但final修饰对象的话,只是对象的引用不变,无法再把它指向另外一个对象,但其指向的堆中的数据是可以改变的。
4-2 final方法
final方法不能被重写
4-3 final类
final类不能被继承,类中所有的方法都是隐式的final方法
九、初始化及类的加载
这部分主要是讲了static关键字修饰的对象或者代码块在程序加载过程中的执行顺序。初始化顺序为:static静态对象或由static修饰的代码块>普通全局变量>构造器
以下是示例代码:
package InitializationOrder;
public class A {
private static Integer id = printInit();
private B b = new B();
public A(){
System.out.println("这是A的构造器");
}
public static int printInit(){
System.out.println("static方法");
return 4;
}
public static void main(String[] args) {
System.out.println("main方法开始执行");
A a = new A();
//初始化顺序为(1)static静态对象或由static修饰的代码块(2)全局变量(3)构造器
//
}
static {
System.out.println("这是A的静态块");
}
}
package InitializationOrder;
public class B {
public B(){
System.out.println("B构造器执行!");
}
}
程序运行结果:
static方法
这是A的静态块
main方法开始执行
B构造器执行!
这是A的构造器