在Java中共享类属性 让我们考虑这个例子: public class Shared { private int attribute; public Shared() {} public void incrementAttribute(int i) { attribute += i; } public int getAttribute() { return attribute; } public static void main(String[] args) { Shared s1 = new Shared(); Shared s2 = new Shared(); s1.incrementAttribute(1); s2.incrementAttribute(1); s1.getAttribute(); s2.getAttribute(); } }
在调用getAttribute而不是1 1时,如何将该类更改为在输出中包含1 2在Java中共享类属性 让我们考虑这个例子: public class Shared { private int attribute; public Shared() {} public void incrementAttribute(int i) { attribute += i; } public int getAttribute() { return attribute; } public static void main(String[] args) { Shared s1 = new Shared(); Shared s2 = new Shared(); s1.incrementAttribute(1); s2.incrementAttribute(1); s1.getAttribute(); s2.getAttribute(); } },java,class,attributes,share,Java,Class,Attributes,Share,在调用getAttribute而不是1 1时,如何将该类更改为在输出中包含1 2 类似于全局变量,我尝试了final关键字,但无法使用方法设置某些内容。您需要将属性设置为静态 声明为静态的成员将在类的所有实例之间共享 此外,要使其输出12,您需要更改 s1.incrementAttribue(1); s2.incrementAttribue(1); System.out.println(s1.getAttribute()); System.out.println(s2.getAttribute
类似于全局变量,我尝试了final关键字,但无法使用方法设置某些内容。您需要将属性设置为静态 声明为静态的成员将在类的所有实例之间共享 此外,要使其输出12,您需要更改
s1.incrementAttribue(1);
s2.incrementAttribue(1);
System.out.println(s1.getAttribute());
System.out.println(s2.getAttribute());
到
您需要将属性设置为静态 声明为静态的成员将在类的所有实例之间共享 此外,要使其输出12,您需要更改
s1.incrementAttribue(1);
s2.incrementAttribue(1);
System.out.println(s1.getAttribute());
System.out.println(s2.getAttribute());
到
将属性变量设置为静态。将属性变量设置为静态。由于属性是一个实例字段,因此创建的每个对象都有一个属性字段实例。因此,当您创建两个对象s1和s2时,它们都有单独的属性字段
如果你想让类的所有实例共享值,你需要有类级字段,你必须将属性变量声明为静态,它的值将取决于所有实例对增量方法的调用。因为你的属性是一个实例字段,创建的每个对象都有一个属性字段实例。因此,当您创建两个对象s1和s2时,它们都有单独的属性字段
如果要让类的所有实例共享值,则需要有类级字段,必须将其属性变量声明为static,它的值将取决于实例对increment方法的所有调用。您实际上用Java中的问题标题共享类属性暗示了解决方案 在您的示例中,属性是一个实例变量,这意味着共享类s1和s2的每个实例都会获得自己的变量副本,并且它们会独立更新 您需要的是一个类变量,即在一个类的所有实例之间共享的东西。在Java中,这也称为静态变量。将static关键字添加到属性变量的声明中,以将其从实例变量更改为类变量:
public class Shared {
private static int attribute;
public Shared() {}
public void incrementAttribute(int i) {
attribute += i;
}
public int getAttribute() {
return attribute;
}
public static void main(String[] args) {
Shared s1 = new Shared();
Shared s2 = new Shared();
s1.incrementAttribute(1);
System.out.println(s1.getAttribute());
s2.incrementAttribute(1);
System.out.println(s2.getAttribute());
}
}
-请注意,您还需要在递增值后立即打印出该值,否则将得到输出2。您实际上用Java中的问题标题共享类属性暗示了解决方案 在您的示例中,属性是一个实例变量,这意味着共享类s1和s2的每个实例都会获得自己的变量副本,并且它们会独立更新 您需要的是一个类变量,即在一个类的所有实例之间共享的东西。在Java中,这也称为静态变量。将static关键字添加到属性变量的声明中,以将其从实例变量更改为类变量:
public class Shared {
private static int attribute;
public Shared() {}
public void incrementAttribute(int i) {
attribute += i;
}
public int getAttribute() {
return attribute;
}
public static void main(String[] args) {
Shared s1 = new Shared();
Shared s2 = new Shared();
s1.incrementAttribute(1);
System.out.println(s1.getAttribute());
s2.incrementAttribute(1);
System.out.println(s2.getAttribute());
}
}
-请注意,您还需要在递增值后立即打印出该值,否则将得到输出2。如果将变量设为静态,则该变量将由类的所有实例共享,这是您在示例中所需要的。为了澄清您尝试的final关键字,final关键字用于标记只能初始化一次的变量。对于类成员变量,如上面定义的变量:
private int attribute;
它必须在声明时或在类构造函数中初始化-这就是为什么不能在方法中为它赋值 如果将变量设为静态,则该类的所有实例都将共享该变量,这是您在示例中所需要的。为了澄清您尝试的final关键字,final关键字用于标记只能初始化一次的变量。对于类成员变量,如上面定义的变量:
private int attribute;
它必须在声明时或在类构造函数中初始化-这就是为什么不能在方法中为它赋值