类中字符串的Java数组-Eclipse中的大括号错误
我一直在寻找这个问题,也看到了一些类似的问题,但不是这个问题(反正我可以找到) 我在这两条语句前后的行中收到一个大括号/分号错误。它们是类的成员(不在类方法中)。当我删除数组赋值行(第二行)时,大括号/分号错误消失。我目瞪口呆,但我知道有一个简单的答案类中字符串的Java数组-Eclipse中的大括号错误,java,arrays,string,curly-braces,Java,Arrays,String,Curly Braces,我一直在寻找这个问题,也看到了一些类似的问题,但不是这个问题(反正我可以找到) 我在这两条语句前后的行中收到一个大括号/分号错误。它们是类的成员(不在类方法中)。当我删除数组赋值行(第二行)时,大括号/分号错误消失。我目瞪口呆,但我知道有一个简单的答案 public class Test { private int var1 = 1; // These are the troublesome lines public String[] name = new String
public class Test {
private int var1 = 1;
// These are the troublesome lines
public String[] name = new String[10];
name[0] = "Mary"; // When I remove this line, both the errors go away
public int var2 = 10;
}
我在Eclipse(Juno)中遇到的错误有:
Syntax error on token ";", { expected after this token
…在“var1”行上的错误上,以及:
Syntax error, insert "}" to complete Block
…在“var2”线上
我做错了什么?我尝试过不同的差异,比如:
(String) name[0] = "Mary";
…等等。问题是这句话:
name[0] = "Mary";
不在方法、构造函数或实例初始值设定项中。只有声明(和初始值设定项)可以位于类的顶层,而不是语句
我建议你把它放在构造器里
public Test() {
names[0] = "Mary";
}
在java中,必须将语句放入方法/块中
比如说
public class TestB {
public String[] s = new String[10];
{
s[0] = "10";
}
}
实际上是合法的(但我不会使用它,除了静态成员)
编辑:关于静态成员的澄清
通常我们必须使用纯静态对象,在这种情况下,提供初始化的简单方法是使用匿名静态块。比如:
public class TestStatic {
private String [] someStaticStringArray = new String [10];
static {
someStaticStringArray[0] = "foo";
someStaticStringArray[1] = "bar";
}
// Or better with static HashMaps
private static HashMap<String, String> hm = new HashMap<String, String>();
static {
hm.put("key", "val");
hm.put("key2", "val2");
hm.put("key3", "val3");
}
}
尝试以下解决方案:
public String[] name = new String[10];
// instance initializer code block comes
{
name[0] = "Mary";
}
这个代码块类似于静态初始化程序块(
static{…}
),但在初始化变量时在实例化时执行。我考虑过这一点,但数字不是顺序的-有没有办法做到这一点?例如:名称[0]=“Mary”,名称[5]=“Bob”,…没有一堆空值?更新了答案-可能您想到了这种构造。如果您不喜欢空值,可以将空值替换为“”(空白字符串)。对于索引0=“Mary”和5=“Bob”do:public String[]name=新字符串[]{“Mary”、“Mary”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob”、“Bob;谢谢,虽然不是很可读,我想我会传递这个方法-谢谢你的回答…这些值是静态的,有点像,它们是从一个多语言的XML文件中读取的-类似于Android,等等,这不会是一个问题。我指的是静态数据成员初始化。我将编辑澄清。每个人都是对的-我给了你们所有的选票。就斯基特先生的书的格式是最好的,就好像我是从一本参考书上读的一样,因此,为了未来用户寻求这个话题的“最佳答案”,我不得不和他一起去。但真的谢谢你们所有人@你说的“匿名代码块”是什么意思?我怀疑这就是我所说的初始化程序块。和
public class TestC {
// Static data member, constructor does not read data from XML
private static YourDataObject obj = new YourDataObject();
public static YourDataObject getInstance(String xmlFile) {
// Read XML file
// Actually initialize the instance
obj.set...(); //
// return the instance
return obj;
}
}
public String[] name = new String[10];
// instance initializer code block comes
{
name[0] = "Mary";
}