【问题标题】:how do i change a variable in an others class that will change its value in all class in java我如何更改其他类中的变量,该变量将在java中的所有类中更改其值
【发布时间】:2014-04-01 19:49:07
【问题描述】:

有以下两个类:

class1

int a = 10;

public void Main(String[] args){
    System.out.println(a);   // will print "10"
    class2 c2 = new class2();
    class2.ChangeValue(a);
    System.out.println(a);   // will print "10" even after the value has
                             // been set to 20 in the other class
}

class2

public void ChangeValue(int a){
    a = 20;
    System.out.println(a)    // will print "20"
}

问题是,如何让这个值在所有类中都为 20,而不仅仅是更改它的类。

【问题讨论】:

  • 您在类 1 中打印 a 并在类 2 中更改 a。这两个 a 字段虽然名称相同,但区域完全不同。您可以将其设为静态。

标签: java class variables


【解决方案1】:

将该值设为静态,或仅使用单例模式。

【讨论】:

  • 我猜你的反对意见是建议使用单例模型。这不是随便建议的事情。但是,您对static 的推荐是正确的。
  • 是的,可能是这样,我不知道为什么有人对它进行了贬低,这就是生活。我认为我的回答不适合downwote。
  • 从设计的角度来看,使用在多个类之间共享的public static(或包可见的static)字段更糟糕
  • 我知道。我的建议是什么。
【解决方案2】:

class2的实现中,必须将class2.ChangeValue(a);改变的变量声明为static

每个类都存在一个静态类变量。所有其他类变量都将存在于该类的每个实例中。

如果你想在类之间进行协调,你必须自己在main 中进行。

【讨论】:

    【解决方案3】:

    您可以在第二类中创建一个静态并以这种方式访问​​它。

    第 2 类:

    static int a = 10;
    
    public void ChangeValue(){
        a = 20;
        System.out.println(a); //will print "20"
    }
    

    第 1 类:

     public static void main(String[] args){
        System.out.println(Class2.a); //will print "10"
        Class2 c2 = new Class2();
        c2.ChangeValue(Class2.a);
        System.out.println(Class2.a); //will print "10" even after the value has been set to 20 in
                               // the other class
    }
    

    反之亦然

    第 1 类:

    static int a = 10;
    public static void main(String[] args){
        System.out.println(a); //will print "10"
        Class2 c2 = new Class2();
        c2.ChangeValue(a);
        System.out.println(a); //will print "10" even after the value has been set to 20 in
                               // the other class
    }
    

    第 2 类:

    public void ChangeValue(){
        Class1.a = 20;
        System.out.println(Class1.a); //will print "20"
    }
    

    使用对象而不是原始类型的建议也可以。这样,您可以将对象作为参数传递,并且值会继续。

    【讨论】:

      【解决方案4】:

      您正在使用原始数据类型 int 传递给另一个方法并更改其值。基元总是按值传递。所以你总是会失去它在其他方法中改变的价值。两种缓解方法:

      1. 使用将通过引用传递的对象
      2. 将 int a 设为静态,然后在 {class1.a =20} 等其他方法中更改其值

      希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        对不起,这是不可能的,因为它们在不同的范围内,你放入类 2 中的“a”是一个形式参数并且是临时的,当 ChangeValue 完成时,“a”消失了,它们完全不同的世界。

        PS:你应该在类上使用大写,如 Class1、Class2,在方法上使用小写,changeValue。

        【讨论】:

          猜你喜欢
          • 2013-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-29
          • 1970-01-01
          • 1970-01-01
          • 2023-01-02
          相关资源
          最近更新 更多