您的位置:首页 > 编程语言 > Java开发

JAVA对象的初始化过程

2016-01-11 10:29 441 查看
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);
过程:

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

构造代码块初始化对象 和 对属性进行显示初始化是同类别的,其调用顺序和语句的出现顺序保持一致。

而静态代码块初始化类一定是先于它们执行,构造函数晚于它们执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: