您的位置:首页 > 编程语言 > Java开发

JAVA反射机制

2016-03-29 17:54 597 查看

什么是JAVA反射机制

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

JAVA反射常用类

Class类:类的Class实例,表示正在运行的 Java 应用程序中的类和接口。每个类都有与其对应的Class实例
Constructor类:提供关于类的单个构造方法的信息以及对它的访问权限。
Field类:提供有关类或接口的属性的信息,以及对它的动态访问权限。
Method类:提供关于类或接口上单独某个方法的信息。

Class

/**
* 获取类的Class实例三种方法,com.maiya.Person是类的全名
*/
Class clazz1=Class.forName("com.maiya.Person");
Class clazz2=Person.class;
Class clazz3=new Person().getClass();
String className=clazz1.getName();//获取包全名

Constructor

/**
* 获取类的构造函数
*/
//获取类所有Public的构造函数
Constructor[] cons1=clazz1.getConstructors();
//获取类所有Public和非Public的构造函数
Constructor[] cons2=clazz1.getDeclaredConstructors();
//根据传入的参数(参数类型为Class[]) ,获取含有指定参数类型的Public的构造器
Constructor cons3=clazz1.getConstructor(new Class[]{String.class});
//根据传入的参数(参数类型为Class[]) ,获取含有指定参数类型的Public和非Public的构造器
Constructor cons4=clazz1.getDeclaredConstructor(new Class[]{String.class});
//获取构造函数的参数类型
Class[] parames=cons3.getParameterTypes();
//获取构造函数的修饰符
int mod=cons3.getModifiers();
String modifier=Modifier.toString(mod);

Field

/**
* 获取类的属性(其中获取修饰符的方法与上面相同)
*/
//获取类所有Public的属性
Field[] field1=clazz1.getFields();
//获取类所有Public和非Public的属性
Field[] field2=clazz1.getDeclaredFields();
//根据传入的参数(参数类型为String) ,获取指定属性名的Public的属性
Field field3=clazz1.getField("name");
//根据传入的参数(参数类型为String) ,获取指定属性名的Public和非Public的属性
Field field4=clazz1.getDeclaredField("name");
//设置指定对象的属性值(传入一个与其Class实例相对应的对象)
field3.setAccessible(true);
field3.set(new Person(), "李明");
//获取指定对象的属性值
Object obj=field3.get(new Person());

Method

/**
* 获取类的方法
*/
//获取类所有Public的属性
Method[] method1=clazz1.getMethods();
//获取类所有Public和非Public的属性
Method[] method2=clazz1.getDeclaredMethods();
//根据方法名和方法参数类型 ,获取指定的Public的方法
Method method3=clazz1.getMethod("setName",new Class[]{String.class});
//根据方法名和方法参数类型  ,获取指定的Public和非Public的方法
Method method4=clazz1.getDeclaredMethod("setName",new Class[]{String.class});
//获取方法异常类型
Class[] exceptions=method3.getExceptionTypes();
//获取方法返回值类
Class type=method3.getReturnType();
//根据指定对象以及传入的方法参数执行方法
method3.invoke(new Person(), new String[]{"李明"});



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 反射 动态调用