为什么声明时不调用Java类默认构造函数?

时间:2012-09-30 19:53:42

标签: java

Java具有默认构造函数,但其​​运行方式与C ++不同。

在C ++中,默认构造函数在声明对象时被隐式调用,因此不需要显式“new”它。但在Java中,必须显式初始化对象。有特殊原因吗?是否有任何功能请求?

3 个答案:

答案 0 :(得分:8)

仅当C ++声明在堆栈上创建对象时。所有Java对象都是基于堆的,因此这不是一个选项。在两种语言中,在创建新对象时都会调用构造函数。

// C++
Obj obj;  // stack
Obj* pObj = new Obj;  // heap

// Java
Obj obj = new Obj();  // heap (stack not possible)

答案 1 :(得分:2)

从技术上讲,

  

在C ++中,默认构造函数在声明对象时被隐式调用

不正确,但不完整。如果对象具有用户定义的默认构造函数,则不仅可以声明它。声明点也是定义和初始化。

在Java中,引用可以是null,而在C ++中它不能。在C ++中只有指针可以是NULL。所以有不同的语义。

JavaObject o = null; //valid Java
                     //invalid C++

答案 2 :(得分:0)

Java构造:

MyClass myObject;

与以下C ++等效(-ish):

MyClass *myObject;

不要:

MyClass myObject;

没有Java等同于后者。