【发布时间】:2009-10-05 12:49:03
【问题描述】:
我正在做一个个人项目,同时也在试验它。我在 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 类型的公共变量和一个处理我在 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.figure 和c2.figure 会保持各自独立的值,但事实并非如此。有没有办法实现这一点(让c1.figure 和c2.figure 保持自己的价值观而不改变另一个)?
PS:我第一次在这里发帖,如果我搞砸了格式,我提前道歉。
【问题讨论】: