反射操作数组:
通过public Class<?> getComponentType()来取得一个数组的Class对象
例:
import java.lang.reflect.Array ; public class ClassArrayDemo{ public static void main(String args[]) throws Exception{ int temp[] = {1,2,3} ;// 声明一整型数组 Class<?> c = temp.getClass().getComponentType() ; // 取得数组的Class对象 System.out.println("类型:" + c.getName()) ; // 取得数组类型名称 System.out.println("长度:" + Array.getLength(temp)) ; System.out.println("第一个内容:" + Array.get(temp,0)) ; Array.set(temp,0,6) ; System.out.println("第一个内容:" + Array.get(temp,0)) ; } };
这里要注意一下这里的Array这个类java.lang.reflect.Array
以上程序中通过Array类取得了数组的相关信息,并通过Array类中的set()方法修改了数组中的元素内容.
在应用中还可以通过Array类根据已有的数组类型来开辟新的数组对象
例:
import java.lang.reflect.Array ; public class ChangeArrayDemo{ public static void main(String args[]) throws Exception{ int temp[] = {1,2,3} ;// 声明一整型数组 int newTemp[] = (int []) arrayInc(temp,5) ; // 重新开辟空间5 print(newTemp) ; System.out.println("\n-------------------------") ; String t[] = {"lxh","mldn","mldnjava"} ; String nt[] = (String [])arrayInc(t,8) ; print(nt) ; } public static Object arrayInc(Object obj,int len){ Class<?> c = obj.getClass() ; Class<?> arr = c.getComponentType() ; // 得到数组的 Object newO = Array.newInstance(arr,len) ; // 开辟新的大小 int co = Array.getLength(obj) ; System.arraycopy(obj,0,newO,0,co) ; // 拷贝内容 return newO ; } public static void print(Object obj){ // 数组输出 Class<?> c = obj.getClass() ; if(!c.isArray()){ // 判断是否是数组 return; } Class<?> arr = c.getComponentType() ; System.out.println(arr.getName()+"数组的长度是:" + Array.getLength(obj)) ; // 输出数组信息 for(int i=0;i<Array.getLength(obj);i++){ System.out.print(Array.get(obj,i) + "、") ; // 通过Array输出 } } };
时间: 2024-10-15 12:17:59