反射的基础运用
1.获取class对象的三种方法
1 public class DemoReflect { 2 public static void main(String[] args) { 3 try { 4 //1.通过Class类的静态方法 froName() 5 Class clazz1 = Class.forName("cn.kgc.Reflect.Person"); 6 //2.通过某个类的对象获得类对象 Object------>Object.getClass() 7 Person p = new Person(); 8 Class clazz2 = p.getClass(); 9 //3.通过类名获取 任何数据类型都有一个“静态”的class属性 类属于一种引用数据类型 10 Class clazz3 = Person.class; 11 System.out.println(clazz1+"\n"+clazz2+"\n"+clazz3); 12 } catch (ClassNotFoundException e) { 13 e.printStackTrace(); 14 } 15 } 16 }
2.获取Class对象的信息
1 public class getClassInfo { 2 public static void main(String[] args) throws ClassNotFoundException { 3 //获得类对象 4 Class clazz = Class.forName("cn.kgc.Reflect.Person"); 5 //获得类对象的 简单类名 6 String className = clazz.getSimpleName(); 7 //获得类对象的 全类名 包括包名 8 String classFullName = clazz.getName(); 9 System.out.println(className+"\n"+classFullName); 10 } 11 }
3.获得类对象的构造方法并用构造方法获得实例对象
1 public class getConstruct { 2 public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, ClassNotFoundException { 3 //获得类对Person类对象 4 Class clazz = Person.class; 5 6 //获得类对象的无参构造方法 7 Constructor constructor1 = clazz.getConstructor(); 8 //获得有参构造方法 9 Constructor constructor2 = clazz.getConstructor(String.class, int.class); 10 //获得构造方法的数组 11 Constructor[] constructors = clazz.getConstructors(); 12 13 //通过获得的构造方法获得实例 14 //1.无参构造获得实例 15 Object obj01 = constructor1.newInstance(); 16 //2.有参构造获得实例 17 Object obj02 = constructor2.newInstance("小龙女", 28); 18 19 } 20 }
4.通过反射获得类对象的方法并使用得到的方法
1 public class Demo2GetMthod { 2 public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException { 3 Class clazz = Person.class; 4 Person p = (Person) clazz.newInstance();//获得实例对象 5 Method getName = clazz.getMethod("getName"); 6 Method setName = clazz.getMethod("setName", String.class); //如果是有参构造 方法名后边必须跟上参数类型的反射类 7 setName.invoke(p, "小龙女");//相当于 p.setName("小龙女") 8 } 9 }