我們可以使用Class類中的isArray()方法來檢查類是否是數(shù)組。
我們可以創(chuàng)建一個數(shù)組,使用反射通過讀取和修改其元素的值java.lang.reflect.Array類。
Array類的getLength()方法獲取數(shù)組的長度。
Array類中的所有方法都是靜態(tài)的。
要創(chuàng)建數(shù)組,請使用Array類中的重載靜態(tài)方法newInstance()。
ObjectnewInstance(Class<?>componentType,intarrayLength)
ObjectnewInstance(Class<?>componentType,int...dimensions)
第一個方法根據(jù)指定的組件類型和數(shù)組長度創(chuàng)建一個數(shù)組。
第二個版本創(chuàng)建指定組件類型和尺寸的數(shù)組。
newInstance()方法的返回類型是Object,我們需要將它轉(zhuǎn)換為實際的數(shù)組類型。
下面的代碼創(chuàng)建一個長度為5的int數(shù)組。
int[]ids=(int[])Array.newInstance(int.class,5);
要創(chuàng)建一個維度為5乘3的int數(shù)組。
int[][]matrix=(int[][])Array.newInstance(int.class,5,3);
例子
以下代碼顯示了如何動態(tài)創(chuàng)建數(shù)組并操作其元素。
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());
}
}
}
上面的代碼生成以下結(jié)果。
Java數(shù)組反射
獲取數(shù)組的維度
Java支持array數(shù)組。
類中的getComponentType()方法返回數(shù)組的元素類型的Class對象。
以下代碼說明了如何獲取數(shù)組的維度。
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;
}
}
上面的代碼生成以下結(jié)果。
Java數(shù)組反射
展開數(shù)組
Java數(shù)組是一個固定長度的數(shù)據(jù)結(jié)構(gòu)。
要放大數(shù)組,我們可以創(chuàng)建一個更大尺寸的數(shù)組,并將舊數(shù)組元素復(fù)制到新數(shù)組元素。
以下代碼顯示如何使用反射展開數(shù)組。
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;
}
}
上面的代碼生成以下結(jié)果。
以上就是天津卓眾教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java基礎(chǔ)教程:Java動態(tài)數(shù)組”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。