反射的基础运用

 

 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 }

 

posted @ 2019-06-19 14:59  Mr.Li[0]  阅读(157)  评论(0编辑  收藏  举报