Java反射机制

一、java反射之基本类周边信息获取

 

总结:

    1、获取类类型对象的集中方式

            Person per = new Person();

            Class<?> a = per.getClass();//方法一

            Class<?> b = Person.class;//方法二

            Class<?> c = Class.forName(String Classname);//方法三(推荐使用)

            Class<?> d = context.getClassLoader().loadClass(String Classname);//方法四(不建议使用)

 

    2、获取包名类名

            public String getName();//获取完整的类名(包名.类名)

            public String getSimpleName();//仅获取类名

            public Package getPackage();//获取类类型所对应得package对象

 

    3、获取超类Class对象

            public    Class<?>    getSuperclass();//获取普通函数的父类Class对象

            public Type getGenericSuperclass();//针对范型父类而设计

 

    4、获取接口Class对象

            public Class<?>[] getInterfaces();//获取普通接口的方法

            public Type[]    getGenericInterfaces();//获取范型接口的方法

            

    5、类访问修饰符

            int    modifiers = class.getModifiers();//获取类访问修饰符对应的int变量

            String Modifier.toString(int modifiers);//根据整形变量来生成对应的修饰符字符串

            boolean   Modifier.isAbstract(int modifiers);//isXXX()系列函数用以检查特定的修饰符是否存在  

 

 

 

二、类内部信息获取

 

    总结:

            1、获取构造函数

                    //获取public类型的构造函数

                    Constructor<?>[]    getConstructors();

                    Constructor<T>[]    getConstructor(Class<?>...    parameterTypes);

 

                    //获取所有类型的构造函数

                    Constructor<?>[]    getDeclaredConstructors();

                    Constructor<T>[]    getDeclareConstructor(Class<?>...    parameterTypers);

 

 

             2、Constructor系列方法之构造实例

                    public T    newInstance(Object...    args);

                    (newInstance可以传入可变长 参数,传入的参数类型、顺序、个数都必须与当前Constructor对象一一对应)

 

(*)在反射中,总共有三种类型具有getAccessible(boolean flag)函数

           Constructor        Feild        Method

            构造函数            成员变量    成员函数

 

              3、Constructor系列方法之获取参数类型

 

                    Class<?>[] getParameterTypes();//用于解析一般函数

 

                    Type[]    getGenericParameterTypes();//用于解析范型对象

 

              4、Constructor系列方法之获取构造方法的访问修饰符

 

                    Class<?> class = Person.class;

                    Constructor<?>[]    constructors = class.getDeclaredConstructors();

                    for(Constructor<?> c : constructors){

                            c.setAccessbile(true);

                            int    modifier = c.getModifiers();

                            System.out.println(Modifier.toString(modifier));

                    }

                        

 

                5、Constructor系列方法之getDeclaringClass()

 

                        Class<?>    getDeclaringClass();//用于得到声明Constructor的类的Class对象

 

                        Class<?> c = Person.class;

                        Constructor<?>[]    constructor = c.getDeclaredConstructor();

                        Class<?> declarClass = constructor.getDeclaringClass();

                        System.out.println(declarClass.getName());

 

           (二)、成员变量的获取与设置

 

                    1、获取Field对象

                            //仅能获取声明类型为public的成员变量

                            Field[]    getFields();

                            Field    getField(Sting    name);//得到指定变量名的对应的Field对象

 

                            //可以获取全部的成员变量

                            Field[]    getDeclaredFields();

                            Feild    getDeclaredField(string    name);//得到指定变量名的对应的Field对象

 

                            field.getName();//用于得到当前成员变量的名称

                            field.getType();//用于得到当前成员变量的类型

 

                    2、Field的    get    set操作

                            //获取、设置指定类对象中某变量的值

                            //第一个参数Object为要设置的对象,第二个参数是此Field对象对应的值

                            void    set(Object    object,    Object    value)

                            //参数是要获取值的类的对象,返回值为在此类的实例中,对应成员变量的值

                            Object    get(Object    object)

 

                    3、Field之Modifiers与getDeclaringClass()

                            //获取该成员变量所对应的访问修饰符所对应的int数字

                            int    getModifiers()

                            //获取声明该变量的类

                            Class<?>    getDeclaringClass()

 

 

            (三)成员函数的获取与设置

                    

                       1、获取Method对象

                            Method[]    getMethods()

                            Method    getMethod(String name , Class<?>... parameterTypes)

 

                            Method[]    getDeclaredMethods()

                            Method    getDeclaredMethod(String name , Class<?>... parameterTypes)

 

 

                        2、Method之Invoke

                              invoke函数的功能是用于执行Method对象所对应的函数的。

 

                              Object    invoke(Object    receiver , Object ...    args)

 

                                Object  receiver : 执行该函数的类对象

                                Object...  args :可变长参数,用于传入该函数声明中的参数所对应值的列表

 

 

                          3、Method之获取参数类型

                                Class<?>[]    getParameterTypes()

                                 Type[]    getGenericParameterTypes()

 

 

                          4、Method之获取返回值类型

 

                                Class<?>    getReturnType()

                                Type    getGenericReturnType()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值