package com.itludan.demo.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import org.junit.Test; /** * @author 64229 *反射的测试 *反射的目的是为了操作某个类的属性或方法 */ public class ReflectDemo { private Field[] fields; @Test /** * 获得代表这个类加载到内存的字节码文件的对象Class对象. */ public void demo1() throws ClassNotFoundException{ // 通过类名获取 Class clazz = Person.class; // 通过类的实例对象获取 Person person = new Person(); Class clazz2 = person.getClass(); // 通过Class.forName静态方法获取 Class clazz3 = Class.forName("com.itludan.demo.reflect.Person"); } @Test /** * 通过反射操作其构造方法: * DBUtils: Person person = queryRunner.query(sql,new BeanHanlder(Person.class)); */ public void demo2() throws Exception{ // 反射第一步获得Class对象. Class clazz = Class.forName("com.itludan.demo.reflect.Person"); // 采用默认的无参数的构造方法创建: Person p = (Person) clazz.newInstance(); p.drink(); // 采用有参数的构造方法来创建对象 Constructor constructor = clazz.getConstructor(String.class,Integer.class); Person p1 = (Person) constructor.newInstance("w岩",28); System.out.println(p1.age); } @Test /** * 通过反射获得类中的属性: */ public void demo3() throws Exception{ // 获得Class对象 Class clazz =Class.forName("com.itludan.demo.reflect.Person"); // 获得私有的属性 Field field1 = clazz.getDeclaredField("name"); field1.setAccessible(true); Field field2 = clazz.getField("age"); Constructor c = clazz.getConstructor(String.class,Integer.class); Person p = (Person) c.newInstance("w岩",28); String name = (String) field1.get(p); Integer age = (Integer) field2.get(p); System.out.println(name); System.out.println(age); } @Test /** * 通过反射获得类中的方法:并且让方法执行. * */ public void demo4() throws Exception{ // 获得Class对象 Class clazz = Class.forName("com.itludan.demo.reflect.Person"); // 获得类中的方法: Method method = clazz.getDeclaredMethod("drink"); method.setAccessible(true); method.invoke(clazz.newInstance()); // 获取有参构造方法 Method method2 = clazz.getDeclaredMethod("sayByebye", String.class); String s = (String)method2.invoke(clazz.newInstance(),"w岩"); System.out.println(s); } }
反射和内省
猜你喜欢
转载自blog.csdn.net/ludadan/article/details/80372570
今日推荐
周排行