1

在 C++ 中:

class Rectangle {
    int x, y;
  public:
    void set_values (int,int);
    int area () {return (x*y);}
};

int main () {
  Rectangle rect;
  rect.set_values (3,4);
}

在 Java 中:

class Rectangle {
    int x, y;
    void set_values (int x,int y);
    int area () {return (x*y);}
}

public static void main(String[] args) {

Rectangle rect=new Rectangle(3,4);

}

在 C++ 编译器将创建rect对象并保留 4 个字节的内存。我想知道Java是如何创建对象的?

4

3 回答 3

3

当你这样做时: -

Rectangle rect;

C++中,它调用编译器提供的 0-arg 默认构造函数。

如果您想使用 2-arg 构造函数,则必须执行以下操作:-

Rectangle rect(3, 4);

其中,您必须显式提供一个 2-arg 构造函数,否则它将无法编译。


现在,Java 中的情况也类似。如果你这样做: -

new Rectangle();

那么它就可以了,因为在这种情况下,编译器将为您提供一个默认的 0-arg 构造函数,就像在 C++ 中一样,但是当您创建对象时:-

new Rectangle(3, 4);

然后你必须显式地为类提供一个 2-arg 构造函数,否则它不会编译,就像你的第二个例子一样,它不会编译。

此外,一旦您提供了parameterized constructor,那么在这种情况下,编译器将不会提供默认构造函数。如果您想使用一个,则必须显式提供一个 0-arg 构造函数。这在两者中都足够了,Java并且C++

现在,根据memory allocation所关心的,由于 Java 是独立于平台的,所以int类型的大小是32 bits, 在所有平台上。这与C++数据类型的大小取决于平台的情况形成对比。

有关JVM Specification - The Structure of JVM各种类型分配的详细信息,请参阅。

PS: -

我建议您通过以下链接了解 Java 类和对象的基础知识:-

于 2012-10-25T04:52:31.430 回答
0

3264位:

Rectangle rect

保留在堆栈上。

然后,32 + 32 = 64 bits从堆中分配给:

new Rectangle(3,4);

Java 是一种独立于平台的语言,所有原始类型都有特定的大小。

请在此处查看:http: //docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

于 2012-10-25T04:53:42.393 回答
0

在javarect中不是一个对象,而是一个reference指向object.

当你说它会在里面new Rectangle(3,4);创建一个并返回那个,并且引用地址是一个适当类型的变量,这就是你的情况。objectheapreference addressobjectassignedRectangle rect

在此处输入图像描述

java中的资源创建对象

于 2012-10-25T05:08:48.097 回答