java基礎(十) 數群組類型

來源:互聯網
上載者:User

標籤: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

??上面的例子中,因為AncestorChildren的祖先類,所以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基礎(十) 數群組類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.