第五章~~~,内容有点多,先上图了
对象创建过程总结
(假设有个名为Dog的类)
- 当首次创建类型Dog的对象时(构造器可以看成静态方法),或者Dog类的静态数据被首次访问时,java解释器必须查找类的路径,定位Dog.class文件
- 载入Dog.class文件(会创建Class对象),有关静态初始化的所有动作都会执行,因此静态初始化只在Class对象首次加载的时候进行一次
- 当用new Dog()创建对象时,首先将在堆上为Dog()对象分配足够的存储空间
- 这块存储空间会被清零,这样就自动将Dog的所有基本类型数据都设置成了默认值,而引用则被置为null。
- 执行所有出现于字段定义处的初始化动作
- 执行构造器
关于清理的部分,补充一些上次没有写的:
- 对象可能不被回收
- 垃圾回收不等于“析构”
- 垃圾回收只与内存有关
其他的看另一篇博客,Java编程思想学习笔记(5)–垃圾收集器,讲的的比较详细
关于初始化的部分:
类的数据成员的默认值如下:
- char、byte、short、int、long为0
- float、double为0.0
- boolean为false
- 对象的默认值为null
关于静态数据的初始化,是在类装载时就全部进行初始化的,不过有没有调用,看一个例子
/*
*定义了两个静态成员,当使用其中的一个时,所有的静态变量都进行了初始化
*/
public class StaticInitialValue {
static String str=ss(); //使用函数进行初始化,方便查看是否初始化了
static int i=si();
static String ss(){
System.out.println("static String initial");
return "string";
}
static int si(){
System.out.println("static int initial");
return 0;
}
public static void main(String[] args) {
System.out.println(StaticInitialValue.str);
}
}
运行结果: