2011-04-19 67 views
2

为什么这项工作,而另一个引发错误:简单的Java数组问题

import java.util.*; 

//This works fine 
public class ArrayTest { 
    public static String[] names = {"James", "John", "Mark"}; 
    public static void main(String args[]){ 
     System.out.print("Names: " + Arrays.toString(names)); 
    } 
} 

//But why does this not? 
public class ArrayTest { 
    public static String[] names = new String[3]; 
    names[0] = "James"; 
    names[1] = "John"; 
    names[2] = "Mark"; 
    public static void main(String args[]){ 
     System.out.print("Names: " + Arrays.toString(names)); 
    } 
} 
+2

尝试放置名称[0] =“James”; names [1] =“John”; names [2] =“Mark”;主要内部。 – ColWhi 2011-04-19 12:40:50

+0

尝试将'names [number]'块放入'static {}'块中。 – 2011-04-19 12:40:50

+1

您不能在方法/构造函数/构造方法之外具有任意语句。 – 2011-04-19 12:41:22

回答

1

括阵列初始化静态初始化块内像如下:

static { 
names[0] = "James";  
names[1] = "John";  
names[2] = "Mark"; 
} 
+0

我不知道你能做到这一点。 – enchance 2011-04-19 12:43:27

+0

检查http://download.oracle.com/javase/tutorial/java/javaOO/initial.html – 2011-04-19 12:44:51

4

试试这样说:

public class ArrayTest { 
    public static String[] names; 

    static 
    { 
     names = new String[3]; 
     names[0] = "James"; 
     names[1] = "John"; 
     names[2] = "Mark"; 
    } 

    public static void main(String args[]){ 
     System.out.print("Names: " + Arrays.toString(names)); 
    } 
} 
+0

谢谢您的纠正,Stephen C.非常感谢。 – duffymo 2011-04-19 13:08:09

0

把初始化静态块。否则只有在实例化该类型的对象时才运行它。

1

不能将值分配给在类声明阵列。你必须在一个方法体内完成,例如main方法。

public class ArrayTest { 

    public static String[] names = new String[3]; 

    public static void main(String args[]) { 
     names[0] = "James"; 
     names[1] = "John"; 
     names[2] = "Mark"; 
     System.out.print("Names: " + Arrays.toString(names)); 
    } 
} 

或者自己在这样一个静态块:

public class ArrayTest { 

    public static String[] names = new String[3]; 

    static { 
     names[0] = "James"; 
     names[1] = "John"; 
     names[2] = "Mark"; 
    } 

    public static void main(String args[]) {   
     System.out.print("Names: " + Arrays.toString(names)); 
    } 
} 
0

第二个是无效的语法。类声明只能包含字段定义,方法定义,嵌套类定义和初始化块,但不是纯之类的语句names[0] = "James";

因此,你必须把那些语句到一个方法(可以通过一个字段初始被称为)或初始化块。

0

我喜欢的语法如下(尤指长的列表。)

public static final String[] names = "James,John,Mark".split(","); 
0

的原因很简单:

在类的声明不能执行指令,除非你使用一个静态块如:

static { names [0] =“James”; names [1] =“John”; names [2] =“Mark”; }

但请注意,当Java虚拟机加载类时,会执行一次静态块。

因此,如果您创建了多个类的实例,那么该静态块仍然只能执行一次。