Java反射机制理解记录

来源:互联网 发布:mysql limit 编辑:程序博客网 时间:2024/06/05 16:58
    最近做一个excel的模板导入,想做成动态性质的模板(大体上是模板中有几个属性,就放几个属性的值到bean中,用于存取)。    当时就想到反射机制,巴拉巴拉出来。

前期的准备工作介绍一下:

  • 读取excel,以二维数组的形式 excelDatas[][]
  • 读取数组的第一行模板,将模板属性和下标以Map的形式存储 titleIndex (在这之前有一个中英对照的静态Map,所以 titleIndex 中的key是 set + “属性名”的格式)

具体实现代码:

//时间格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  List<ProcessPlanSplitDTO> addWbsList = newArrayList<ProcessPlanSplitDTO>();//第一行是模板,不取for(int i=1; i<excelDatas.length; i++){     ProcessPlanSplitDTO addWbs=new ProcessPlanSplitDTO();    for(String met : titleIndex.keySet()){        if(met.equals("setWbFlag")){            addWbs.getClass().getMethod(met, Integer.class).invoke(addWbs, Integer.parseInt(excelDatas[i][titleIndex.get(met)]));        }else if(met.equals("setPlanBeginTime") || met.equals("setPlanFinishTime")){            Date date = sdf.parse(excelDatas[i]titleIndex.get(met)]);            addWbs.getClass().getMethod(met, Date.class).invoke(addWbs, date);        }else{            addWbs.getClass().getMethod(met, String.class).invoke(addWbs, excelDatas[i][titleIndex.get(met)]);        }    }    addWbsList.add(addWbs);}

当时做完之后,感觉自己对反射的原理不够清晰,大体上只是会用,因此上网看了看,这里做一个理解记录;

  • 一些概念性的东西,大家可以看看这些篇文章:
    Java反射机制:
    http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html
    学习:java原理—反射机制:
    http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html

    对于“动态”的描述,说一下个人理解:

    1. 在java中new出来的对象,就是静态编译的,表明在编译时已经将这个模块放进去了,然后jvm去执行的是一个已经完全准备好的程序;
    2. 而反射的动态编译是指,在jvm去执行的时候才去编译。
  • 从代码角度看,反射的前提是获取类对象 .class Class.forName() Class.forName():
    .class getClass () forName() 详解 :
    http://www.cnblogs.com/java-class/p/4496432.html
    Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别 :
    http://blog.sina.com.cn/s/blog_7ffb8dd5010127ix.html

    在我的理解中流程是这样的:

        java文件编译为class文件,执行时将class文件放入内存中,而上面的这3个方法,就是内存中class文件的对象索引,获取对象然后对这个对象经行操作。    具体的区别文章中讲解的很清晰了。
0 0
原创粉丝点击