2011-06-02 63 views
11

我想知道如果我将所有活动定义为基本Activity对象作为其子类,会发生什么情况。然后我在基类中声明一个静态变量,所有的子类将使用SAME静态或每个子类都会有一个。跨多个不同子类的静态变量 - 已更正

例如。我的基类:

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然后显然我会得到相同的静态变量。但是,在这里我每次都实例化一个不同的子类。

我得到的印象是,这是发生在我身上,但想要确定。

回答

11

静态是静态的。他们会引用同一个对象。

4

如果我现在启动MyActivity1并将“myStatic”中的值设置为 。然后它退出 ,然后我开始MyActivity2 - 应该 我仍然有由 第一个活动设置的值?在上面的例子中, 会使“if”语句为真或 为false?

所有子类将共享相同的static类实例。所以if声明为真

5

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

子类在变量受保护或公开时具有可见性。