gpt4 book ai didi

java - 需要帮助理解实例变量

转载 作者:行者123 更新时间:2023-12-03 23:01:22 24 4
gpt4 key购买 nike

我的类中有这些实例变量:

private int x1 = 0;
private int y1 = 0;
private int x2 = 0;
private int y2 = 0;
private int height = y2 - y1;
private int width = x2 - x1;

在我的程序中,我使用了改变 xy 的方法,所以我期望 heightwidth 也要改变。然而,他们没有。有人可以解释为什么会这样,以及如何在更改 xy 的方法调用后使它们的值“更新”?

最佳答案

你的表达式 private int height = y2 - y1; 在初始化实例变量时被评估:即当类被实例化时。从那时起,它什么都不做——它不以任何方式“链接”到表达式的源部分,并且在它们更新时不更新。

您可能需要类上的方法(public 如果它在类外部使用,private 否则),如下所示。您可以去掉 heightwidth 字段:

public int getHeight() { return this.y2 - this.y1; }

但是,如果您决定内部仍然需要宽度和高度,我会将其更改为名为 calculateHeightprivate 方法。称为 getXYZ 的方法通常是字段的访问器,而不是变异方法。然后,您可以在更改 y2、y1、x2、x1 的字段值时调用它(或等效的 calculateWidth())。

public int getHeight() { return this.height; }
private int calculateHeight() { return this.y2 - this.y1; }
...
this.y2 = this.y2 + 10;
this.height = calculateHeight();

顺便说一句,无论 y2 大于还是小于 y1,宽度和高度都是正数。您可以使用 Math.abs去除减法结果上的符号:

public int getHeight() { return Math.abs(y2 - y1); }

我的偏好是使用单一方法将高度和宽度作为尺寸返回。这两个值实际上是某个时间点的单个数据。你可以使用 java.awt.Dimension为此:

public Dimension getDimension() {
new Dimension(Math.abs(x2 - x1), Math.abs(y2 - y1));
}

关于java - 需要帮助理解实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28255388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com