studyNote_java基础_Day21

反射方式创建对象

  1. 用无参构造创建对象

Class.newInstance();//常用

  1. 有参构造创建对象

Class对象.getConstructor(newClass[]{若干参数的类类型});

比如:

           User user=new User(“张三”,”zs”);

           User.getClass().getConstructor(new Class[]{String.class,String.class}).newInstance(“张三”,”zs”);

 

-反射方式获取Field中的信息

  1. 获取当前类及长辈类的public Field

Field[] field=Class对象.getField();

  1. 获取当前类中所有的属性(公有和私有)

Field[] fields=Class对象.getDeclaredFields();

  1. 获取当前类及长辈类中的指定的公有属性

Filed field=Class.getField(String filedName);

  1. 获取当前类中指定的属性

Field field=Class对象.getDeclaredField(String fieldName);

  1. 通过反射设定Field属性的值

Field对象.setObject(Object obj,Object value);

如果Field是私有的,必须先执行:Field对象.setAccessable(true);

  1. 通过反射动态获取Field的值

Object value=Field对象.get(Object obj);

                   如果Field是私有的,必须先执行: Field对象.setAccessable(true);

-反射方式获取Method方法的信息

         1.获取当前类及长辈类中的公有方法

         Method[] methods=Class对象.getMethods();

         2.获取当前类中的所有方法

         Method[] methods=Class对象.getDeclaredMethods();

  1. 获取当前类及长辈类中指定的公有方法

Method method=Class对象.getMethod(String methodName,new Class[]{methodName的参数的类类型})

  1. 获取当前类中指定的方法

Method method=Class对象.getDecalaredMethod(String methodName,new Class[]{methodName的参数的类类型})

         5通过反射动态调用指定的Method

         Object returnvalue=Method对象.invoke(Object obj,Object…args);

         解析:

                   通过obj这个对象调用Method对象确定的方法,并把参数args传入方法

                   Method对象对应的方法返回值是returnValue

-反射获取Construetor构造函数

         查api文档

-反射获取Annotation注解

         查api文档

 

在哪些地方使用反射,反射的应用场景

 -反射实现jdbc的通用查询和通用更新

 -反射解析注解

 -单元测试,用反射实现

 -常见的框架,spring springmvc等其他框架,用反射实现

 -EL表达式

 -等等

 

反射的优点:

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

反射的缺点:

         反射的效率比非反射的方式的执行效率低

         反射可以暴露类中的所有的细节,突破了封装

上一篇:190908-DAY21


下一篇:python day21