室内设计网站哪里可以看,哈尔滨最好的网站建设公司,婚纱摄影网站源码,wordpress插件多说今天#xff0c;下午在和朋友聊天的时候#xff0c;聊起了反射这个话题。我们就从下面这个段简单的代码开始吧。这个代码输出什么#xff0c;想必大部分的读者跟我一样#xff0c;会很快地知道答案#xff1a;0 1 2 3 4 5 6 7 8 9。事实也是如此#xff1a;朋友这个时候就…今天下午在和朋友聊天的时候聊起了反射这个话题。我们就从下面这个段简单的代码开始吧。这个代码输出什么想必大部分的读者跟我一样会很快地知道答案0 1 2 3 4 5 6 7 8 9。事实也是如此朋友这个时候就提出一个问题你看在代码里面有一个aa()你有什么办法实现这个aa函数让输出结果不是这个样子的(当然 异常不算)。朋友继续说你看一下Integer这个里面的实现。在知道原理之后我们就可以开始动手实现了具体代码如下private static void aa() {try {// 获取类Class// 获取cache成员变量Field field clazz.getDeclaredField(cache);field.setAccessible(true);Integer[] cache (Integer[]) field.get(clazz);// Rewrite the Integer cachefor (int i 0; i cache[i] new Integer(10i);}} catch (Exception e) {// TODO: handle exception}补全这部分代码之后我们再执行看看结果这样就完成了对输出结果的改变。果然是很有意思只要了解得够多就足以改变自己的认识。那回到最开始的问题什么是反射呢JAVA反射机制是在运行状态中对于任意一个类都能够知道这个类的所有属性和方法对于任意一个对象都能够调用它的任意方法和属性这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。JAVA反射(放射)机制“程序运行时允许改变程序结构或变量类型这种语言称为动态语言”。从这个观点看PerlPythonRuby是动态语言CJavaC#不是动态语言。但是JAVA有着一个非常突出的动态相关机制Reflection用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说Java程序可以加载一个运行时才得知名称的class获悉其完整构造(但不包括methods定义)并生成其对象实体、或对其fields设值、或唤起其methods。这里引述的是百度百科的解释。就是动态的在运行中的时候去处理之前已经写好的代码。这样就提供了很多的灵活性。后来我们又聊到了 ASM(http://asm.ow2.org/ASM 是一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。ASM 可以直接产生二进制 class 文件也可以在类被加载入 Java 虚拟机之前动态改变类行为。ASM 从类文件中读入信息后能够改变类行为分析类信息甚至能够根据用户要求生成新类快得不要不要的)还有cglib(Code Generation Library)。然后我们又看了Spring的core包里面的一些内容等过段时间把ASM 和cglib 摸清楚再写文章详细说一说今天就先到这里了。