java反射机制是一种应用范围广泛的技术实现
反射机制可应用于任何数据类型,不论类对象还是基本数据类型。
//Class类:
1. public Class> getComponentType();// 返回数组元素的类型,若不是数组,将返回null;
// Array类:java.lang.reflect.Array;// 定义数组类;
public final class Array
extends Object;
1.public static Object get(Object array, // 获取数组指定位置的值
int index)
throws IllegalArgumentException,
ArrayIndexOutOfBoundsException;
2.public static int getLength(Object array) // 获取数组的长度
throws IllegalArgumentException;
3.public static Object newInstance(Class> componentType, // 新建一个数组(指定类型,指定长度)
int length)
throws NegativeArraySizeException;
4.public static void set(Object array, // 设置数组指定位置的值
int index,
Object value)
throws IllegalArgumentException,
ArrayIndexOutOfBoundsException;
// Object类:
public final Class> getClass();
———–获取数组的运行时类对象,反射对Array的支持;
package com.mldn;
import java.lang.reflect.Array;
public class ArrayReflect
{
public static void main(String[] args) throws Exception
{
Class> c = null; // 声明Class对象
int[] array = {0, 1, 2, 3, 4, 5}; // 定义int[]
c = array.getClass(); // 获取数组的运行时对象
Class> cl = c.getComponentType(); // 获取数组元素的类型
System.out.println(“类型:” + cl.getName());
System.out.println(“长度:” + Array.getLength(array));
System.out.println(“第一个值:” + Array.get(array, 0));
Array.set(array, 0, 5); // 设置首元素的值;
System.out.println(“第一个值:” + Array.get(array, 0));
}
}
/*ubuntu@xu-desktop:~$ java com.mldn.ArrayReflect
类型:int
长度:6
第一个值:0
第一个值:5
// Array 是反射reflect包中的类;
*/
————java.lang.Array改变数组长度:
package com.mldn;
import java.lang.reflect.Array;
public class ArrayReflect
{
public static void main(String[] args) throws Exception
{
int[] array = {0, 1, 2, 3, 4, 5}; // 定义int[]
int[] arr = (int[])arrayInc(array, 7); // 开辟新数组
print(arr); // 打印
String[] strArr = {“Hello”, “,world!”, “www.”, “k187.com”}; // 定义String[]
print((String[])arrayInc(strArr, 5));
}
public static Object arrayInc(Object array, int len) // 动态扩展数组
{
Class> c = array.getClass(); // 获取数组的运行时类对象
Class> type = c.getComponentType(); // 获取数组元素类型
int length = Array.getLength(array); // 获取数组长度
Object newarr = Array.newInstance(type, len); // 新建数组
System.arraycopy(array, 0, newarr, 0, length); // 原数组内容复制到新数组
return newarr;
}
public static void print(Object array)
{
Class> c = array.getClass(); // 获取运行时类对象
if (!c.isArray())
{
return; // 不是数组,返回终止程序
}
for (int x = 0; x < Array.getLength(array); x++)
{
System.out.print(Array.get(array, x) + ” “);
}
System.out.println();
}
}
/*ubuntu@xu-desktop:~$ java com.mldn.ArrayReflect
ubuntu@xu-desktop:~$ java com.mldn.ArrayReflect
0 1 2 3 4 5 0
Hello ,world! www. k187.com null
// Array 是反射reflect包中的类;
*/
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《java反射机制是一种应用范围广泛的技术实现》
本文地址:http://www.xiupu.net/archives-144.html
关注公众号:
微信赞赏
支付宝赞赏