新创建的对象将覆盖另一个对象变量

时间:2015-12-28 06:27:05

标签: java constructor

当我创建两个Function对象时,第一个中的值会被分配给第二个对象的值覆盖。

我对Java对象创建有什么误解?

public class Function { 

private static double coefficient;
private static int startX;
private static int endX;
private static int exponent;


protected Function(double coefficient, int startX, int endX, int exponent) {
    this.coefficient = coefficient;
    this.startX = startX;
    this.endX = endX;
    this.exponent = exponent;

  }  

    public static void main(String[] args) {

    Function func1 = new Function(2, 1, 2, 2); 

    Function func2 = new Function(0,1,2,1/3);

    // now func1 properties are the same as func2
      } 
   }
}

5 个答案:

答案 0 :(得分:0)

静态变量对所有对象都是通用的,因此两个对象的值相同。从类字段中删除static关键字。

对于前。

private double coefficient;
...

答案 1 :(得分:0)

将您的代码修改为以下

public class Function { 

private double coefficient;
private int startX;
private int endX;
private int exponent;


protected Function(double coefficient, int startX, int endX, int exponent) {
    this.coefficient = coefficient;
    this.startX = startX;
    this.endX = endX;
    this.exponent = exponent;

  }  

    public static void main(String[] args) {

    Function func1 = new Function(2, 1, 2, 2); 

    Function func2 = new Function(0,1,2,1/3);

    // now func1 properties are the same as func2
      } 
   }
}

您已完成的代码,您正在创建static个变量,这些变量仅为应用程序创建一次。因此,每次它都会覆盖该值。

答案 2 :(得分:0)

您的对象似乎具有相同的值,因为您的属性为static,它们附加到,而不是对象

通常,对象构造函数不应该操纵static成员变量。

答案 3 :(得分:0)

您将自己的字段声明为static,因此他们已经分享了#34;在Function的所有实例中。这是定义。

相反,只需删除static修饰符,它就可以正常工作。你可以在类的所有方法中访问非静态成员,没问题!

编辑:对于static方法也是如此,如果他们需要处理非静态成员,只需删除static修饰符。

答案 4 :(得分:0)

系数 startX endX exponent 您班级的所有字段都是静态的。静态变量是类变量,这意味着它由类的所有实例共享函数

这就是它显示数据字段最新值的原因。

要修改代码,只需从所有数据字段中删除静态关键字,这将使它们成为实例变量,然后您的类的每个实例都有自己的系数副本, startX endX 指数