java基礎(十) 數組類型

1. 數組類簡介

在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「+類的全限定名。而若是是基本類型,則只要跟對應的大寫字母。微信

2. 數組類的分類

從上面的例子的輸出能夠看出,數組類是在JDK中是有分類的:對於一維的基本類型數組,輸出」[「,而對於一維的引用數組則輸出 」[L「,多了一個」L「。ui

數組類能夠分類能夠分紅兩類spa

  • 基本類型的數組類;
  • 引用類型的數組類;

這兩種數組類的最大區別在於他們的祖先類不一樣。code

2.1 基本類型的數組類

對於基本類型來講,基本類型數組類的父類一個,就是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

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對象

出處:http://www.cnblogs.com/jinggod/p/8428062.html

文章有不當之處,歡迎指正,你也能夠關注個人微信公衆號:好好學java,獲取優質資源。

相關文章
相關標籤/搜索