Java中对象的初始化过程详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/PlainWaterh/article/details/78803870

在Java中,我们需要对对象进行初始化操作。
经常需要new 对象。但是new对象时到底发生了什么呢?
有时候我们不是特别清晰。
所以今天又重新学习了一下JavaSE部分,又有了新的感受。
在此记录一下
首先代码部分

Person类:

class Person{
    private String name;
    private int age;
    private static String country = "cn";
    Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    //构造代码块
    {
        System.out.println(name+".."+age);
    }

    //静态代码块
    static{
        System.out.println("静态代码块");
    }

    public void setName(String name){
        this.name = name;
    }
    public void speak(){
        System.out.println(this.name+"..."
              +this.age);
    }
    public static void showCountry(){
        System.out.println("country="+country);
    }
}

PersonDemo类(测试类)

class PersonDemo{
    public static void main(String[] args) {
        Person p = new Person("zhangsan",20);
    }
}

在Person p = new Person(“zhangsan”,20);

在运行这句这行代码时做了什么呢?

首先栈内存中有个引用(p)
右边有 值(new Person())所以需要加载Person类,
当Person p = null;是不会加载Person类的
这里写图片描述
1. new 对象的的时候。JVM从硬盘中取Person.class文件并加载到内存中。
2. 执行该类中的static代码块(静态代码块),如果有的话,给Person.class类进行初始化
3. 并开辟了堆内存空间。分配内存地址
4. 在对内存中建立对象的特有属性,并进行默认初始化(比如int类型默认为0,引用类型默认为null等)。
5. 对属性进行显示初始化,
6. 对对象进行构造代码块初始化
7. 对对象进行对应的构造函数初始化
8. 将内存地址赋值给栈内存中的p变量

猜你喜欢

转载自blog.csdn.net/PlainWaterh/article/details/78803870
今日推荐