java类的静态属性初始化和new对象时发生的事情

文章目录[x]
  1. 1:类的静态属性何时加载到内存?
  2. 2:静态属性初始化
  3. 3:对象属性初始化
  4. 4:第一次加载类(new对象)发生的事情

类的静态属性初始化和new对象时发生的事情

 

类的静态属性何时加载到内存?

 

当第一次调用这个类(调用这个类指,使用这个类的静态属性,静态方法,创建这个类的对象),这个类的静态属性(进行初始化,只初始化一次)和静态方法便会加载到内存中

 

什么是属性的初始化,就是给给属性指向一个对象,也就是new一个对象(在内存开辟一块区域)

 

静态属性初始化

静态属性的初始化代码执行顺序是按照

1 属性声明,声明的时候可以初始化

2  static代码块

在下图代码中,当我们在其他类中第一次调用这个类,这个类的静态属性就会初始化被加载到内存中去,也就是先执行声明public static car c1=new car("1");

然后执行静态代码块中的c1=new car("2");

注意:类的静态属性只会初始化一次,也就是第一次调用这个类的静态属性和方法的时候

 

 

对象属性初始化

对象属性的初始化代码执行顺序是按照

1 属性声明,声明的时候可以初始化

2 代码块

3 构造函数

 

注:对象属性的初始化是在new 一个对象的时候进行的

 

 

 

第一次加载类(new对象)发生的事情

所以当第一次new对象时候,属性初始化代码执行的顺序

 

1静态属性声明,声明的时候可以初始化

2 静态代码块

3对象属性声明,声明的时候可以初始化

4 非静态代码块

5 构造函数

 

 

 

案例代码

car类代码

package parktest;

public class car
{

public car(String s)
{
// TODO 自动生成的构造函数存根
System.out.println(s);
}

}

 

 

cat类代码

package parktest;

 

public class cat {

//静态属性声明,并创建

public static car c1=new car("1");

//静态代码块初始化属性

static

{

c1=new car("2");

}

//非静态属性(对象属性)声明,并初始化

public car mycar=new car("3");

//非静态代码块初始化对象属性

{

mycar=new car("4");

}

//构造函数初始化对象属性

public cat()

{

// TODO 自动生成的构造函数存根

this.mycar=new car("5");

}

public static void fly()

{

System.out.println("飞");

}

public static void main(String[] args)

{

new cat();

}

}

 

运行结果:

就是上面所说的顺序

 

点赞