Java Basics:创建类对象

时间:2012-10-25 04:45:50

标签: java c++

在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如何创建对象?

3 个答案:

答案 0 :(得分: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构造函数。这在JavaC++

中都足够了

现在,根据memory allocation,由于Java与平台无关,因此int类型的大小为32 bits,在所有平台中都是如此。这与C++形成对比,其中数据类型的大小取决于平台。

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

P.S。: -

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

答案 1 :(得分:0)

3264位:

Rectangle rect

保留在堆栈上。

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

new Rectangle(3,4);

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

请参见此处:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 2 :(得分:0)

在java中rect不是一个对象,实际上是reference指向object

当您说new Rectangle(3,4);时,它会在object内创建heap并返回reference address的{​​{1}},参考地址为{{1} }}到适当类型的变量,在您的情况下为object assigned

enter image description here

资源creating object in java