三九宝宝网宝宝百科宝宝知识

java反射机制的作用

02月17日 编辑 39baobao.com

[Java反射机制系列初识JavaReflection]Ja 反射机制是指Ja程序可以在执行期载入,探知,使用编译期间完全未知的classes.这句话可能有点难以理解,我们可以通过一个例子来看。在Ja程序中我们经常会用到这样一条语句来创...+阅读

比较全的解释了:JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

1. 得到某个对象的属性1 public Object getProperty(Object owner, String fieldName) throws Exception {2 Class ownerClass = owner.getClass();3 4 Field field = ownerClass.getField(fieldName);5 6 Object property = field.get(owner);7 8 return property;9 } Class ownerClass = owner.getClass():得到该对象的Class。Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。

2. 得到某个类的静态属性 1 public Object getStaticProperty(String className, String fieldName) 2 throws Exception { 3 Class ownerClass = Class.forName(className); 4 5 Field field = ownerClass.getField(fieldName); 6 7 Object property = field.get(ownerClass); 8 9 return property;10 } Class ownerClass = Class.forName(className) :首先得到这个类的Class。Field field = ownerClass.getField(fieldName):和上面一样,通过Class得到类声明的属性。

Object property = field.get(ownerClass) :这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。3. 执行某对象的方法 1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception { 2 3 Class ownerClass = owner.getClass(); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i 8 argsClass[i] = args[i].getClass(); 9 }10 11 Method method = ownerClass.getMethod(methodName, argsClass);12 13 return method.invoke(owner, args);14 } Class owner_class = owner.getClass() :首先还是必须得到这个对象的Class。

5~9行:配置参数的Class数组,作为寻找Method的条件。Method method = ownerClass.getMethod(methodName, argsClass):通过Method名和参数的Class数组得到要执行的Method。method.invoke(owner, args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数数组。返回值是Object,也既是该方法的返回值。4. 执行某个类的静态方法 1 public Object invokeStaticMethod(String className, String methodName, 2 Object[] args) throws Exception { 3 Class ownerClass = Class.forName(className); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i 8 argsClass[i] = args[i].getClass(); 9 }10 11 Method method = ownerClass.getMethod(methodName, argsClass);12 13 return method.invoke(null, args);14 } 基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法,不需要借助实例运行。

5. 新建实例 1 2 public Object newInstance(String className, Object[] args) throws Exception { 3 Class newoneClass = Class.forName(className); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i 8 argsClass[i] = args[i].getClass(); 9 }10 11 Constructor cons = newoneClass.getConstructor(argsClass);12 13 return cons.newInstance(args);14 15 } 这里说的方法是执行带参数的构造函数来新建实例的方法。

如果不需要参数,可以直接使用newoneClass.newInstance()来实现。Class newoneClass = Class.forName(className):第一步,得到要构造的实例的Class。第5~第9行:得到参数的Class数组。Constructor cons = newoneClass.getConstructor(argsClass):得到构造子。cons.newInstance(args):新建实例。6. 判断是否为某个类的实例1 public boolean isInstance(Object obj, Class cls) {2 return cls.isInstance(obj);3 }7. 得到数组中的某个元素1 public Object getByArray(Object array, int index) {2 return Array.get(array,index);3 }

以下为关联文档:

有关于Java中的Classpath的作用CLASSPATH是什么?它的作用是什么? 它是Jac编译器的一个环境变量。 它的作用与import、package关键字有关。 当你写下improt ja.util.*时,编译器面对import关键字时,就知道你要引...

java中实现多态的机制是什么多态很简单,意思就是一个接口,多种方法;多态又分为静态和动态,方法重载属于静态,方法覆盖和继承属于动态,说不清楚,给段代码给你做参考,能不能看懂就看你自己的了,这种事别人帮不了你...

java中实现多态的机制.....看的好复杂。。。 方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性...

大神解释一下java反射有什么作用java的反射机制就是增加程序的灵活性,避免将程序写死到代码里, 例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码,并重新编...

java中的反射机制是什么有什么作用啊JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法...

巴比妥类药物的作用机制是什么巴比妥类药物抑制桥脑网状结构,减少眼快动睡眠,即使短期服用,停药也会引起眼快动睡眠的反跳,表现为恶梦连绵,不舒服的感觉。所以,一旦服用巴比妥类药物后,往往会持续服下去,较难停下...

民生保障机制的作用是什么坚持保障和改善民生,既是发展经济的根本目的,也是促进经济平稳较快发展的必要条件。做好下半年经济工作,要更加重视保障和改善民生,加大民生投入,创新社会管理,让发展成果更好地惠...

在java中什么是参数传递机制参数传递,就是方法调用过程中,调用者将参数传递给被调用者的过程。 其实Java中的所有参数传递,传递的都是一样的,参数直接引用值的复制体。 1. 只是对于Java基础类型(int、long、...

细菌杀菌剂的定义及作用机制杀菌剂又称杀生剂、杀菌灭藻剂、杀微生物剂等,通常是指能有效地控制或杀死水系统中的微生物——细菌、真菌和藻类的化学制剂。在国际上,通常是作为防治各类病原微生物的药剂的...

推荐阅读
图文推荐