Java反射机制
一、什么是Java反射机制就是正在运行,动态获取这个类的所有信息。
二、反射机制的作用 1,反编译:.class–>.java 2.通过反射机制访问java对象的属性,方法,构造方法等;
三、反射机制的应用场景
JDBC加载驱动、Spring IOC、框架、设计模式
四、反射机制获取类 //第一种方式: Classc1 = Class.forName(“Employee”); //第二种方式: //java中每个类型都有class 属性. Classc2 = Employee.class; //第三种方式: //java语言中任何一个java对象都有getClass 方法 Employeee = new Employee(); Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)
五、反射机制创建对象方式1. 无参构造函数 //newInstance使用无参构造函数 创建对象。 //forName 必须传入class类的完整路径。 Class<?> c = Class.forName(“entity.User”); Object newInstance = c.newInstance(); User user = (User) newInstance; user.setName(“张三”); System.out.println(user.getName()); 2. 有参构造函数//newInstance使用有参构造函数 创建对象。 Class<?> c = Class.forName(“entity.User”); Constructor<?> con = c.getConstructor(String.class,int.class,String.class); Object newInstance = con.newInstance(“张三”,22,”男”); User user = (User)newInstance; System.out.println(user.getName()+user.getAge()+user.getSex());
六、反射api
方法名称 | 作用 |
getDeclaredMethods [] | 获取该类的所有方法 |
getReturnType() | 获取该类的返回值 |
getParameterTypes() | 获取传入参数 |
getDeclaredFields() | 获取该类的所有字段 |
setAccessible | 允许访问私有成员 |
七、使用反射为类私有属性赋值
Class c = Class.forName("entity.User"); Field field = c.getDeclaredField("name"); Object object = c.newInstance(); field.setAccessible(true); field.set(object, "张三"); User user = (User)object; System.out.println(user.getName()); //通过java反射机制输出私有属性值 Class c = Class.forName("entity.User"); Constructor con = c.getConstructor(String.class,int.class,String.class); Object newInstance = con.newInstance("张三",22,"男"); Field field = c.getDeclaredField("name"); field.setAccessible(true); System.out.println(field.getName()+"-----------"+field.get(newInstance));