在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如何创建对象?
答案 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构造函数。这在Java
和C++
现在,根据memory allocation
,由于Java与平台无关,因此int
类型的大小为32 bits
,在所有平台中都是如此。这与C++
形成对比,其中数据类型的大小取决于平台。
有关各种类型分配的详细信息,请参阅JVM Specification - The Structure of JVM
。
P.S。: -
我建议您浏览以下链接,了解Java类和对象的基础知识: -
答案 1 :(得分:0)
32
或64
位:
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
。