java基础(十) 数组类型
###1. 數(shù)組類簡(jiǎn)介
在java中,數(shù)組也是一種引用類型,即是一種類。
我們來(lái)看一個(gè)例子,理解一下數(shù)組類:
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()); }輸出的結(jié)果:
[I
[Ljava.lang.Integer;
[[Ljava.lang.Integer;
[F
[Ljava.lang.Float;
上面的輸出結(jié)果就是通過(guò)Class的toString()方法輸出的內(nèi)容,可以看出規(guī)律,“[”表示一維數(shù)組,“[[”則表示二維數(shù)組,如此類推下去。同時(shí),如果是引用類型,則還要“[”后面還要跟一個(gè)”L“+類的全限定名。而如果是基本類型,則只要跟對(duì)應(yīng)的大寫字母。
###2. 數(shù)組類的分類
從上面的例子的輸出可以看出,數(shù)組類是在JDK中是有分類的:對(duì)于一維的基本類型數(shù)組,輸出”[“,而對(duì)于一維的引用數(shù)組則輸出 ”[L“,多了一個(gè)”L“。
數(shù)組類可以分類可以分成兩類:
- 基本類型的數(shù)組類;
- 引用類型的數(shù)組類;
這兩種數(shù)組類的最大區(qū)別在于他們的祖先類不同。
##2.1 基本類型的數(shù)組類
對(duì)于基本類型來(lái)說(shuō),基本類型數(shù)組類的父類一個(gè),就是Object類。
public static void main(String[] args) {int[] a = new int[3];Object o = a;//編譯通過(guò),類型轉(zhuǎn)換成功;//打印一下數(shù)組的超類System.out.println("int[]的superClass是: "+int[].class.getSuperclass());}運(yùn)行結(jié)果:
int[]的superClass是: class java.lang.Object
##2.2 引用類型的數(shù)組類
對(duì)于引用類型的數(shù)組類,其所有的祖先類除了Object類外,還包括下面所說(shuō)的類:
如果A是B的祖先類,A[]也是B[]的祖先類,其他維度也如此類推,不同維度間,沒(méi)有任何關(guān)系。
看下面的例子:
public class Test_3 {public static void main(String[] args) {Children[] childrens = new Children[3];Ancestor[] ancestors = childrens; //編譯通過(guò),類型上轉(zhuǎn)成功// 判斷childrens 是不是 Ancestor或者是其子類的實(shí)例,進(jìn)一步證明 Children[] 是 Ancestor[]的子孫類System.out.println("childrens instanceof Ancestor[] : " + (childrens instanceof Ancestor[])); } }class Ancestor{//祖先類}class Parent extends Ancestor{//父類,繼承于Ancestor}class Children extends Parent{//子類,繼承于Parent}運(yùn)行結(jié)果:
childrens instanceof Ancestor[] : true
上面的例子中,因?yàn)锳ncestor是Children的祖先類,所以Ancestor[]也是Children[]的祖先類。
如果這時(shí)候我們調(diào)用執(zhí)行下面的代碼:
System.out.println(Children[].class.getSuperclass());輸出的結(jié)果卻是:
class java.lang.Object
咦,為什么引用類型數(shù)組Children[]的父類是Object類,那么與上面所說(shuō)的
Ancestor[]是Children[]的祖先類
起了沖突。因?yàn)槿绻割愂荗bject,Object類是根類了,那么祖先類就只有一個(gè),就不可能再有其他的祖先類
這是為什么呢?
我們看一下getSuperclass()的API描述:
public Class<? super T> getSuperclass()
返回表示此 Class 所表示的實(shí)體(類、接口、基本類型或 void)的超類的 Class。如果此 Class 表示 Object 類、一個(gè)接口、一個(gè)基本類型或 void,則返回 null。如果此對(duì)象表示一個(gè)數(shù)組類,則返回表示該 Object 類的 Class 對(duì)象。
-返回:
此對(duì)象所表示的類的超類。
原來(lái),getSuperclass對(duì)于調(diào)用者是數(shù)組類的對(duì)象的話,那么直接返回Object類的class對(duì)象。
作者:jinggod
出處:http://www.cnblogs.com/jinggod/p/8428062.html
總結(jié)
以上是生活随笔為你收集整理的java基础(十) 数组类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java基础(九) 可变参数列表介绍
- 下一篇: java基础(十一) 枚举类型