云间录  

1.、什么是反射
反射java语言中的一种机制,通过这种机制可以动态的实例化对象、读写属性、调用方法

2、类类
所有狗 狗类 Dog 狗对象 旺财

所有猫 猫类 Cat 猫对象 肥波

所有类 类类 java.lang.Class 类对象 特定类

3、反射获取类对象

1  class.forname("类全路径名");
2  类名.class
3  类实例.getclass()  代码如下:

package com.lingerqi.student;
 /**
  * 获取类对象
  * 1、class.forname("类全路径名");
  * 2、类名.class 
  * 3、类实例.getclass()
  * @author xyls
  *
  */
 public class test {
 
     public static void main(String[] args) throws ClassNotFoundException {
         Class fname = Class.forName("com.lingerqi.student.student");
         Class clz=student.class;
 //        student stu=new student();
 //        Class clz=stu.getClass();
         System.out.println(clz);
     }
 }

  

4、 反射三大作用
1 实例化对象
c.newInstance():  代码如下:

package com.lingerqi.student;

import java.lang.reflect.Constructor;

/**
 * 反射实例化
 * 1、能够实例化未知的类
 * @author xyls
 *
 */
public class test2 {

    public static void main(String[] args) throws Exception {
        Class clz = student.class;
        // student stu=(student)clz.newInstance();
        // 调用一个参数的构造方法创建一个对象
        // Constructor con=clz.getConstructor(String.class);
        // student stu=(student)con.newInstance("s001");
        // 两个参数的构造方法创建对象
        // Constructor con=clz.getConstructor(String.class,String.class);
        // student stu=(student)con.newInstance("s001","zs");
        Constructor con = clz.getDeclaredConstructor(Integer.class);
        con.setAccessible(true);
        student stu = (student) con.newInstance(12);

    }
}

  

2 动态调用方法

Method m;
m.invoke

 package com.lingerqi.student;
  
  import java.lang.reflect.Method;
  
  /**
   * 反射调用方法
   * @author xyls
   *
   */
 public class test3 {
 
     public static void main(String[] args)throws Exception {
         student stu=new student();
 //        stu.hello();
         Class clz=stu.getClass();
 //        Method m=clz.getDeclaredMethod("hello");
 //        m.invoke(stu);
         Method m=clz.getDeclaredMethod("add", Integer.class,Integer.class);
         m.setAccessible(true);
         m.invoke(stu, 20,4);
     }
 }

  

3 读写属性

Field set/get

 package com.lingerqi.student;
 
 import java.lang.reflect.Field;
 
 /**
  * 反射的赋值取值
  * @author xyls
  *
  */
 public class test4 {
 
     public static void main(String[] args)throws Exception {
         student stu=new student();
         Class clz=stu.getClass();
 //        Field field=clz.getDeclaredField("sid");
 //        field.setAccessible(true);
 //        field.set(stu, "s002");
 //        System.out.println(field.get("stu"));
         Field[] fields=clz.getDeclaredFields();
         for (Field field : fields) {
             field.setAccessible(true);
             System.out.println(field.getName());
             
         }
         
             
     }
 }

  

 

posted on 2019-06-14 18:58  云间录  阅读(135)  评论(0编辑  收藏  举报