反射(reflect)的knowledge

来源:互联网 发布:挡土墙计算软件2016 编辑:程序博客网 时间:2024/06/05 10:50

1.     获取字节码文件对象的三种方式:

a)      每一个类型(包括基本类型)都有一个静态的属性class,示例如下:

Person p = new Person();

P.class;

              b)  Object类中的方法:

                     ClassgetClass()  示例:Person.getClass()

              c)Class类的静态方法::

                static Class forName(StringclassName(全限定类名))

2.     反射创建对象的前提:

a)      类必须有空参构造方法

b)      空参构造方法必须是public修饰

 

3.Class类的方法:

获取构造方法:

Constructor<T>getConstructor(Class<?>... parameterTypes)

          返回一个Constructor 对象,它反映此 Class 对象所表示的类的指定公共

 

 Constructor<?>[] getConstructors()

          返回一个包含某些Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。

 

暴力反射获取构造方法:

 Constructor<T>getDeclaredConstructor(Class<?>... parameterTypes)

          返回一个Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。

 

TnewInstance(Object... initargs)

          使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

 

voidsetAccessible(boolean flag)

          将此对象的accessible 标志设置为指示的布尔值,设置为true就可以对类进行反射操作属性,方法等

               

               

 Object invoke(Object obj, Object... args)

          对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

               

MethodgetMethod(String name, Class<?>... parameterTypes)

          返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。

 Method[] getMethods()

          返回一个包含某些Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。

 

暴力反射获取类中的方法:

MethodgetDeclaredMethod(String name, Class<?>... parameterTypes)

          返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。

 

       获取类中的字段: 

 Field getField(String name)

          返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。

 Field[] getFields()

          返回一个包含某些Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。

 

暴力反射获取字段:

 Field getDeclaredField(String name)

          返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。

 Field[] getDeclaredFields()

          返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。

               

        Object get(Object obj)

          返回指定对象上此Field 表示的字段的值。

               

 void set(Object obj, Object value)

          将指定对象变量上此Field 对象表示的字段设置为指定的新值。

    

常见面试题:

1.     简述Java中的反射作用:

可以通过配置文件来动态配置和加载类,,以实现软件工程理论里所提及的类与类,模块于模块之间的解耦.反射最经典的应用就是spring框架.

2.     什么是反射:

     反射就是动态加载对象,并对对象进行剖析,在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制.

 

原创粉丝点击