成员初始化
默认、指定初始化
类的成员如果没有指定会默认初始化,基本类型初始化为默认值,引用初始化为null
。也可以通过定义显示初始化。
1 | public class InitialValues { |
初始化块
可以通过{}初始化块初始化。
1 | public class Initial{ |
静态数据初始化
静态数据的初始化与非静态数据类似,static初始化块需要用static修饰。下面是一个例子:
1 | public class InitialValues3 { |
在通过InitialValues3.c 访问静态变量c时,会先初始化c,此时并没有创建InitialValues3的对象实例。静态变量初始化一次后,不需要再调用。
构造器初始化
构造器初始化在成员初始化之后。
对象创建过程
综上,假设有一个Dog类,对象创建的过程如下:
- 构造器实际上是静态方法,当首次创建Dog对象,或者Dog类的静态方法、域首次访问时,java解释器会查找类路径,定位Dog.class文件。
- 加载Dog.class文件(创建Class对象), 将Dog类的静态域初始化(静态存储区中),所以静态初始化只在类加载时初始化一次。
- 用new Dog()创建对象时,根据类内域的声明首先在堆上分配足够的存储空间。
- 将存储区域清零。
- 按顺序执行各种定义处的初始化。
- 执行构造器