Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类中字符串的Java数组-Eclipse中的大括号错误_Java_Arrays_String_Curly Braces - Fatal编程技术网

类中字符串的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";
}