標籤:rgs print down 包括 new eof 為什麼 直接 列印
1. 數組類簡介
??在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;
??上面的輸出結果就是通過Class的toString()方法輸出的內容,可以看出規律,“[”表示一維數組,“[[”則表示二維數組,如此類推下去。同時,如果是參考型別,則還要“[”後面還要跟一個”L“+類的全限定名。而如果是基本類型,則只要跟對應的大寫字母。
2. 數組類的分類
從上面的例子的輸出可以看出,數組類是在JDK中是有分類的:對於一維的基本類型數組,輸出”[“,而對於一維的引用數組則輸出 ”[L“,多了一個”L“。
數組類可以分類可以分成兩類:
這兩種數組類的最大區別在於他們的祖先類不同。
2.1 基本類型的數組類
?? 對於基本類型來說,基本類型數組類的父類一個,就是Object類。
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
2.2 參考型別的數組類
??對於參考型別的數組類,其所有的祖先類除了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對象。
java基礎(十) 數群組類型