public class ReflectTest { //调用指定的属性 @Test public void test1() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException { Class clazz = Class.forName("atdk.com.User");//开发中提倡使用这种方式 User u1 = (User) clazz.newInstance(); Field id = clazz.getField("id"); System.out.println(id.get(u1)); id.set(u1, 285212); System.out.println(id.get(u1)); } @Test public void test2() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException { Class clazz = Class.forName("atdk.com.User"); User u1 = (User) clazz.newInstance(); //调用这种方式可以访问任何的元素,不需要关注访问权限 Field possword = clazz.getDeclaredField("possword"); possword.setAccessible(true); System.out.println(possword.get(u1)); possword.set(u1, 285212); //possword.setAccessible(true); System.out.println(possword.get(u1)); } @Test //调用静态的属性(特殊在于静态属性不属于对象,生命周期长,不需找对象) public void test3() throws Exception { Class clazz = Class.forName("atdk.com.User"); Field info = clazz.getDeclaredField("info"); info.setAccessible(true); System.out.println(info.get(User.class)); info.set(User.class, 10); System.out.println(info.get(User.class)); } //******************调用指定的方法********************* @Test public void test4() throws Exception { Class clazz = Class.forName("atdk.com.User"); User u1 = (User) clazz.newInstance(); Method method = clazz.getDeclaredMethod("setId", int.class); method.setAccessible(true); method.invoke(u1, 10); } //********************调用指定的构造器************************* @Test public void test6() throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { Class clazz = User.class; Constructor declaredConstructor = clazz.getDeclaredConstructor(int.class, int.class, int.class); declaredConstructor.setAccessible(true); User u1 = (User) declaredConstructor.newInstance(10, 10, 10); System.out.println(u1); } //使用Constructor替换使用newInstance()的方式 //在空参构造器是private是,可以创建类的对象 @Test public void test7() throws Exception { Class clazz = User.class; Constructor declaredConstructor = clazz.getDeclaredConstructor(); declaredConstructor.setAccessible(true); User u1 = (User) declaredConstructor.newInstance(); System.out.println(u1); } }
java反射>>如何利用反射调用指定的属性,方法,构造器
最新推荐文章于 2024-09-27 00:45:01 发布