import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test { public static void main(String [] args)throws Exception { //如何获取字节码文件对象 Wise.class // 1.调用 Wise.class Class clzz1 = Wise.class; // 2.调用forName()方法类名作为参数 Class clzz2 = Class.forName("Wise"); // 3.通过对象的getClass()方法来获取 Wise wise = new Wise(); Class clzz3 = wise.getClass(); System.out.println(clzz1); System.out.println(clzz2); System.out.println(clzz3); //如何获取属性,以及访问属性 Field field = clzz1.getDeclaredField("name"); //暴力反射 field.setAccessible(true); field.set(wise,"linde"); System.out.println(wise.getName()); Field [] fields = clzz1.getDeclaredFields(); //如何获取方法,以及调用方法 Method method = clzz1.getDeclaredMethod("test",null); method.invoke(wise,null); Method method2 = clzz1.getDeclaredMethod("test2",String.class,int.class); method2.invoke(wise,"rose",19); //如何获取构造方法来创建对象 //获取空参构造方法,创建对象 Wise wise2 =(Wise)clzz1.newInstance(); //获取有参构造方法,创建对象 Constructor cs = clzz1.getDeclaredConstructor(String.class,int.class); Wise wise3 =(Wise)cs.newInstance("Wise",11); System.out.println(wise3.getName()+ "..." + wise3.getAge()); //获取Wise类的字节码文件对象 //类clzz = Wise.class; Wise wis = new Wise(); //获取空参构造方法创建对象 Wise wi =(Wise)clzz1.newInstance(); Field [] fields1 = clzz1.getDeclaredFields(); for(Field fiel:fields1){ System.out.println(fiel.getName()); if(fiel.getName().equals("name")){ //暴力访问 fiel.setAccessible(true); fiel.set(wise,"程序员"); } } System.out.println(wise.getName()); Method [] methods = clzz1.getDeclaredMethods(); for(Method method1: methods){ System.out.println(method1.getName()); if(method1.getName().equals("test")){ System.out.println("说明有这个方法"); } if(method1.getName().equals("test")){ method1.invoke(wise,null); } if(method1.getName().equals("test2")){ method1.invoke(wise,"HelloWorld"); } } } }
Wise类 public class Wise { private String name ; private int age ; public Wise() { } private Wise(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } private void setName(String name) { this.name = name; } public int getAge() { return age; } private void setAge(int age) { this.age = age; } }