gpt4 book ai didi

java - 通过第二类和第三类更改类变量

转载 作者:行者123 更新时间:2023-11-29 06:47:53 25 4
gpt4 key购买 nike

我正在做一个个人项目,同时也在试验它。我在 3 个文件中包含 3 个类:Calculate.java、Geometry.java 和 Test.java。

Geometry.java 到目前为止只包含一些我想使用的变量,get/set 方法以及构造方法。

package project;  
public class Geometry {
public static double length, width;
public Geometry() {
this.setLength(20);
this.setWidth(30);
}
public void setLength(double length){
this.length = length;
}
public void setWidth(double width){
this.width = width;
}
public double getLength(){
return this.length;
}
public double getWidth(){
return this.width;
}
}

Calculate.java 有一个 Geometry 类型的公共(public)变量和一个处理我在 Geometry.java 中创建的变量的方法。

package project;  
import project.Geometry;
public class Calculate {
public static Geometry figure = new Geometry();
public static double area;
public void calcArea(){
this.area = figure.getLength() * figure.getWidth();
}
public double getArea(){
return this.area;
}
}

最后,我在 Test.java 中创建了一个 Calculate 类型的变量 c1。

package project;  
import project.Calculate;
public class Test{
public static void main(String[] args){
Calculate c1 = new Calculate;
Calculate c2 = new Calculate;
c1.figure.setLength(55);
c2.figure.setLength(75);
System.out.println("L1: "+c1.figure.getLength()+" L2: "+c2.figure.getLength());
}
}

控制台输出为:“L1:75 L2:75”

我对输出的解释是 c1.figure 和 c2.figure 正在将数据写入内存中的同一空间,因此,当我调用 c2.figure.setLength(75) 时,它也发生了变化c1.figure.length.

当我第一次编写这段代码时,我假设 c1.figurec2.figure 会保持它们自己独立的值,但它们并没有。有没有办法实现这一点(让 c1.figurec2.figure 保持它们自己的值而不改变另一个)?

PS:第一次在这里发帖,如果格式有误,敬请见谅。

最佳答案

public static Geometry figure = new Geometry();

创建一个 Geometry 对象,无论您有多少个Calculate 实例。删除 static 关键字(每个类强制一个实例),每个 Calculate 对象将包含一个 Geometry

这同样适用于您的 area 成员,以及 Geometry 对象中的 lengthwidth。我不认为在这种情况下您在任何地方都需要静态(实际上,我很少在小项目中需要它)。

这是 tutorial section on instance variables ,值得一读。

关于java - 通过第二类和第三类更改类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519899/

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