java 反射

来源:互联网 发布:一键传淘宝的流程 编辑:程序博客网 时间:2024/05/09 11:36

什么是反射?

JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型”。

Java换句话说,就是java虚拟机在加载反射类的时候才知道具体运行的是哪个java类,在运行的时候动态的给类中的属性赋值。


我们看例子:

这个Persion类就是我们要通过反射来构造对象的类,我们称为目标类。

package com.jun.test;public class Persion {int age;String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

下面这类就是我们的反射类:

做一个简单的反射:

package com.jun.test;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;//我们并没有通过new 来创建persion类,完全通过反射来创建对象。public class Hello {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{Class demon1=null;demon1=Class.forName("com.jun.test.Persion");//类的全称 包名.类名,返回一个类Persion p=(Persion)demon1.newInstance();//创建Persion类的对象,有了Persion对象就可以完全操作 persion类中的方法了p.setName("Richard");System.out.print(p.getName());}}

反射的 Method.invoke()方法。
package com.jun.test;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Hello {//通过invoke 方法获得目标类中的 方法public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException{Class demon1=null;demon1=Class.forName("com.jun.test.Persion");//类的全称 包名.类名,返回一个类Persion p=(Persion)demon1.newInstance();//创建Persion类的对象,有了Persion对象就可以完全操作 persion类中的方法了Method m=demon1.getMethod("setName", String.class);//通过方法名字,和方法的参数类型来确定一个方法。获得这个方法m.invoke(p, "Ricahrd");//把方法和具体的类绑定的 ,给方法赋值,相当于 p.setName("Richard")System.out.println(p.getName());}}



0 0