(day21)常见的反射api+反射应用场景(优缺点)

2019.07.26(day21)

常规的反射api:

-反射方式创建对象
    1.用无参的构造创建对象
        Class对象.newInstance();//常用

    @Test
    public void test1() throws Exception{
        Class clazz=Class.forName("反射.User");
        Object obj=clazz.newInstance();
        System.out.println(obj.getClass());
    }


    2.用有参构造创建对象
        Class对象.getConstructor(new Class[]{若干参数的类类型}).newInstance(构造函数的参数);

    @Test
    public void test2() throws Exception{
        Class clazz=Class.forName("反射.User");
        Constructor constructor=clazz.getConstructor(String.class,String.class);
        Object obj=constructor.newInstance("张三","s001");
        System.out.println(obj.getClass());
    }


    

-反射的方式获取Field中的信息
    1.获取当前类以及长辈类的public Field
        Field[] fields=Class对象.getFields();
    2.获取当前类中的所有的属性Field
        Field[] fields=Class对象.getDeclaredFields() ;
    3.获取当前类以及长辈类中指定的公有属性
        Field field=Class对象.getField(String fieldName);
    4.获取当前类中指定的属性
           Field field=Class对象.getDeclaredField(String fieldName);
       5.通过反射设定Field属性的值
           Field对象.set(Object obj,Object value);
           如果Field对象是私有的
           必须先执行:Field对象.setAccessable(true);//设置属性可以访问
       6.通过反射获取Field的值
           Object value=Field对象.get(Object obj);
           如果Field是私有
           必须先执行:Field对象.setAccessable(true);//设置属性可以访问

-反射的方式获取Method方法的信息
    1.获取当前类以及长辈类的公有方法
           Method[] methods=Class对象.getMethods();
       2.获取当前类中的所有的方法
           Method[] methods=Class对象.getDeclaredMethods();
     3.获取当前类以及长辈类中的指定的公用的方法
         Method method=Class对象.getMethod(String methodName,new Class[]{methodName的参数类型});
     4.获取当前类中的指定的方法
           Method method=Class对象.getDeclaredMethod(String methodName,new Class[]{methodNamed的参数类型});
       5.通过反射动态调用指定Method
           Object returnValue=Method对象.invoke(Object obj ,Object...args);
           解析:
             就是通过obj这个对象调用Method对象确定的方法,给这个方法
             传递args参数,Method对象对应的方法的返回值是returnValue

-反射获取Constructor构造函数
      查api文档
  
-反射获取Annotatioin注解
      查api文档

反射的应用场景:
    -用反射实现jdbc的通信查询和通用更新
    -用反射解析注解
    -单元测试,就是用反射实现的
    -常见的框架,spring框架,springmvc框架...都是用反射实现的
    -EL表达式
    ...

反射的优点:
    大幅度提高开发效率,框架就是用反射实现的,框架提高了开发效率

反射的缺点:
    反射的执行效率比非反射的执行效率低
    反射会暴露类中的所有细节,突破了封装
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值