Java中反射机制

来源:互联网 发布:淘宝代购怎么设置 编辑:程序博客网 时间:2024/05/17 23:43
1.反射:用来获得正在运行的java对象
2.反射的功能
1)可以判断运行的对象所属的类
2)可以使用运行时对象具有的所有的成员方法和变量
3)可以通过反射调用到被private修饰的方法 
4)生成动态代理
3.实现 反射的类
1)Class:表示正在 运行的java程序的类和接口
2)Field:提供有关类或接口的属性信息
3)Constructor:提供类有点 的单个 构造 方法的信息 以及对他的权限
4)Method:提供有关类或者接口中的某个方法的信息   
4.使用反射步骤 
1)必须获得一个类的Class对象
Class c1 = Test.class;
Class c2 = Class.forName("类 的完整路径必须如:com.chinasofti.javacore.demo18.Person")
Class c3 = new Test().getClass();

2)可以调用Class对象中的方法获得类的属性 方法  构造方法等信息....


示例代码一:

import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;/** * java中反射中各种类的使用 * @author 周孟军时间:2016年7月27日 下午4:44:06  * */public class MainDemo {public static void main(String[] args) throws ClassNotFoundException {Class c1 = User.class;System.out.println("获得User类的完整包路径:" + c1.getPackage());// 常用的Class c2 = Class.forName("com.zmj.javase.reflect.User");System.out.println("获得User类的完整包路径:" + c2.getPackage());// 获得类的修饰符int i = c1.getModifiers();System.out.println(Modifier.toString(i));System.out.println("获得类的父类:" + c1.getSuperclass());// 获得类的成员变量Field[] fields = c1.getDeclaredFields();for (Field field : fields) {System.out.println(field.getName());}// 获得类的构造方法Constructor[] constructors = c1.getDeclaredConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}// 获得类的成员方法Method[] m = c1.getDeclaredMethods();for (Method method : m) {System.out.println("普通方法:" + method);}}}


示例二:

import java.lang.reflect.Method;/** * 反射的练习 * @author 周孟军时间:2016年7月27日 下午4:43:18  * */public class MainDemo2 {public static void main(String[] args) {// 通过反射创建对象try {Class cc = User.class;//创建对象User u = (User) cc.newInstance();Method method1 = cc.getDeclaredMethod("setName", String.class);method1.invoke(u, "zhou"); // 运行方法Method method2 = cc.getDeclaredMethod("getName");System.out.println(method2.invoke(u, null));//调用私有方法Method method3 = cc.getDeclaredMethod("show");//在调用私有方法钱需要加上method3.setAccessible(true);method3.invoke(u, null);} catch (Exception e) {e.printStackTrace();}}}

User类:

/** * User实体类 * @author 周孟军时间:2016年7月27日 下午4:43:47  * */public class User {private String name;private String gender;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public User(String name, String gender) {super();this.name = name;this.gender = gender;}public User() {super();}public void show() {System.out.println("我是私有方法。。。");}}

注意:通过反射创建对象的时候默认调用的是无参的构造方法。

1 0
原创粉丝点击