反射

    技术2022-07-20  82

    Student stu=new Student(); Class<?> c = Class.forName("test.Student"); //得到构造方法 Constructor<?> ca = c.getConstructor(); //通过构造方法实例化 ca.newInstance(); 三种方式获得类对象 1.类名.class.newinstace:来获得无参的方法 Student stu = Student.class.newInstance(); 2.对象名.getclass Student stu=new Student(); Class<? extends Student> c = stu.getClass(); //Field:只能得到公开的属性 Field f = c.getField("sid"); //DeclaredField:得到所有的修饰符属性 Field f = c.getDeclaredField("sid"); System.out.println(f); //得到属性名 System.out.println(f.getName()); //得到属性类型 System.out.println(f.getType()); //得到属性的修饰符,修饰符是用数字表示的 System.out.println(f.getModifiers()); 3class.formName(全险定名) Class<?> c = Class.forName("test.Student"); Object obj = c.newInstance(); Student stu=(Student)obj; 实例化类对象 c.newInstance(); 获取该指定对象的属性 Field f = c.getDeclaredField("sid"); 得到属性名 System.out.println(f.getName()); //得到属性类型 System.out.println(f.getType()); //得到属性的修饰符,修饰符是用数字表示的 System.out.println(f.getModifiers()); //得到所有的属性 Field[] fs = c.getDeclaredFields(); for (Field f : fs) { // 得到属性名 System.out.println(f.getName()); // //得到属性类型 System.out.println(f.getType()); // //得到属性的修饰符,修饰符是用数字表示的 System.out.println(f.getModifiers()); } //私有的属性 Class<?> c = Class.forName("test.Student"); //拿到类对象的构造方法,():里面写他代什么参 Constructor<?> cs = c.getConstructor(String.class); //给实例化对象添加值 Object stu = cs.newInstance("soo1"); //获取该对象的属性 Field f = c.getDeclaredField("sid"); //凡是该对象私有的(方法,属性)运行前都要授权 f.setAccessible(true); System.out.println(f.get(stu)); //私有的方法 Constructor<?> cq = c.getDeclaredConstructor(Integer.class); Field ff = c.getDeclaredField("age"); cq.setAccessible(true); Object sq = cq.newInstance(17); System.out.println(ff.get(sq)); //多个参数 //拿到该类的对象 Class<?> c = Class.forName("test.Student"); //拿到带两个构造方法 Constructor<?> cs = c.getDeclaredConstructor(String.class,String.class); //用该构造方法实例化 Object obj = cs.newInstance("s002","zs"); //得到这两个属性 Field[] fi = c.getDeclaredFields(); for (Field f : fi) { //给私有属性授权 f.setAccessible(true); System.out.println(f.get(obj)); } //得到该类对象方法 Class<?> c = Class.forName("test.Student"); Object obj = c.newInstance(); Method m = c.getMethod("hello"); //运行方法 m.invoke(obj); //获取私有代参的方法`在这里插入代码片` Class<?> c = Class.forName("test.Student"); Object obj = c.newInstance(); Method m = c.getDeclaredMethod("add",Integer.class,Integer.class); m.setAccessible(true); System.out.println(m.invoke(obj, 1,2)); }

    }

    Processed: 0.014, SQL: 9