java 数组反射_Java中的反射机制(三) 反射与数组

反射与数组

java.lang.Array类提供了动态创建和访问数组元素的各种静态方法。

例程ArrayTester1类的main()方法创建了一个长度为10的字符串数组,接着把索引位置为5的元素设为“hello”,然后再读取索引位置为5的元素的值。

48304ba5e6f9fe08f3fa1abda7d326ab.png

import java.lang.reflect.Array;

public class ArrayTester1

{

public static void main(String[] args) throws Exception

{

Class> classType = Class.forName("java.lang.String");

//生成数组,指定元素类型和数组长度

Object array = Array.newInstance(classType, 10);

Array.set(array, 5, "hello");

String str = (String)Array.get(array, 5);

System.out.println(str);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

多维数组

首先,区别一下下面两者:

System.out.println(Integer.TYPE);

System.out.println(Integer.class);

输出:

int

class java.lang.Integer

一个多维数组的程序实例:

48304ba5e6f9fe08f3fa1abda7d326ab.png

import java.lang.reflect.Array;

public class ArrayTester2

{

public static void main(String[] args)

{

int[] dims = new int[] { 5, 10, 15 };

// 注意区分下面两种

System.out.println(Integer.TYPE); // int

System.out.println(Integer.class); // Integer

// 创建一个三维数组,这个数组的三个维度分别是5,10,15

Object array = Array.newInstance(Integer.TYPE, dims);

// 可变参数,也可以这样写:

// Object array = Array.newInstance(Integer.TYPE, 5,10,15);

System.out.println(array instanceof int[][][]);

Class> classType0 = array.getClass().getComponentType(); // 返回数组元素类型

System.out.println(classType0); // 三维数组的元素为二维数组,输出:class [[I

// 获得第一层的索引为3的数组,返回的是一个二维数组

Object arrayObject = Array.get(array, 3);

Class> classType = arrayObject.getClass().getComponentType(); // 返回数组元素类型

System.out.println(classType); // 二维数组的元素为一维数组,输出:class [I

// 此处返回的是一个一维数组

arrayObject = Array.get(arrayObject, 5);

Class> classType2 = arrayObject.getClass().getComponentType(); // 返回数组元素类型

System.out.println(classType2); // 一维数组的元素为int

// 给一维数组下标为10的位置设置值为37

Array.setInt(arrayObject, 10, 37);

int[][][] arrayCast = (int[][][]) array;

System.out.println(arrayCast[3][5][10]);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

参考资料

张龙老师Java SE教学视频。

文档链接:

Array:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值