为什么在声明时不调用Java类默认构造函数? java具有默认构造函数,但与C++ +./p>相同。 < C++ >默认构造函数在对象声明时隐式调用,因此不需要显式“新建”它。但在Java中,对象必须显式初始化。有什么特别的原因吗?只有当C++声明在堆栈上创建对象时,是否有任何特性请求?< p>。所有Java对象都是基于堆的,所以这不是一个选项。在这两种语言中,在创建新对象时都会调用构造函数 // C++ Obj obj; // stack Obj* pObj = new Obj; // heap // Java Obj obj = new Obj(); // heap (stack not possible) 只有C++声明在堆栈上创建对象。所有Java对象都是基于堆的,所以这不是一个选项。在这两种语言中,在创建新对象时都会调用构造函数 // C++ Obj obj; // stack Obj* pObj = new Obj; // heap // Java Obj obj = new Obj(); // heap (stack not possible)

为什么在声明时不调用Java类默认构造函数? java具有默认构造函数,但与C++ +./p>相同。 < C++ >默认构造函数在对象声明时隐式调用,因此不需要显式“新建”它。但在Java中,对象必须显式初始化。有什么特别的原因吗?只有当C++声明在堆栈上创建对象时,是否有任何特性请求?< p>。所有Java对象都是基于堆的,所以这不是一个选项。在这两种语言中,在创建新对象时都会调用构造函数 // C++ Obj obj; // stack Obj* pObj = new Obj; // heap // Java Obj obj = new Obj(); // heap (stack not possible) 只有C++声明在堆栈上创建对象。所有Java对象都是基于堆的,所以这不是一个选项。在这两种语言中,在创建新对象时都会调用构造函数 // C++ Obj obj; // stack Obj* pObj = new Obj; // heap // Java Obj obj = new Obj(); // heap (stack not possible),java,Java,技术上 < C++ >默认构造函数在对象声明为时隐式调用 不是不正确,而是不完整。如果对象具有用户定义的默认构造函数,则不能仅声明它。声明点也是一个定义和初始化 中的引用可以是 null < /C>,而C++中则不能。在C++中,指针只能是 null 。所以有不同的语义 JavaObject o = null; //valid Java //invalid C++ 技术上 < C++ >默认构造函数在对象声明为时隐式调用 不是不正确,而是不完整。如果对

技术上

< C++ >默认构造函数在对象声明为

时隐式调用 不是不正确,而是不完整。如果对象具有用户定义的默认构造函数,则不能仅声明它。声明点也是一个定义和初始化

中的引用可以是<代码> null < /C>,而C++中则不能。在C++中,指针只能是<代码> null <代码>。所以有不同的语义

JavaObject o = null; //valid Java
                     //invalid C++
技术上

< C++ >默认构造函数在对象声明为

时隐式调用 不是不正确,而是不完整。如果对象具有用户定义的默认构造函数,则不能仅声明它。声明点也是一个定义和初始化

中的引用可以是<代码> null < /C>,而C++中则不能。在C++中,指针只能是<代码> null <代码>。所以有不同的语义

JavaObject o = null; //valid Java
                     //invalid C++
Java构造:

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

MyClass *myObject;
不应:

MyClass myObject;
没有与后者等效的Java。

Java构造:

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

MyClass *myObject;
不应:

MyClass myObject;

没有与后者相当的Java。

你能举例说明你的意思吗?也就是说,我不确定这里有什么答案,除了“java不是C++,它工作的方式,它的工作”你能提供一个例子,你的意思?也就是说,我不确定这里有什么答案,除了“java不是C++,它工作的方式”。在爪哇中,您不声明对象,而是引用对象。我认为C++对象类似于堆上的引用。也许我错了,但你能解释一下吗?后者是指向堆上对象的指针,但前者是堆栈上的对象。@texasbruce甚至不接近。C++对象指针可以被看作是一种引用(不与常规C++引用混淆),但它可以指向堆或以前的堆栈分配对象。你可以做
类Foo{Bar\u Bar;}。。。Foo*Foo=新的Foo()
其中Foo在堆上分配,但是
bar
将使用
bar
的默认构造函数进行初始化。因此,堆栈分配和堆分配之间的区别实际上并不相关;这是因为你处理的是对象指针还是对象值(java没有)。所以java引用总是在堆上分配,C++对象被分配到堆栈上(比如Stutt?),指针在堆上。在爪哇中,您不声明对象,而是引用对象。我认为C++对象类似于堆上的引用。也许我错了,但你能解释一下吗?后者是指向堆上对象的指针,但前者是堆栈上的对象。@texasbruce甚至不接近。C++对象指针可以被看作是一种引用(不与常规C++引用混淆),但它可以指向堆或以前的堆栈分配对象。你可以做
类Foo{Bar\u Bar;}。。。Foo*Foo=新的Foo()
其中Foo在堆上分配,但是
bar
将使用
bar
的默认构造函数进行初始化。因此,堆栈分配和堆分配之间的区别实际上并不相关;它是处理对象指针还是对象值(java没有)。所以java引用总是在堆上分配,C++对象被分配到堆栈(像结构?),指针在堆上?