Java反射学习三

反射与数组

  

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

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

  

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);

    }

}

多维数组

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

  System.out.println(Integer.TYPE);

   System.out.println(Integer.class);

  输出:

  int

  class java.lang.Integer

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

  

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]);
    }

}

参考资料:

http://www.cnblogs.com/mengdd/archive/2013/01/26/2878136.html

http://www.cnblogs.com/gulvzhe/archive/2012/01/27/2330001.html

http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

http://www.cnblogs.com/octobershiner/archive/2012/03/18/2404751.html

时间: 2024-12-15 01:58:34

Java反射学习三的相关文章

Java反射学习总结终(使用反射和注解模拟JUnit单元测试框架)

本文是Java反射学习总结系列的最后一篇了,这里贴出之前文章的链接,有兴趣的可以打开看看. http://blog.csdn.net/a396901990/article/category/2302221 本文介绍了如何利用反射和注解去简单的模拟JUnit4单元测试框架,之所以选择JUnit4是因为4.0以后最大的改进就是使用了注解.需要注意的是这里并不是完全的模拟,只是简单实现了一下Runner类和JUnit注解相关的工作流程.所以本文的主要目的是介绍反射和注解的使用.废话不多说,直接进入正文

Java反射学习总结四(动态代理使用实例和内部原理解析)

通过上一篇文章介绍的静态代理Java反射学习总结三(静态代理)中,大家可以发现在静态代理中每一个代理类只能为一个接口服务,这样一来必然会产生过多的代理,而且对于每个实例,如果需要添加不同代理就要去添加相应的代理类.解决这一问题最好的做法是可以通过一个代理类完成全部的代理功能或者说去动态的生成这个代理类,那么此时就必须使用动态代理完成. 动态代理知识点: Java动态代理类位于java.lang.reflect包下,主要有以下一个接口和一个类: 1.InvocationHandler接口:    

Java反射学习总结

广州疯狂软件教育Java培训,iOS培训分享Class类是Reflection API中核心的类,他位于java.lang.Class列出一些常用的方法.- getName() : 获得类的完整名字- getFields() : 获得类的public类型的属性- getDeclaredFields() : 获得类的所有属性- getMethods() : 获得类的public类型的方法- getDeclaredMethods() : 获得类的所有方法- getMethod(String name

Java反射学习:深入学习Java反射机制

一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制. 二.逐步分析 参考:https://blog.csdn.net/u012585964/article/details/52011138 1.关于Class 1.Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Met

Java反射学习(java reflect)(二)

ok之前说了Java的反射和反射分析类,那这些东西有神马作用呢,下面就来说应用: 三.运行时使用反射分析对象 简单写一个Employee类,然后利用JAVA反射去取name域,getDeclareField(String  name)可以取得全部,就算是private的上面说过了,所以到第9行还是没问题的. .. 但是在第11行的时候错了,因为get(Field f)没有访问权限所以IllegalAccessException,在这里有个方法setAccessible(Boolean b),这货

java反射学习之一反射机制概述

一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名,就能通过反射获取类的所有信息 2.程序在运行是能够获取任何一个对象所属的类对象 3.在运行时可以获取类的所有属性,并对其操作 4.在运行时可以获取类.父类的所有方法并调用 5.当前的主流框架struts2.srping.hiberate等框架的核心功能都是通过java反射机制来实现的 三.反射相关对

JAVA反射学习网摘

程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载.探知.使用编译期间完全未知的classes.Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态

黑马程序员------Java反射学习总结(一)

-------------------------Java培训.Android培训,期待与您交流!----------------------------- 一.反射的概念 1) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 2)一句话来讲,反射就是将Java类中的各个成分映射成相应的Java类. 3)即在Java中,描述事物的各种

java反射学习之二万能EXCEL导出

一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对象的所有属性作为EXCEL的列,该对象占据EXCEL的一行 二.万能EXCEL导出(以JXL为例,jxl.poi等excel导入导出的jar包不做介绍了) 1.创建java工程.引入jxl的jar包 2.直接上代码 Book.java /** * Book对象 * @author bwy * */