黑马程序员技术交流社区
标题:
关于java.lang.reflect 类 Array
[打印本页]
作者:
刘岩喜
时间:
2012-9-11 21:59
标题:
关于java.lang.reflect 类 Array
本帖最后由 刘岩喜 于 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 的组件类型。
谢谢大家啦!
作者:
张 涛
时间:
2012-9-11 22:52
首先按照对API中文字的理解,应该是这样:
//如果参数class是数组,那么会返回一个原类型数组,维数是原先的维数加上后面的参数个数
//如果参数class不是数组,那么会返回一个原类型数组,维数是后面的参数个数
那么我们来验证,先看第一段代码:
int[] array;
String s;
Object o;
array = new int[]{2,3};//数组类
o = Array.newInstance(array.getClass(), 1);
System.out.println(o.getClass().getName());
s = "aaa";//非数组类
o = Array.newInstance(s.getClass(), 1);
System.out.println(o.getClass().getName());
复制代码
结果是:
[[I
[Ljava.lang.String;先解释一下,结果是什么意思。这里打印出的是class的名字,"["表示是数组,I表示是int型,两个“[”表示是二维数组,“L”表示class或Interface,这里后面又给了是String类。
那就好理解了,第一个打印出的是二维的int型数组,第二个打印的是一维的String数组。
是因为第一个数组,原先是int型的一维数组,加上后面参数的个数,注意,参数个数是指class参数后的int型参数的个数,这里是一个,所以是二维的int型数组。
第二个原先不是数组,按照非数组处理,会变成数组,维数是后面参数的个数,这里是一个,所以是String类型的一维数组。
如果还不明白,改一下代码,再看一下结果,这个就不详细说了,相信已经懂了。
代码:
array = new int[]{2,3};//数组类
o = Array.newInstance(array.getClass(), 1, 1);//int型参数个数是2
System.out.println(o.getClass().getName());
s = "aaa";//非数组类
o = Array.newInstance(s.getClass(), 1, 1);//int型参数个数是2
System.out.println(o.getClass().getName());
复制代码
结果:
[[[I
[[Ljava.lang.String;
一个三维的int型数组;一个二维的String数组。
作者:
刘岩喜
时间:
2012-9-11 23:16
张 涛 发表于 2012-9-11 22:52
首先按照对API中文字的理解,应该是这样:
//如果参数class是数组,那么会返回一个原类型数组,维数是原先 ...
很明白,以前是走进了一个误区,我把新数组的维度当场数组的lenght了,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2