1.方式一:调用类中的oublic 修饰的无参构造器
2.方式二:调用类中的指定构造器
3.Class 类相关方法/** * @author www.duidaima.com * @version 1.0 */ public class ReflectAccessProperty { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException { //1.得到Student类对应的Class对象 Class<?> stuClass = Class.forName("com.gbx.reflection.Student"); //2.创建对象 Object o = stuClass.newInstance();//o 得运行类型就是Student //3.使用反射得到 age属性对象 Field age = stuClass.getField("age"); age.set(o,18);//通过反射设置属性 System.out.println(o); //4.使用反射操作name属性 Field name = stuClass.getDeclaredField("name"); //对name进行暴破 name.setAccessible(true); name.set(o,"小黄");// name.set(null,"子");//因为name是static属性,因此o也可以写出nulL System.out.println(o); } } class Student{ public int age; private static String name; public Student() { } @Override public String toString() { return "Student{" + "age=" + age + '}'; }访问方法
5.注意:如果是静态方法,则 invoke 的参数 o,可以写成 null
public class ReflectAccessMethod { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { //1.得到Boss类对应的Class对象 Class<?> bossCls = Class.forName("com.gbx.reflection.Boss"); //2.创建对象 Object o = bossCls.newInstance(); //3.调用public的hi方法 //Method hi = bossCls.getMethod("hi"); //3.1得到hi方法对象 Method hi1 = bossCls.getDeclaredMethod("hi",String.class); //3.2调用 hi1.invoke(o,"Lee"); //4.调用 private static 方法 //4.1得到 say 方法对象 Method say = bossCls.getDeclaredMethod("say", int.class, String.class, char.class); say.setAccessible(true); System.out.println(say.invoke(100, "小黄", "女")); //4.3因为say方法是static的,还可以这样调用,可以传入null System.out.println(say.invoke(null,200,"李四",'女')); //5.在反射中,如果方法有返回值,统一返回0bjct,但是他运行类型和方法定义的返回类型一致 Object reVal=say.invoke(null,300,"王五",'男'); System.out.println("reVal的运行类型="+reVal.getClass());//String } } class Boss{ public int age; private static String name; private static String say(int n,String s,char c){ return n +" "+s +" "+c; } public void hi(String s){ System.out.println("hi" + s); } }