java 反射机制

来源:互联网 发布:淘宝突然登不上去了 编辑:程序博客网 时间:2024/06/04 18:37
类加载器:
     获取到每一个字节码文件(.class)对应的 Class 类型的对象.(面向对象)
1.1 、JAVA 反射机制:
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象, 都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制 。

1.2、Class 类:
阅读 API 的 Class 类得知,Class 没有公共构造方法。Class 对象是在加载类时由」ava 虚拟机以及通过调用类加載器中的 defineClass () 自动构造的。

1 1.2.1 获取 class 对象的三种方式:
1) 通过 Object 类中的 getObject0 方法
Object 的 getClass()
2) 通过类名.class 获取到字节码文件对象(任意数据类型都具备一个 class 静态属性,看上
去要比第一种方式简単)。
类名.class;
3) 通过 class 类中的方法(将类名作为字符串传递给 class 类中的静态方法 forName 即
可)。Class.forName(String className)

注意:第三种和前两种的区别:
前两种你必须明确类类型.
后面是指定这种类型的字符串就行.这种扩展更强.我不需要知道你的类.我只提供字符
串,按照配置文件加载就可。

1.3 通过反射机制获取类的构造方法并使用
在反射机制中,把类中的成员(构造方法、成员变量、成员方法)都封装成了对应的类
进行表达。其中,构造方法使用 Constructor 表示。可通过 Class 类中提供的方法获取构造方法:

1) 获取指定的构造方法
Constructor getConstructor(Class... parameterTypes)
Constructor getDeclaredConstructor(Class... parameterTypes)

2)获取多个构造方法
Constructor[] getDeclaredConstructors()
Constructor[] getDeclaredConstructors(Class... parameterTypes)

1 1.3.1 通过反射方式获取构造方法, 创建对象。
获取构造方法,步骤如下:
1. 获取 Class 对象
2. 获取制定的构造方法
3. 通过构造方法类 Constructor 中的方法,创建对象
Public T newInstance(Object … initargs)

2 1.3.2 通过反射方式获取私有构造方法, 创建对象。
AccessibleObject 类是 Field、method 和 Constructor 对象的父类。它提供了将反射的对
标记为在使用时取消默认 Java 语言访问控制检查的能力。
Public void setAccessible(true);//取消 java 语言访问检查

获取私有构造方法,步骤如下:
1 获取 Class 对象
2 获取制定的构造方法
3 暴力访问,setAccessible(true)
4. 通过构造方法类 Constructor 中的方法,创建对象
Public T newInstance(Object … initargs)

1.4 通过反射机制获取类的成员变量并使用
在反射机制中,用 Field 类封装了属性信息,一个 Field 类封装了一个属性信息。

1)获取多个的属性信息
Field[] getFields()
Field[] getDeclaredFields()

2)获取指定的属性信息
Field getField(String name)
Field getDeclaredField(String name)

1 1.4.1 通过反射方式获取对象的属性信息并作出操作。
获取属性并操作,步骤如下:
1.获取 Class 对象
2.获取制定的构造方法
3.通过构造方法类 Constructor 中的方法,创建对象
4.获取指定的成员变量(暴力访问)
5.给指定的成员变量赋值或者获取值
Object get(Object obj)
void set(Object obj, Object value)

1.5 通过反射机制获取类的 成员方法并使用
在反射机制中,用 Method 类封装了方法信息。

3)获取多个的方法
Method[] getMethods() //连同父类
Method[] getDeclaredMethods() //仅仅获取子类独有的

4)获取指定的方法
Method getMethod(String name, Class<?>... parameterTypes)
Method getDeclaredMethod(String name, Class<?>... parameterTypes)

1 1.4.1 通过反射方式获取方法并作出操作。
步骤如下:
1.获取 Class 对象
2.获取制定的构造方法
3.通过构造方法类 Constructor 中的方法,创建对象
4.获取指定的成员方法(暴力访问)
5.执行方法
Object invoke(Object obj, Object... args)
0 0