[英]can i initialize an array outside the method just like we initialize a member/field variable
我想在實例級別初始化數組,但我無法在這里初始化代碼
public class Arrays {
/** Creates a new instance of Arrays */
int []arr2=new int[2];
arr2[0]=20;//error at compile time
arr2[1]=30;//error
public Arrays() { }
public static void main(String []args)
{
System.out.println("Element at 0th position is "+arr2[0]);
System.out.println("Element at 1th position is "+arr2[1]);
}
}
如果你想在宣布它為類成員的同時進行初始化,就這樣做
class MyClass{
int []arr2={20,30};
}
以下是一個聲明,你不能在你想要做的地方寫聲明
arr2[0]=20;//error at compile time
這是初始化的方法
int[] arr2 = { 20, 30 };
為了完整,不美觀,以下將起作用:
public class Arrays {
int []arr2=new int[2];
// this is a field definition
{ // and this is a dynamic initializer,
// it runs after the constructor's
// first line
arr2[0]=20;
arr2[1]=30;
}
}
但是,當然最好的做法是初始化數組,如其他答案所示。
並回答這個問題:
在Class級別,只允許以下內容:
不允許使用語句,它們必須嵌套在上述其中一個語句中。
關於Adriaan Koster的評論:
它們被稱為實例初始化塊。 “靜態”的反面是OO中的“實例”,而不是“動態”。
沒錯,實例是更好的OO術語。 但在語言上,動態與靜態相反,所以我會堅持動態。
實例初始化程序塊由編譯器復制到每個構造函數中,並在構造函數代碼之前運行,而不是在之后運行。
實際上,它們被復制到第一行之后的構造函數中(隱式或顯式this()
或super()
調用)。 所以從技術上講,我們要么是對的,要么都是錯的(初始化程序在第一行之后運行,然后在其余部分運行)。
澄清(關於第一行):
this(args)
或超類的構造函數( super(args)
)開始。 如果您不編寫其中一行,編譯器將插入不帶參數的super()
調用。 所以每個構造函數至少有一個語句。 初始化程序在初始語句之后運行。 參考:
代碼如arr2[0]=20;
不能放在類級別,它必須在方法或代碼塊內。 幸運的是,Java允許int [] arr = {20,10};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.