高质量编程读书笔记之类和对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011101777/article/details/72838231

1.类的生命周期由类加载器加载开始,到类卸载结束,其中会经过连接、初始化等操作:
这里写图片描述

1.当类加载器预感到需要使用 该类时,会主动加载该类的二进制数据,产生的结果为:

1.读取二进制数据到方法区;
2.在堆内存中生成该类对应的Class对象,用以描述方法区中二进制数据对应的类结构;

2.进入连接阶段:

验证:即验证二进制数据对应的类结构是否正确;
准备:为所有的静态变量申请内存,并设置对应数据类型的默认值;
解析:将二进制数据中的符号引用替换为直接引用(地址引用),也就是把A.b()修改为指向A类二进制方法区b方法的内存地址;

3.类的初始化:
触发类初始化的条件是类的主动使用,目前有五种类的主动使用:

1.创建类的实例(类的五种创建方式);
2.调用类的静态方法会导致当前类初始化(静态方法所在的类);
3.访问类或者接口的静态变量,或者为其赋值会导致当前类初始化(静态变量所在的类或者接口);
4.某些反射方法,如Class.forName(“A”);
5.初始化一个类的子类,如果此时父类还没有初始化,则会先初始化父类;

4.静态方法和静态变量属于类,不属于对象,所以调用的时候首先会去匹配调用者的表面对象类型;
5.java中一共有4种代码块,方法代码块、静态代码块、同步代码块和构造代码块,构造代码块用{}表示,会插入在构造函数的第一句并执行,其会过滤this关键字;
6.使用静态内部类,其不持有外部类的引用,且能定义静态变量和方法,可以说形似内部类,神似外部类;
7.复写equals时,应满足自反性、对称性和传递性,并复写hashcode方法;

猜你喜欢

转载自blog.csdn.net/u011101777/article/details/72838231