更新时间:2020-02-24 13:45:13 来源:极悦 浏览2138次
我们可以使用Class类中的isArray()方法来检查类是否是数组。
我们可以创建一个数组,使用反射通过读取和修改其元素的值java.lang.reflect.Array类。
Array类的getLength()方法获取数组的长度。
Array类中的所有方法都是静态的。
要创建数组,请使用Array类中的重载静态方法newInstance()。
ObjectnewInstance(Class<?>componentType,intarrayLength)
ObjectnewInstance(Class<?>componentType,int...dimensions)
第一个方法根据指定的组件类型和数组长度创建一个数组。
第二个版本创建指定组件类型和尺寸的数组。
newInstance()方法的返回类型是Object,我们需要将它转换为实际的数组类型。
下面的代码创建一个长度为5的int数组。
int[]ids=(int[])Array.newInstance(int.class,5);
要创建一个维度为5乘3的int数组。
int[][]matrix=(int[][])Array.newInstance(int.class,5,3);
例子
以下代码显示了如何动态创建数组并操作其元素。
importjava.lang.reflect.Array;
publicclassMain{
publicstaticvoidmain(String[]args){
try{
Objectmy=Array.newInstance(int.class,2);
intn1=Array.getInt(my,0);
intn2=Array.getInt(my,1);
System.out.println("n1="+n1+",n2="+n2);
Array.set(my,0,11);
Array.set(my,1,12);
n1=Array.getInt(my,0);
n2=Array.getInt(my,1);
System.out.println("n1="+n1+",n2="+n2);
}catch(NegativeArraySizeException|IllegalArgumentException
|ArrayIndexOutOfBoundsExceptione){
System.out.println(e.getMessage());
}
}
}
上面的代码生成以下结果。
Java数组反射
获取数组的维度
Java支持array数组。
类中的getComponentType()方法返回数组的元素类型的Class对象。
以下代码说明了如何获取数组的维度。
publicclassMain{
publicstaticvoidmain(String[]args){
int[][][]intArray=newint[1][2][3];
System.out.println("int[][][]dimensionis"+getArrayDimension(intArray));
}
publicstaticintgetArrayDimension(Objectarray){
intdimension=0;
Classc=array.getClass();
if(!c.isArray()){
thrownewIllegalArgumentException("Objectisnotanarray");
}
while(c.isArray()){
dimension++;
c=c.getComponentType();
}
returndimension;
}
}
上面的代码生成以下结果。
Java数组反射
展开数组
Java数组是一个固定长度的数据结构。
要放大数组,我们可以创建一个更大尺寸的数组,并将旧数组元素复制到新数组元素。
以下代码显示如何使用反射展开数组。
importjava.lang.reflect.Array;
importjava.util.Arrays;
publicclassMain{
publicstaticvoidmain(String[]args){
int[]ids=newint[2];
System.out.println(ids.length);
System.out.println(Arrays.toString(ids));
ids=(int[])expandBy(ids,2);
ids[2]=3;
System.out.println(ids.length);
System.out.println(Arrays.toString(ids));
}
publicstaticObjectexpandBy(ObjectoldArray,intincrement){
ObjectnewArray=null;
intoldLength=Array.getLength(oldArray);
intnewLength=oldLength+increment;
Class<?>c=oldArray.getClass();
newArray=Array.newInstance(c.getComponentType(),newLength);
System.arraycopy(oldArray,0,newArray,0,oldLength);
returnnewArray;
}
}
上面的代码生成以下结果。
以上就是极悦注册机构小编介绍的“Java基础教程:Java动态数组”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习