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

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

 

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的特点在上一篇博客有总结对象在创建的时候都发生了什么?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值