【问题标题】:Update static variables in java更新java中的静态变量
【发布时间】:2015-08-14 21:05:56
【问题描述】:

我有一个带有静态变量的类:

 class Commons { 
public static String DOMAIN ="www.mydomain.com"; 
public static String PRIVATE_AREA = DOMAIN + "/area.php";
} 

如果我尝试在运行时从 Android Activity(或另一个 java 类)更改 DOMAIN,则 DOMAIN 变量会更改,但 PRIVATE_AREA 不会更改。为什么?

【问题讨论】:

  • 不要引入可变静态变量 - 这是 java 中引入熵和可维护性问题的最糟糕的反模式之一

标签: java android static-variables


【解决方案1】:

这是因为静态变量只在执行开始时初始化一次。

查看更多信息:http://www.guru99.com/java-static-variable-methods.html

【讨论】:

    【解决方案2】:

    这是因为静态字段的分配在类加载(仅发生一次)到 JVM 时发生。当DOMAIN 变量更改时,PRIVATE_AREA 变量不会更新。

    public class Test {
        public static String name = "Andrew";
        public static String fullName = name + " Barnes";
        public static void main(String[] args){
            name = "Barry";
            System.out.println(name); // Barry
            System.out.println(fullName); // Andrew Barnes
        }
    }
    

    我建议你使用下面的结构。

    public class Test {
        private static String name = "Andrew";
        public static String fullName = name + " Barnes";
    
        public static void setName(String nameArg) {
            name = nameArg;
            fullName = nameArg + " Barnes";
        }
    
    }
    

    Test2.java

     public class Test2 {
    
        public static void main(String[] args){
            System.out.println(Test.fullName); // Andrew Barnes
            Test.setName("Barry");
            System.out.println(Test.fullName); // Barry Barnes
        }
    }
    

    【讨论】:

    • 有没有办法更新第二个变量或在其他类之间共享变量?
    • 考虑到您基本上使用的是 setter,我只建议首先使用 setter/getter 结构而不是静态。
    • @Wald 静态字段可能需要 OP 的代码。
    【解决方案3】:

    PRIVATE_AREA 没有更改,因为它是在声明时间设置的。当您更改 DOMAIN 时,它对 PRIVATE_AREA 没有影响。 也许使用 setter(...) 和 getter() 方法和局部变量会更好。获得 PRIVATE_AREA 后,您再次创建重新运行值。

    【讨论】:

      【解决方案4】:

      变量的赋值发生在类的加载时,这就是为什么之后如果你改变一个静态变量的值,它不会反映它被分配给另一个变量的位置

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 2012-09-12
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        相关资源
        最近更新 更多