繁体   English   中英

简单的Java数组问题

[英]Simple Java array question

为什么在其他人抛出错误时起作用:

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

像这样尝试:

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

将数组init封装在静态init块内,如下所示:

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

您不能在类声明中为数组分配值。 您必须在方法主体(例如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));
    }
}

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

第二个是无效的语法。 类声明只能包含字段定义,方法定义,嵌套的类定义和初始化程序块,而不能包含诸如names[0] = "James";等简单语句names[0] = "James";

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

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

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

原因很简单:

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

静态{名称[0] =“詹姆斯”; names [1] =“ John”; names [2] =“标记”; }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM