在哪里为java中已初始化的数据成员分配了内存@声明点。。。?
在java中,可以编写如下代码在哪里为java中已初始化的数据成员分配了内存@声明点。。。?,java,c++,datamember,Java,C++,Datamember,在java中,可以编写如下代码 public class Print{ int n=10; String path="C:\\file.txt"; } 在对象创建之前,这些数据成员的内存分配在哪里?? 我想我们不能在C++中做同样的事情!! 在Java中用C++和java……< /p> < p>解释,没有内存被分配到对象,直到使用关键字“新”或字符串给它分配值。 在java中,也不是C++中,在创建< 对象> /强>类型打印< /java >之前,您不能访问变量 n>代码>路径>代码>。在什么
public class Print{
int n=10;
String path="C:\\file.txt";
}
在对象创建之前,这些数据成员的内存分配在哪里??
我想我们不能在C++中做同样的事情!!
在Java中用C++和java……< /p> < p>解释,没有内存被分配到对象,直到使用关键字“新”或字符串给它分配值。 在java中,也不是C++中,在创建< <强>对象> /强>类型<代码>打印< /java >之前,您不能访问变量<代码> n>代码>路径>代码>。在什么样的内存中创建一个对象,在相同的内存中创建它的所有字段 在C++中,当你创建这样的对象
void foo() {
Print obj;
}
void foo() {
Print * obj = new Print;
}
它将在堆栈中创建。如果你创建一个像这样的对象
void foo() {
Print obj;
}
void foo() {
Print * obj = new Print;
}
它将在堆中创建
在Java中,您只能创建堆分配的对象,所以对象本身及其字段都将被放入堆中
请注意,在声明中初始化类的字段只允许在C++11中使用,而不允许在C++03中使用。在Java中,有一个名为class的类,并且在运行时为每个类指定一个class对象。这些类对象包含初始化所需的10和“C:\file.txt”等数据 在C++11中,您也可以这样做(至少它看起来是一样的,并且以C++-ish的方式具有相同的语义):
在C++03中,这是不可能的,您必须初始化每个构造函数中的成员。在C++ 11中实现的方式与java不同:在java中,C++中没有类对象,运行时没有类加载。在C++11中,编译器将此类成员初始值设定项视为您在每个构造函数中手工编写的初始值设定项。在编译后的程序代码中,有10和“C:\file.txt”,每个构造函数的代码都包含一个部分,其中待构造对象的两个成员使用这些值初始化。也就是说,除非显式初始化构造函数中的一个或两个成员,因为这会重写默认初始化器。我不知道java,但是C++中,它填充了空白。在创建对象之前不会分配它们。java和C++之间没有什么关系。