簡體   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