在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中共享类属性 让我们考虑这个例子: 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

在调用getAttribute而不是1 1时,如何将该类更改为在输出中包含1 2


类似于全局变量,我尝试了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;
它必须在声明时或在类构造函数中初始化-这就是为什么不能在方法中为它赋值