A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘岩喜 初级黑马   /  2012-9-11 21:59  /  1380 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘岩喜 于 2012-9-11 23:17 编辑

其中方法newInstance,api里是下面那样解释的,但是不是很明白“ 如果 componentType 表示一个非数组类或接口 ”这句话

public static Object newInstance(Class<?> componentType, int... dimensions)
                                                                     throws IllegalArgumentException,NegativeArraySizeException                                                          


创建一个具有指定的组件类型和维度的新数组。如果 componentType 表示一个非数组类或接口,则新数组具有 dimensions.length 维度,并且将 componentType 作为其组件类型。如果 componentType 表示一个数组类,则新数组的维数等于 dimensions.length 和 componentType 的维数的总和。在这种情况下,新数组的组件类型为 componentType 的组件类型。

谢谢大家啦!


2 个回复

倒序浏览
首先按照对API中文字的理解,应该是这样:
//如果参数class是数组,那么会返回一个原类型数组,维数是原先的维数加上后面的参数个数
//如果参数class不是数组,那么会返回一个原类型数组,维数是后面的参数个数

那么我们来验证,先看第一段代码:
  1. int[] array;
  2.             String s;
  3.             Object o;
  4.            
  5.             array = new int[]{2,3};//数组类
  6.                 o = Array.newInstance(array.getClass(), 1);
  7.                 System.out.println(o.getClass().getName());
  8.                
  9.             s = "aaa";//非数组类
  10.             o = Array.newInstance(s.getClass(), 1);
  11.                 System.out.println(o.getClass().getName());
复制代码
结果是:
[[I
[Ljava.lang.String;先解释一下,结果是什么意思。这里打印出的是class的名字,"["表示是数组,I表示是int型,两个“[”表示是二维数组,“L”表示class或Interface,这里后面又给了是String类。
那就好理解了,第一个打印出的是二维的int型数组,第二个打印的是一维的String数组。
是因为第一个数组,原先是int型的一维数组,加上后面参数的个数,注意,参数个数是指class参数后的int型参数的个数,这里是一个,所以是二维的int型数组。
第二个原先不是数组,按照非数组处理,会变成数组,维数是后面参数的个数,这里是一个,所以是String类型的一维数组。

如果还不明白,改一下代码,再看一下结果,这个就不详细说了,相信已经懂了。
代码:
  1. array = new int[]{2,3};//数组类
  2.                 o = Array.newInstance(array.getClass(), 1, 1);//int型参数个数是2
  3.                 System.out.println(o.getClass().getName());
  4.                
  5.             s = "aaa";//非数组类
  6.             o = Array.newInstance(s.getClass(), 1, 1);//int型参数个数是2
  7.                 System.out.println(o.getClass().getName());
复制代码
结果:
[[[I
[[Ljava.lang.String;
一个三维的int型数组;一个二维的String数组。
回复 使用道具 举报
张 涛 发表于 2012-9-11 22:52
首先按照对API中文字的理解,应该是这样:
//如果参数class是数组,那么会返回一个原类型数组,维数是原先 ...

很明白,以前是走进了一个误区,我把新数组的维度当场数组的lenght了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马