更新時(shí)間:2020-02-24 13:45:13 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2884次

我們可以使用Class類(lèi)中的isArray()方法來(lái)檢查類(lèi)是否是數(shù)組。
我們可以創(chuàng)建一個(gè)數(shù)組,使用反射通過(guò)讀取和修改其元素的值java.lang.reflect.Array類(lèi)。
Array類(lèi)的getLength()方法獲取數(shù)組的長(zhǎng)度。
Array類(lèi)中的所有方法都是靜態(tài)的。
要?jiǎng)?chuàng)建數(shù)組,請(qǐng)使用Array類(lèi)中的重載靜態(tài)方法newInstance()。
ObjectnewInstance(Class<?>componentType,intarrayLength)
ObjectnewInstance(Class<?>componentType,int...dimensions)
第一個(gè)方法根據(jù)指定的組件類(lèi)型和數(shù)組長(zhǎng)度創(chuàng)建一個(gè)數(shù)組。
第二個(gè)版本創(chuàng)建指定組件類(lèi)型和尺寸的數(shù)組。
newInstance()方法的返回類(lèi)型是Object,我們需要將它轉(zhuǎn)換為實(shí)際的數(shù)組類(lèi)型。
下面的代碼創(chuàng)建一個(gè)長(zhǎng)度為5的int數(shù)組。
int[]ids=(int[])Array.newInstance(int.class,5);
要?jiǎng)?chuàng)建一個(gè)維度為5乘3的int數(shù)組。
int[][]matrix=(int[][])Array.newInstance(int.class,5,3);
例子
以下代碼顯示了如何動(dòng)態(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ù)組。
類(lèi)中的getComponentType()方法返回?cái)?shù)組的元素類(lèi)型的Class對(duì)象。
以下代碼說(shuō)明了如何獲取數(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ù)組反射
展開(kāi)數(shù)組
Java數(shù)組是一個(gè)固定長(zhǎng)度的數(shù)據(jù)結(jié)構(gòu)。
要放大數(shù)組,我們可以創(chuàng)建一個(gè)更大尺寸的數(shù)組,并將舊數(shù)組元素復(fù)制到新數(shù)組元素。
以下代碼顯示如何使用反射展開(kāi)數(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é)果。

以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java基礎(chǔ)教程:Java動(dòng)態(tài)數(shù)組”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)