我们都知道,创建 java 类对象的方式: new + 类的构造方法(可能是有参构造或者无参构造)!

在大多数初学者眼中,执行构造方法就是创建实例,其实不然。这一点可以从 this 关键字来看出:

public class User{
    public User(){
        this.test(); //标记
    }
    public void test(){
        System.out.print("正在执行构造方法...");
    }
}

从以上代码中我们可以看出:当构造方法执行到注释标记处,我们使用了 this 关键字,而 this 的作用就是是指代构造方法执行时的当前类实例,也就是说==在构造方法执行之前,实例已经被创建了==!所以类实例或者说类对象并不是构造方法创建的而是new关键字来创建的。而==构造方法的作用其实是初始化实例==,这一点我们从带参的构造方法中可以看出:

public class User{
    private String name;
    private int age;
    public User(String name ,int age){
        this.name = name;
        this.age = age;
        this.test(); //标记
    }
    public void test(){
        System.out.print("正在执行构造方法...");
    }
}

所以,类对象是在执行构造方法前已经被创建,而构造方法的作用就是初始化对象

new是如何创建对象的

在Java中,new操作符的本意是分配内存,new一个类就是把这个类实例化为对象。

程序执行到new操作符时,会根据new后面的类型分配相应的内存空间。接着调用构造函数,填充对象的各个域(这一步叫做对象的初始化)。构造方法返回后,一个对象创建完毕,就可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。

参考: