我对编程很陌生,所以我确信这是一个简单的答案。
基本上,在我的主要方法中,我想这样做:
...
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]为空。如何让它填充其他类的字段?提前谢谢!
答案 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并删除分号。