当我创建两个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
}
}
}
答案 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 和指数