JAVA:创建对象的澄清

时间:2015-06-29 07:17:12

标签: java oop object

我是Java的新手,目前正在学习基于oracle java教程的java链接如下:

https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

public class Rectangle {
public int width = 0;
public int height = 0;
public Point origin;

// four constructors
public Rectangle() {
    origin = new Point(0, 0);
}
public Rectangle(Point p) {
    origin = p;
}
public Rectangle(int w, int h) {
    origin = new Point(0, 0);
    width = w;
    height = h;
}
public Rectangle(Point p, int w, int h) {
    origin = p;
    width = w;
    height = h;
}

// a method for moving the rectangle
public void move(int x, int y) {
    origin.x = x;
    origin.y = y;
}

// a method for computing the area of the rectangle
public int getArea() {
    return width * height;
}
}

根据上面的代码,网上声明如下:

Rectangle rectOne = new Rectangle(originOne, 100, 200);

这会调用Rectangle的一个构造函数,它将origin初始化为originOne。此外,构造函数将width设置为100,将height设置为200.现在有两个对同一Point对象的引用 - 一个对象可以有多个引用,如图所示:

enter image description here

我的问题是,上面的图片是否正确代表了代码?一世 相信原点和原点应该在图中反之亦然,因为它将原点初始化为originOne。如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:0)

是的,图像正确代表了代码。我们可以有任意数量的引用指向同一个Object。 考虑到图像[1]:http://i.stack.imgur.com/wdrMD.gif 有点对象,它被初始化为x = 23,y = 94。 基本上"点"是一个班级。 在初始化期间

Point originOne =  new Point(23,94);

Point类的对象是在java的JVM中创建的,它占用了特定数量的Memory.the Object reference" originOne"包含Object" Point"

的内存地址

要引用此内存位置,我们使用"对象引用"在这种情况下是originOne。所以,我们可以有任意数量的参考文献。

Rectangle rectOne = new Rectangle(originOne, 100, 200);

这会调用以下构造函数

public Rectangle(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}

现在" originOne""将值复制到矩形的变量" origin" 。 因此,起源现在成为对象参考点。

它们指的是同一个对象(相同的内存地址),其中x = 23,y = 94

尝试打印对象参考它会给你: - 正确的类名@内存位置的十六进制哈希码

为了更好地理解假设一个 1>对象是人 2> object引用名称。

让人的名字正式成为艾伦,他的宠物名称为保罗。 但保罗或艾伦仍然指的是同一个人。

我希望你现在明白了。

答案 1 :(得分:0)

从概念上讲,是的。所以,

如果你这样做

originOne.setLocation(0,0);

这将反映在origin rectOne origin中,因为originOne指的是堆中的同一位置originOne = new Point(0,0);

如果你这样做

originOne

您已将rectOne与先前的引用相关联,但origin的{​​{1}}将继续指向上一个引用,即Point [x = 23,y = 94]。< / p>