數組的初始化
寫在開始的話”:重構即重寫代碼,以使得它更可讀、更容易理解,並因此更具有維護性。軟件最大的投入到了代碼的維護上,所以磨刀不誤砍柴工。
數組只是相同類型的、用一個標識符名稱封裝到一起的對象序列或基本類型數據序列。
數組有三種初始化方式
第一種
Integer[] a = new Integer[20];
它現在還只是一個引用數組,直到通過創建新的Integer對象,並把對象賦值給引用,初始化進程纔算結束。要是基本類型,會自動初始化成空值。
另外,打印數組時,可使用數組工具類import java.util.Arrays; Arrays.toString()方法答應,或自己重寫toString()方法。
第二種
Integer[] a = {new Integer(2),new Integer(3)};
第三種
Integer[] a = new Integer[]{new Integer(2),new Integer(3),};
在後邊兩種初始化列表的最後一個逗號都是可選的,這一特性維護長列表變得更容易
儘管第一種形式很有用,當他也更加受限,因爲只能用於數組被定義之處,你可以在任何地方使用第二種和第三種形式,甚至在方法調用的內部。
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
Other.main(new String[]{"fiddle","de ","dum"});
}
}
class Other {
public static void main(String[] args) {
for(String s:args)
System.out.print(s+" ");
}
}
結果
fiddle de dum
從這個例子中可以看出 public 是主程序如口的函數,並且和程序名相同,並且只能有一個
Public。Other只是一個普通的函數
爲Other.main() 的參數而創建的數組時在方法調用處創建的。
可變參數列表
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
Other.main("fiddle","de ","dum");
Other.main("one","two");
Other.main("1","2");
Other.main();
}
}
class Other {
public static void main(Object... args) {
for(Object s:args){
System.out.print(s+" ");
}
System.out.println();
}
}
結果
fiddle de dum
one two
1 2
有了可變參數,就再也不用顯示的編寫數組語法了。當你指定參數時,編譯器實際會爲你去填充數組,你獲得的仍舊是一個數組,這就是爲什麼Print()可以使用foreach來迭代該數組的原因。當是這不僅僅是從元素列表到數組的自動轉換。最後一行程序表明將0個參數傳遞給可變參數列表是可行的。
可變參數列表變爲數組的情況,並且如果在該列表中沒有任何元素,那麼轉變成的數據的尺寸爲0.
System.out.println(new Integer[]{1}.getClass());
System.out.println(new int[]{1}.length);
System.out.println(new int[0].getClass());
class [Ljava.lang.Integer;
1
class [I
System.out.println(new Integer(2).getClass());
class java.lang.Integer
getClass()方法屬於Object的一部分,他將產生對象的類,並且在打印該類時,可以看到表示該類類型的編碼字符串。前導的“[”表示這是一個後邊緊隨的類型的數組,而緊隨的“I”表示基本類型int。使用可變參數列表不依賴自動包裝機制,而實際上使用的事基本類型。可以在單一的參數列表中將類型混合在一起,而自動包裝機制將有選擇的將int參數提升爲Integer。
可變參數列表使得重載過程變的複雜了。
所以你給這重載方法都添加一個非可變參數,就可以避免錯誤。