A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kuqi3712 中级黑马   /  2017-12-24 23:54  /  1170 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 kuqi3712 于 2017-12-25 21:40 编辑

反射:
                在运行时可以获取任意类的所有方法和属性(包括私有)
                在运行时调用任意一个对象的所有方法和属性
反射的前提:
                获取类的对象(Class对象)字节码对象
               
                1.Object的getClass方法必须要有对象才能使用
                2.Class 变量名 = 类名.Class;
                3.Class 变量名 =  Class.fornName("包名.类名");
               

通过反射获取构造方法并使用(为了创建对象):
                Constructor<T> getConstructor(Class<?>... parameterTypes)
          返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
                Constructor<?>[] getConstructors()
          返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有(公共public 修饰的)构造方法。
                newInstance();创建一个对象
               
                Constructor con1=stuClass.getConstructor(String.class,int.class);获取构造方法,不传参数为无参构造,上面为无参下面也为无参,有参同理
                Object obj1=con1.newInstance("王五",23);(此newInstance为Constructor中的方法)
               
Class类:
                也有getInsetance()方法只能使用无参构造
               
                Field getField(String name)
          返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定(公共)成员(变量)字段。
                Field[] getFields()
          返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问(公共)字段(变量)。
               
                Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
          返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。
                Constructor<?>[] getDeclaredConstructors()
          返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。
                  
                Field getDeclaredField(String name) (name为字段值 比如Student中的 name ,age 等)
          返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
                Field[] getDeclaredFields()
          返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
                Method getDeclaredMethod(String name, Class<?>... parameterTypes)
          返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
                Method[] getDeclaredMethods()
          返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。


Field类:
                Object get(Object obj)
          返回指定对象上此 Field 表示的字段的值。
                 void set(Object obj, Object value)
          将指定对象变量上此 Field 对象表示的字段设置为指定的新值。

AccessibleObject:
                (取消访问限制)不会检查 成员的 修饰符(private 等)
                void setAccessible(boolean flag)  
                setAccessible(true);表示取消访问检查
Mehod类:
                 Object invoke(Object obj, Object... args)
          执行方法,obj为具体的对象 ,后面的是参数列表
                  反射调用静态方法时 可以直接invoke(null);
                  
JavaBean类:
                1.用于封装数据
                2.类使用公共修饰
                3.提供私有修饰的成员变量(提高安全性)
                4.为成员变量提供公共的访问方式(get,set)
                5.有构造方法(只提供无参的即可),选择提供有参
                6.实现一个序列化接口Serializable(方便被写到文件中)
               
BeanUtils:Apache commons主要功能就是为了简化JavaBean封装数据的操作        (不是jdk提供的)
                static void        setProperty(Object bean, String name, Object value)
                设置属性
                static String        getProperty(Object bean, String name)
                获取属性
                上面的并不是直接操作成员变量名,而是操作的get和set方法
                static void        populate(Object bean, Map properties)
                底层是反射;
                把map中的映射关系赋值给javaBean中对应的成员变量,如果没有找到的就不赋值
jar包,里面存的class文件
                1.将jar包复制到项目的子目录下
                2.鼠标选中要导入的jar包右键build path
               
                泛型时只执行于编译阶段,运行时泛型会被替换为Object

               
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端

4 个回复

倒序浏览
等你更新哟
回复 使用道具 举报
回复 使用道具 举报
更新了
回复 使用道具 举报
多多更新哟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马