在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是如何创建对象的?
发布于 2012-10-25 12:52:31
当你这样做的时候:
Rectangle rect;在C++中,它调用编译器提供的0参数默认构造函数。
如果你想使用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++形成了鲜明对比。
有关各种类型分配的详细信息,请参阅。
P.S.:-
我建议你通过下面的链接,了解Java类和对象的基础知识:
发布于 2012-10-25 12:53:42
用于以下各项的32或64位:
Rectangle rect在堆栈上是保留的。
然后,从堆中为以下对象分配32 + 32 = 64 bits:
new Rectangle(3,4);Java是一种独立于平台的语言,所有的原始类型都有特定的大小。
请查看此处:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
发布于 2012-10-25 13:08:48
在java中,rect不是一个对象,而是一个指向object的reference。
当您说new Rectangle(3,4);时,它将在heap中创建一个object并返回该reference address的object,并且引用地址是对适当类型的变量的assigned,在本例中是Rectangle rect。

资源creating object in java
https://stackoverflow.com/questions/13061710
复制相似问题