初始化

创建对象的过程

1: 首次创建类或者首次访问类的静态方法/静态域, 定位到该类的 .class 文件
2: 载入 .class 文件, 静态初始化的所有动作都会执行, 因此静态初始化只在 .class 对象首次加载时进行一次
3: new 对象, 首先在堆上分配足够的空间给对象
4: 这块存储空间会被清 0, 基本类型设为默认值, 引用设为 null
5: 执行字段定义处的初始化动作
6: 执行构造器

初始化顺序: 静态变量 -> 普通变量 -> 构造器

java 中创建和初始化是一体的, 创建的时候就已经有初始化操作, 即使想延后初始化(比如像在构造器里)

对类中已赋默认值的 static final 的变量的调用不会触发其它静态对象的初始化

初始化变量的位置

  • 定义的地方
  • 构造器里
  • 使用时(惰性初始化)
  • 使用实例赋值

基本数据类型初始化时的默认值

  • boolean > false
  • char > 0
  • byte > 0
  • short > 0
  • int > 0
  • long > 0
  • float > 0.0
  • double > 0.0
  • 其它类型/非基本数据类型 > null

属性/变量 初始化时机和顺序

  • 变量初始化的顺序由 声明顺序 决定
  • 类里的属性变量, 声明后未赋值; 在构造方法里赋值, 但是 在构造方法执行之前, 属性变量已经被赋值过一次
public class TInit{
    private int i;
    public TInit(){
        i=7;// 在赋值之前, i 已经被默认赋值为 0
    }
}

实例初始化子句

public class TInit{
    private CA ca;
    {
        ca=new CA(); // {} 里的这条语句会在 构造方法执行之前执行
    }
    public TInit(){
    }
}

new TInit();

静态变量初始化

静态变量在这个类被首次实例化之后初始化 一次, 之后再次该类再次实例化也不会再次初始化

静态类初始化 在普通变量之前, 如果一个类中有多个静态变量那么会按照定义的先后顺序初始化

results matching ""

    No results matching ""