1. 程式人生 > >Chapter5_初始化與清理_數組初始化與可變參數列表

Chapter5_初始化與清理_數組初始化與可變參數列表

object 包裝 可視化 使用 first ble 對象 log 方式

一、數組初始化

  數組是相同類型的,用一個標識符名稱封裝到一起的一個對象序列或基本類型數據序列。編譯器是不允許指定數組的長度的,當使用語句int[] a時,擁有的只是一個符號名,即一個數組的引用,並不擁有這個數組的存儲空間。要獲取數組的存儲空間,必須要寫初始化表達式,最樸素的表達式類型如下

1 int[] a = {1,2,3};

  如果在編寫程序時,不能確定數組的長度,可以使用如下方式,直接用new在數組裏創建元素

1 int[] a = new int[3];

  當創建對象數組時,數組中的元素僅僅是對象的引用,當試圖使用數組中的空引用時,會引起編譯器運行期錯誤,這是需要註意的,可以使用用花括號括起來的列表初始化對象數組。

1 Integer[]  = {
2     new Integer(1),
3     new Integer(2),
4     3,        
5 }

  數組類型還有兩個使用很多的方法,一個是length()方法,用來返回數組的長度,一個是.toString()方法,會將數組以可視化的方法打印出來。

二、可變參數列表

  先舉一個可變參數的例子。

 1 class A{
 2     
 3 }
 4 
 5 public class test{
 6     static void print(Object... args){
 7         for(Object obj:args){
8 System.out.print(obj + " "); 9 } 10 System.out.println(); 11 } 12 public static void main(String args[]){ 13 print(new Integer(1), new Float(2.0), new Double(3.0)); 14 print("a", "b", "c"); 15 print(new A(), new A(), new A()); 16 } 17 18
}

1 1 2.0 3.0 2 a b c 3 [email protected] [email protected] [email protected]

  這種方法的效果是可變參數列表和自動包裝機制的和諧共處,使用了可變參數列表,當指定參數類型後,編譯器會給你自動填充數組,即允許將一組事物當做列表傳遞給一個數組,並且將空參數列表傳遞給可變參數列表是可行的。除了object類型的參數列表,參數列表可以使用任何類型的參數,包括基本類型。

  使用可變參數列表,會使重載過程變得更加復雜,需要註意這種復雜帶來的問題,以下是一個例子。

 1 public class test{
 2     static void f(Character... args){
 3         System.out.print("first");
 4         for(Character c:args){
 5             System.out.print(c + " ");
 6         }
 7         System.out.println();
 8     }
 9     
10     static void f(Integer... args){
11         System.out.print("first");
12         for(Integer c:args){
13             System.out.print(c + " ");
14         }
15         System.out.println();
16     }
17     
18     static void f(Long... args){
19         System.out.print("third");
20     }
21     
22     public static void main(String args[]){
23         f(‘a‘, ‘b‘, ‘c‘);
24         f(1);
25         f(2, 1);
26         f(0);
27         f(0l);
28         //f();
29     }
30     
31 }

  在這種情況下,不能調用f()方法,因為編譯器會不知道該調用哪個方法了,這是可變參數列表帶來的潛在的隱患。為了解決這種隱患,可以給每個參數列表都添加一個非可變參數,例如:

1 static void f(Integer i,Integer... args); 2 static void f(float i, float... args);

Chapter5_初始化與清理_數組初始化與可變參數列表