Java数组机制窥探

Java作为一种面向对象的语言,声称一切都是对象.
1.Java的数据类型
  Java的数据类型分为:
  (1)基本数据类型:boolean,char,short,int,long,float,double,void
  (2)引用类型:普通的对象,数组,字符串,接口,枚举等.
2.了解一下数组
  例如:整形数组的表示方法.
  int[] intArrays={1,2,3,4,5};
  int[] intArrays1=new int[5];
  int[][] intArrays2=new int[3][5];
  上面的代码的写法是我们常用的.但是说数组是一种对象,跟普通对象的创建方式new Object(),有很大的不同.
  
  Java的语法中提供了RTTI和Reflect的功能,可以用来窥探Java中数组的一些机制.
  (1)测试代码,用来输出数组的Class对象信息.
  System.out.println("intArrays :"+intArrays.getClass().getName() +",super class:"+intArrays.getClass().getSuperclass().getName());
System.out.println("intArrays1:"+intArrays1.getClass().getName()+",super class:"+intArrays1.getClass().getSuperclass().getName());
System.out.println("intArrays2:"+intArrays2.getClass().getName()+",super class:"+intArrays2.getClass().getSuperclass().getName());
  /* output
  intArrays:[I,super class:java.lang.Object
  intArrays1:[I,super class:java.lang.Object
  intArrays2:[[I,super class:java.lang.Object
  */
  从上面的结果中得知:
  intArrays,intArrays1的类名称是:[I,父类是Object; 
  intArray2的类名称是:[[I,父类是Object
  那么,数组是对象,是无可置疑的.
  (2).测试代码,说明数组元素类型和维度相同的数组对象,有相同的类.
  System.out.println("intArrays.equals(intArrays1)="+intArrays.equals(intArrays1));
  System.out.println("intArrays.getClass().isInstance(intArrays1)="+intArrays.getClass().isInstance(intArrays1));
  /* output
   intArrays.equals(intArrays1)=false
   intArrays.getClass().isInstance(intArrays1)=true
   */
  (3).关于数组对应的类,它的内部构造.
  System.out.println("getConstructors():"+intArrays.getClass().getConstructors().length);
System.out.println("getDeclaredConstructors():"+intArrays.getClass().getDeclaredConstructors().length);
System.out.println("getMethods():"+intArrays.getClass().getMethods().length);
System.out.println("getDeclaredMethods():"+intArrays.getClass().getDeclaredMethods().length);
System.out.println("getFields():"+intArrays.getClass().getFields().length);
System.out.println("getDeclaredFields():"+intArrays.getClass().getDeclaredFields().length);
  
  /*output
  getConstructors():0
  getDeclaredConstructors():0
  getMethods():9
  getDeclaredMethods():0
  getFields():0
  getDeclaredFields():0
  */
  从上面的结果可以看出来:数组对象的类,没有构造函数/没有属性域/没有自己声明的方法(只有继承自Object的public方法.)
  这里就有一个疑问:数组最常用的操作就是intArrays.length,表示数组的长度.
  那么这个length到底是怎么回事?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值