Java反射

什么叫反射,什么叫正射

正射:正常情况下,我们使用某个类时必定知道他是什么类,用来做什么,我们只需要对这个类进行实例化,之后使用这个类进行操作。

 Person person = new Person();
 person.setName("apple");

反射:一开始我们并不知道我要初始化的类对象是什么,自然也无法使用new关键字来创建对象了。

 Class cas = Class.forName("domain.person");
 Constructor constructor = cas.getConstructor();
 Object object = constructor.newInstance();
 //获取反射类中的方法
 Method method = cas.getMethod("setName", String.class);
 //设置值
 method.invoke(object, "张三");
 //获取反射类中的方法
 method = cas.getMethod("getName");
 //获取值
 String s = method.invoke(object).toString();
 System.out.println(s);

反射获取对象的步骤

  1. 获取类的class对象实例(三种方式)

    • 通过Class.forName("类的全限定名")静态方法(使用这种方法需知晓该类的全路径名)

       Class cas = Class.forName("domain.person");
    • 使用.class方法(使用这种方法只适合在编译前就知道操作的class)

       Class cas = String.Class; 
    • 使用类对象的getClass()方法

       Class cas = new String("张三").getClass();

  2. 根据Class对象实例获取Constructor对象(通过反射创建类对象的有两种方式)

    • 通过Class对象的newInstance()方法

       Class cas = Class.forName("domain.person");
       person p = (person)cas.newInstance();
    • 通过Constructor对象中的newInstance()方法

       //获取类
       Class cas = person.class;
       //获取Class的getConstructor
       Constructor constructor = cas.getConstructor();
       //根据Constructor对象的newInstance()方法创建对象
       person p = (person)constructor.newInstance();
    • 通过Constructor对象创建类对象可以选择特定的构造方法,通过Class对象只能使用默认无参构造方法

  3. 使用Constructor对象的newInstance方法反射类对象(2、3步骤合并)

  4. 获取类的方法

     Method method = cas.getMethod("方法名",对象.Class);
  5. 调用invoke方法调用方法

     method.invoke(object,14);

获取反射类的属性、方法、构造器

  1. 获取属性

    • 通过Class对象的getFields()方法可以获取Class类的属性,但是无法获取私有属性

       Class cas = person.class;
       Field[] fields = cas.getFields();
       for (Field field : fields) {
           System.out.println("属性名称"+field.getName());
       }
       //输入所有属性为public的名称
    • 通过Class对象的getDeclaredFileds()方法可以私有属性在内的所有属性;

       Class cas = person.class;
       Field[] fields = cas.getDeclaredFileds();
       for (Field field : fields) {
           System.out.println("属性名称"+field.getName());
       }
       //输入所有属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值