JAVA对象的初始化过程

package xiya;

class Person{
	private String name;
	private int age;
	private static String country = "CN";
	
	//静态代码块初始化类
	static
	{
		System.out.println("首先被执行");
	}
	
	//构造代码块初始化对象
	{
		System.out.println("其次被执行");
	}
	
	public int getAge() {
		return age;
	}
	
	public String getName() {
		return name;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public Person(String name, int age) {
		System.out.println("最后被执行");
		this.name = name;
		this.age = age;
	}
	
	public static String getCountry() {
		return country;
	}
}

public class Demo {
	public static void main(String[] args) {
		Person p = new Person("xiya", 20);
		System.out.println(p.getName() + " " + p.getAge() + " " + p.getCountry());
	}
}

Person p = new Person("xiya", 20);
过程:

  1. 因为new用到了Person.class,所以先找到Person.class文件并加载到内存。
  2. 执行该类的static代码块(如果有的话),给Person类进行初始化。
  3. 在堆内存中开辟空间,分配内存地址。
  4. 在堆内存中建立对象的特有属性(成员变量),并进行默认初始化。
  5. 对属性进行显示初始化。
  6. 对对象进行构造代码块初始化。
  7. 对对象进行对应的构造函数初始化。
  8. 将内存地址传给栈内存中的p变量。


Keep it simple!
作者:N3verL4nd
知识共享,欢迎转载。
原文地址:https://www.cnblogs.com/lgh1992314/p/5834726.html