在java中,數組也是一種引用類型,便是一種類。html
咱們來看一個例子,理解一下數組類:java
public static void main(String[] args) {
Class c = int[].class;
Class cIn = Integer[].class;
Class ccIn = Integer[][].class;
System.out.println(c.getName());
System.out.println(cIn.getName());
System.out.println(ccIn.getName());
Class f = float[].class;
Class flo = Float[].class;
System.out.println(f.getName());
System.out.println(flo.getName());
}
複製代碼
輸出的結果:數組
[I [Ljava.lang.Integer; [[Ljava.lang.Integer; [F [Ljava.lang.Float;bash
上面的輸出結果就是經過Class的toString()
方法輸出的內容,能夠看出規律,「[」表示一維數組,「[[」則表示二維數組,如此類推下去。同時,若是是引用類型,則還要「[」後面還要跟一個」L「+類的全限定名。而若是是基本類型,則只要跟對應的大寫字母。微信
從上面的例子的輸出能夠看出,數組類是在JDK中是有分類的:對於一維的基本類型數組,輸出」[「,而對於一維的引用數組則輸出 」[L「,多了一個」L「。ui
數組類能夠分類能夠分紅兩類:spa
這兩種數組類的最大區別在於他們的祖先類不一樣。code
對於基本類型來講,基本類型數組類的父類一個,就是Object類。htm
public static void main(String[] args) {
int[] a = new int[3];
Object o = a;//編譯經過,類型轉換成功;
//打印一下數組的超類
System.out.println("int[]的superClass是: "+int[].class.getSuperclass());
}
複製代碼
運行結果:對象
int[]的superClass是: class java.lang.Object
對於引用類型的數組類,其全部的祖先類除了Object類外,還包括下面所說的類: 若是A是B的祖先類,A[]也是B[]的祖先類,其餘維度也如此類推,不一樣維度間,沒有任何關係。
看下面的例子:
public class Test_3 {
public static void main(String[] args) {
Children[] childrens = new Children[3];
Ancestor[] ancestors = childrens; //編譯經過,類型上轉成功
// 判斷childrens 是否是 Ancestor或者是其子類的實例,進一步證實 Children[] 是 Ancestor[]的子孫類
System.out.println("childrens instanceof Ancestor[] : " + (childrens instanceof Ancestor[]));
}
}
class Ancestor{//祖先類
}
class Parent extends Ancestor{//父類,繼承於Ancestor
}
class Children extends Parent{//子類,繼承於Parent
}
複製代碼
運行結果:
childrens instanceof Ancestor[] : true
上面的例子中,由於Ancestor
是Children
的祖先類,因此Ancestor[]
也是Children[]
的祖先類。
若是這時候咱們調用執行下面的代碼:
System.out.println(Children[].class.getSuperclass());
複製代碼
輸出的結果倒是:
class java.lang.Object
咦,爲何引用類型數組Children[]
的父類是Object類,那麼與上面所說的
Ancestor[]
是Children[]
的祖先類
起了衝突。由於若是父類是Object,Object類是根類了,那麼祖先類就只有一個,就不可能再有其餘的祖先類
這是爲何呢?
咱們看一下getSuperclass()
的API描述:
public Class<? super T> getSuperclass() 返回表示此 Class 所表示的實體(類、接口、基本類型或 void)的超類的 Class。若是此 Class 表示 Object 類、一個接口、一個基本類型或 void,則返回 null。若是此對象表示一個數組類,則返回表示該 Object 類的 Class 對象。 -返回: 此對象所表示的類的超類。
原來,getSuperclass
對於調用者是數組類的對象的話,那麼直接返回Object類的class對象。
出處:http://www.cnblogs.com/jinggod/p/8428062.html
文章有不當之處,歡迎指正,你也能夠關注個人微信公衆號:
好好學java
,獲取優質資源。