如何访问静态变量Java的更改值

时间:2014-12-26 09:00:04

标签: java static-variables

在下面的示例中:

class Foo {
    public static String[] listofimages = new String[]{};

    public static void main(String[] args) {

        for(int i = 1; i <= 3; i++) {
                   listofimages[i] = //some image that I am adding to it
        }

    }
}

我正在尝试访问另一个类Foobar中新修改的listofimages变量(见下文):

class Foobar(){
    public void someClass{
        Foo.listofimages //trying to access the newly modified listofimages variable with values in it
}

以上代码对我不起作用。我很困惑如何访问新修改的静态变量listofimages,在未声明的类中,类Foobar。非常感谢任何帮助,谢谢! :)

3 个答案:

答案 0 :(得分:3)

如果要初始化静态数组,如 - listofimages = new String[]{},则它是一个空数组,listofimages[i]将始终抛出异常。您应该使用正长度对其进行初始化,并仅分配给该数组的有效索引。

至于从不同的类访问该数组,Foo.listofimages应该有效(尽管Foo类必须是公共的才能对属于其他包的类可见。)

答案 1 :(得分:1)

当您第一次静态引用类时,会初始化其所有静态变量。在这种情况下,引用Foo具有初始化阵列的效果。但是,它是空的(因为长度为零)。

即使您在main方法中添加元素,也不会在引用listofimages之前调用它。因此,它仍然是空的,并且引用不具有索引的数组中的索引会抛出异常。

要解决此问题,您需要:

  • 将数组初始化为特定大小
  • 确保在访问阵列之前调用main
  • 静态初始化数组,包括其所有元素。

然而,看起来你似乎是Java的新手,我想指出你设计的一些怪癖。如果你有一个静态变量,那么你表示变量应该是静态的,就像你的类的所有实例具有相同的唯一值一样。实质上:对于所有Foo个实例,listofimages应始终具有相同的内容,并且所有引用应指向同一实例。从Java开始时,您不太可能需要此构造。我建议你简单地宣布它是公开的吗?然后你可以将初始化移到Foo的构造函数中,你就可以避免你面临的问题。

答案 2 :(得分:1)

在类加载时,所有静态变量都被初始化......在这种情况下,数组listofimages也被初始化(尽管它是空的)。 现在,当您调用类someClass的方法Foobar时,您正尝试访问已初始化但空listofimages

解决方案:

要么确保在访问someClass方法之前调用main方法,以便可以填充数组,或者您可以执行的操作是初始化数组,如:

public static String[] listofimages = {"a","b"};