本帖最后由 磬辰 于 2018-5-12 22:03 编辑
林文辉 反射总结 反射的特性比较高级,只要获取到类名,就可以获取到类的内部的所有成员和所有方法.就单纯对程序来说确实是提高了程序的灵活性.但是同时可能带来意料之外的问题.并且反射代码通常比我们正常写的代码要麻烦,相当于拐了个弯.而且反射是通过类名对类的类部进行一系列的操作,这样可能会导致后期维护的难度增加.
字节码对象说白了就是.java文件经过编译后变成了.class,然后再加载这个类.通常的获取方式有 类的对象.getClass(),类名.class 或者Class.forName("全类名").
通过Class的静态方法getConstructor()可以获取类的public修饰的构造方法 ,getDeclaredConstructor()则比较不讲道理,不管你是不是用pulibc修饰的,我一样能把你获取. getConstructors()和getDeclaredConstructors() 分别是返回所有的public构造方法和返回所有的构造方法,返回类型都是数组.
getField()和getDeclaredField()和构造方法类似,没加Declared的都是只能获取public修饰的方法或者变量,后者则可以全部获取,只不过必须在没有安全限制的环境中(setAccessible(true))运行,,这也是反射的一个问题所在.
javaBean个人认为就是类的规范,按规矩来写类.不然总有个别喜欢搞特例的,就是不爱用private 就是喜欢protected 就是喜欢public修饰成员变量.
基本就是遵循这个几个规范
1、所有属性为private
2、提供默认构造方法
3、提供getter和setter
4、实现serializable接口
BUtils是阿帕奇组织众多的一个工具类之一,populate相对来说用处稍广(毕竟是应用不是理解),并且也用到了双列结合,
由此可见双列集合在往后的开发项目是很广的,比如网站一些的分类啊,父分类子分类这种,Map相对来说用途还是很广的.
set get populate这几个底层都是通过反射来实现的.编写这几个方法主要还是熟悉一下人家的源码.正常来说只要知道怎么用就行了,不用管那么多,我们在编码时,并不需要知道我们处理的JavaBeans具体是什么类型,有哪些属性,这些信息是可以动态获取的,甚至我们都可以不必去关心事实上是否存在这样一个具体的JavaBean类。我们只需要知道有一个JavaBean的实例,我们需要从中取得某个属性,设定某个属性的值.当然有兴趣就可以去研究.
|