java反射技术总结

反射
1.1 基本概念

反射本质上就是一种动态编程的技术,可以在运行阶段动态地创建对象以及动态地调用方法,具体由实参决定。
优点:
1)动态的创建对象
2)动态的调用对象
缺点:
1)可读性差
2)编码的难度高
目前主流的框架技术底层都是反射的机制,如:structs、spring、hibernate等

普通的创建对象特点:代码简单、创建的对象台固定
如:

 Person p = new Person();   -  只能创建Person类型的对象。
 Student s = new Student(); -  只能创建Student类型的对象。    

    void show(){}
    void show(int i){}
    void show(double d){}
    ... ...

1.2 Class类

(1)基本概念
java.lang.Class类的实例代表应用程序的类和接口,通俗来说,就是该类的实例代表一种数据类型。
该类没有公共的构造方法,该类的实例都是由java虚拟机和类加载器自动构造。
(2)Class对象的获取方式
a.使用数据类型.class的方式可以获取该类型的Class对象。
b.使用对象.getClass()的方式可以获取该类型的Class对象。
c.使用包装类的TYPE属性获取该包装类对应基本数据类型的Class对象。
d.使用Class类的forName()方法获取参数类型的Class对象。

(3)常用的方法


> static Class forName(String className) 
> -获取参数指定类型的Class对象。    
> 
> T newInstance()  - 根据Class对象创建新实例。
> Constructor<T> getConstructor(Class... parameterTypes) 
> - 用于获取当前Class对象对应类中指定的公共构造方法。  
> 
>Constructor[] getConstructors()- 获取对应类中所有的公共构造方法。
>
>Field getDeclaredField(String name) - 获取对应类中指定的成员变量。    
>
>Field[] getDeclaredFields() - 获取对应类中所有的成员变量。
> 
>Method getMethod(String name, Class... parameterTypes) 
>       - 用于获取对应类中指定的公共成员方法。    
>       
>Method[] getMethods() - 用于获取对应类中所有的公共成员方法。

1.3 Constructor类

java.lang.reflect.Constructor类用于描述获取到的构造方法。 T
newInstance(Object… initargs) - 调用当前描述的构造方法去创建新实例。

1.4 Field类

java.lang.reflect.Field类用于描述获取到的成员变量。
Object get(Object obj) -用于获取指定对象中此成员变量的数值。
void setAccessible(boolean flag) -参数为true表示可以访问私有成员。
void set(Object obj, Object value) - 用于修改指定对象中当前成员变量的数值。

1.5 Method类

java.lang.reflect.Method类用于描述获取到的成员方法。
Object invoke(Object obj, Object… args) - 用于obj对象调用当前方法,并传递args作为实参。

你可能感兴趣的:(java)