Java中的构造函数和新运算符
要从Java中的类Student
创建一个新对象,我们通常使用以下语句
Student std = new Student();
我已经读过new运算符通过在堆中分配内存空间来创建新对象,但是我还读到了调用构造函数Student()
创建它。 所以,它有点令人困惑。 哪一个创建对象std
? 它是new运算符还是默认构造函数?
拥有一个与类同名的方法是合法的(尽管令人困惑), new
消除了任何歧义。 new
表示JVM应该为给定的类和参数列表调用实例初始化方法 ,并返回初始化对象(在初始化方法的第一个(隐藏)参数中引用)。
Java的设计者可能已经找到了另一种语法,但他们的设计目标是任何时候在堆上分配内存,应该通过要求关键字new
来显式调用它。 这可能看起来很奇怪,但Java的大多数目标受众是C和C ++程序员,他们怀疑垃圾收集,这是为了确保开发人员在他们不知情的情况下没有分配内存。