【问题标题】:Static variable across multiple, different subclasses - corrected跨多个不同子类的静态变量 - 已更正
【发布时间】:2011-09-07 02:59:36
【问题描述】:

我想知道如果我定义一个基础 Activity 对象并将我的所有活动作为其子类会发生什么。然后我在基类中声明一个静态变量,是所有子类都使用相同的静态变量还是每个子类都有一个。

例如。我的基类:

public class MyBaseActivity extends Activity{

   static int myStatic;

   ... 
   ....

}

然后:

public class MyActivity1 extends MyBaseActivity {


   private void someMethod1(){
         myStatic = 1;
    }

   ... 
   ....

}

public class MyActivity1 extends MyBaseActivity {

   private void someMethod2(){
          if (myStatic == 1)
            doSomething();
    }

   ... 
   ....

}

如果我现在启动 MyActivity1 并在“myStatic”中设置一个值。然后它退出,然后我启动 MyActivity2 - 我是否仍然拥有第一个活动设置的值? 在上面的例子中,“if”语句是真还是假?

我知道,如果我多次实例化 Activity1,那么显然我会得到相同的静态变量。但是,这里我每次都实例化一个不同的子类。

我的印象是这就是发生在我身上的事情,但我想确定一下。

【问题讨论】:

    标签: java android static


    【解决方案1】:

    静态是静态的。它们将引用同一个对象。

    【讨论】:

      【解决方案2】:

      静态变量属于 Class 对象,而不是实例。只有一个 Class 对象(针对那个类),所以静态变量只有一个实例,所以“是的,它们都看到同一个变量”。

      如果变量是受保护的或公共的,子类可以看到变量。

      【讨论】:

        【解决方案3】:

        如果我现在启动 MyActivity1 并且它设置 “myStatic”中的一个值。然后退出 然后我启动 MyActivity2 - 应该 我仍然有设置的值 第一次活动?在上面的例子中, “如果”陈述是真的还是 假的?

        所有子类将共享相同的static 类实例。所以if 声明是正确的

        【讨论】:

          猜你喜欢
          • 2011-10-04
          • 2016-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-15
          • 1970-01-01
          • 2020-11-09
          相关资源
          最近更新 更多