我是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对象的引用 - 一个对象可以有多个引用,如图所示:
我的问题是,上面的图片是否正确代表了代码?一世 相信原点和原点应该在图中反之亦然,因为它将原点初始化为originOne。如果我错了,请纠正我。
答案 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>