您的位置:首页 > 其它

对象在创建的时候都发生了什么?

2015-12-25 15:34 302 查看
我们知道一个类可以有很多部分组成,构造函数,静态方法、静态成员变量,成员变量,构造代码块,局部代码块,静态代码块。那么类在加载进内存并且创建对象时都发生了什么,又都有什么顺序呢?
 
先看一个栗子吧:

 

class Person

{

    private
String name;

    private
int age = 18;

    private
static String country = "CN";

 

    public
static void print()

    {

       
System.out.println(country);

    }

   
static

    {

       
System.out.println("haha");

    }

    {

       
System.out.println(name+","+age+","+country);

    }

   

    public
Person(String name)

    {

       
this.name = name;

       
System.out.println(name);

    }

}

class  TestPerson

{

    public
static void main(String[] args)

    {

       
Person p = new Person("Aaron");//What happened here?

    }

}

 

如果对对象的建立过程熟悉的话,答案还是很容易得出的:

haha

null,18,CN

Aaron

整个过程其实可以分为如下几步:

 *  Person p =
new Person("Aaron");

 *  1.对象的类文件加载进内存

 *  2.静态成员(静态属性和静态方法),方法被调用才会执行------(country赋CN)

 *  3.静态代码块(优先于对象),给类初始化------(打印haha)

 *  4.对象开辟堆内存空间(分配内存地址)

 *  5.在堆内存中建立对象的特有属性,进行默认初始化-----(name赋null,age赋0)

 *  6.对属性进行显示初始化-----(age赋18)

 *  7.构造代码块初始化,给对象初始化------(打印null,18,CN)

 *  8.对对象进行对应的构造函数初始化

 *  9.将内存地址赋值给栈内存的p变量

 

   
上面就是整个Person类加载并创建对象的整个过程,可以看到静态总是优先于对象加载进内存的,他们所在的内存区域也有区别,静态static的特点在上一篇博客有总结



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: