简单的Java数组问题

时间:2011-04-19 12:37:56

标签: java arrays

为什么这会在另一个引发错误时起作用:

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));
    }
}

7 个答案:

答案 0 :(得分: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));
    }
}

答案 1 :(得分:1)

将数组init包含在静态init块中,如下所示:

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

答案 2 :(得分: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));
    }
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

等简单语句

因此,您必须将这些语句放入一个方法(可以由字段初始化程序调用)或初始化程序块中。

答案 5 :(得分:0)

我喜欢的语法如下(特别是长列表)

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

答案 6 :(得分:0)

原因很简单:

除非使用静态块,否则不能在类的声明中执行指令:

static {         names [0] =“詹姆斯”;         姓名[1] =“约翰”;         names [2] =“Mark”;     }

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

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

相关问题