博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java基础(十) 数组类型
阅读量:6483 次
发布时间:2019-06-23

本文共 2356 字,大约阅读时间需要 7 分钟。

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

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

文章有不当之处,欢迎指正,你也可以关注我的微信公众号:好好学java,获取优质资源。

你可能感兴趣的文章
内存映射MMAP和DMA【转】
查看>>
linux内核环形缓冲区【转】
查看>>
[BZOJ2463][中山市选2009]谁能赢呢?
查看>>
(十四)struts2的国际化
查看>>
Eclipse启动时出现错误 An internal error occurred during: "Updating indexes"
查看>>
使用RateLimiter完成简单的大流量限流,抢购秒杀限流
查看>>
Mybatis框架入门
查看>>
winform登录窗体加载等待图片
查看>>
odoo开发笔记--form视图自定义
查看>>
Java ZIP压缩文件使用总结
查看>>
UML
查看>>
UWP Composition API - 锁定列的FlexGrid
查看>>
Java函数结束时的内存回收坑
查看>>
JS引用类型 -- Object类型
查看>>
木其工作室代写程序 [原]Java环境的搭建
查看>>
创意网站应用--原创奇妙点子想法
查看>>
自己动手写个Android数据库orm框架,支持关联关系,数据懒加载
查看>>
利用JS最真实的模拟鼠标点击
查看>>
百度Touch.js
查看>>
C#生成数据库中表的XML文件
查看>>