从另一个类调用string []显示为null

时间:2012-03-01 20:01:23

标签: java arrays class

我对编程很陌生,所以我确信这是一个简单的答案。

基本上,在我的主要方法中,我想这样做:

...

wordtime = new LabelField("" + DataStored.words[0]);

...

现在在DataStored类中我有: ...

public static String[] words;
{
    words = new String[2];

    words[0] = "Oil sucks!";
    words[1] = "Do you know that I can talk?";
}

...

因此,每当我尝试编译程序时,它都会在主类中停止,因为DataStored.words [0]为空。如何让它填充其他类的字段?提前谢谢!

5 个答案:

答案 0 :(得分:6)

您已经在那里编写了初始化程序块 - 每次创建DataStored的新实例时都会执行初始化程序块,但> 。我怀疑你想要:

public static String[] words = { "Oil sucks!", "Do you know that I can talk?" };

拥有这样的公共字段也是一个坏主意,至少除了常量之外的其他任何东西(在我的视图中包含不可变类型)。

(我怀疑这在编译时失败了 - 这是执行时间失败。值得清楚的是差异。)

答案 1 :(得分:4)

您正在words中的非静态初始化块中初始化DataStored。这意味着words不会被初始化,直到您实际构建 DataStored的实例,这可能不是您想要的。

您需要创建初始化块 static ,如下所示:

public static String[] words;
static { // <---------------------
    words = new String[2];

    words[0] = "Oil sucks!";
    words[1] = "Do you know that I can talk?";
}

这将导致在DataStored加载时运行块。

答案 2 :(得分:1)

如果要正确初始化words,则需要在静态块中执行此操作,该块在加载类后立即运行。您使用的初始化程序块仅在创建类的实例时运行,就在调用构造函数之前。因此,当您致电DataStored.words[0]时,初始化程序尚未运行,words仍然为空。

public static String[] words;

static
{
    words = new String[2];

    words[0] = "Oil sucks!";
    words[1] = "Do you know that I can talk?";
}

或者您可以这样做:

 public static String[] words = new String[]{"Oil sucks!","Do you know that I can talk?"};

或更短的时间:

 public static String[] words = {"Oil sucks!","Do you know that I can talk?"};

答案 3 :(得分:1)

如果在类DataStored中定义静态块初始化这两个变量。你可以访问它。

Class DataStored {

public static String [] words;

静态{

words[0] = "Oil sucks!";
words[1] = "Do you know that I can talk?";

}

}

答案 4 :(得分:-1)

  

public static String [] words; {       words = new String [2];

words[0] = "Oil sucks!";
words[1] = "Do you know that I can talk?"; }

如果你想用它来初始化words而不是声明一个String数组,那么在方法标题中的单词之后添加parathesis并删除分号。