Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过第二类和第三类更改类变量_Java_Class_Variables - Fatal编程技术网

Java 通过第二类和第三类更改类变量

Java 通过第二类和第三类更改类变量,java,class,variables,Java,Class,Variables,我正在做一个个人项目,同时也在做实验。我在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.s

我正在做一个个人项目,同时也在做实验。我在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.图
c2.图
在不改变其他值的情况下保持自己的值)

PS:我第一次在这里发帖,如果我把格式弄错了,我会提前道歉

public static Geometry figure = new Geometry();
创建一个几何体对象,而不管有多少个计算实例。删除
static
关键字(每个类强制一个实例),每个
Calculate
对象将包含一个
Geometry

这同样适用于
区域
成员,以及几何体对象中的
长度
宽度
。我认为在这个场景中,您不需要在任何地方使用静态数据(事实上,我很少在小项目中使用静态数据)

这是一本值得一读的书

创建一个几何体对象,而不管有多少个计算实例。删除
static
关键字(每个类强制一个实例),每个
Calculate
对象将包含一个
Geometry

这同样适用于
区域
成员,以及几何体对象中的
长度
宽度
。我认为在这个场景中,您不需要在任何地方使用静态数据(事实上,我很少在小项目中使用静态数据)


以下是值得一读的问题。

+1因为
静态
导致了问题。请注意,
Geometry
类也将其长度和宽度声明为静态变量,这也需要修复(否则在下一级引用中会出现相同的问题)。@Brian Agnew-感谢您的快速回答。我已经做了修改,一切都按计划进行。感谢您提供的链接,在我继续编码之前,我会先阅读一下。@dtsazza-感谢您对格式的编辑和对静态问题的澄清。+1因为
static
导致了这个问题。请注意,
Geometry
类也将其长度和宽度声明为静态变量,这也需要修复(否则在下一级引用中会出现相同的问题)。@Brian Agnew-感谢您的快速回答。我已经做了修改,一切都按计划进行。感谢您提供的链接,在我继续编码之前,我会先阅读一下。@dtsazza-感谢您对静态问题的格式编辑和澄清。