今天仔细看了看Java反射,现在把一些重点罗列,希望后面的同学能有收获
反射就是把Java类中的各种成分映射成相应的java类. 构造,函数,成员
//至今我也就就在jdbc中用到反射,听说spring中会有很多反射。估计到了那个时候能更熟悉反射机制,抓紧时间学习
Java 反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
在 JDK 中,主要由以下类来实现Java 反射机制,这些类都位于java.lang.reflect包中。
Class类:代表一个类。
Field类:代表类的成员变量(成员变量也称为类的属性)。
Method类:代表类的方法。
Constructor 类:代表类的构造方法。
Array类:提供了动态创建数组,以及访问数组元素的静态方法。
Class类是Reflection API中的核心类,它有以下方法。
getName():获得类的完整名字。
getFields():获得类的public类型的属性。
getDeclaredFields():获得类的所有属性。
getMethods():获得类的public类型的方法。
getDeclaredMethods():获得类的所有方法。
getMethod(String name, Class[] parameterTypes):获得类的特定方法,name 参数指定方法的名字,parameterTypes参数指定方法的参数类型。
getConstrutors():获得类的public类型的构造方法。
getConstrutor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes参数指定构造方法的参数类型。
下面实例:- import java.lang.reflect.*;
-
- public class InvokeTester {
- public int add(int param1, int param2) {
- return param1 + param2;
- }
-
- public String echo(String msg) {
- return "echo:" + msg;
- }
-
- public static void main(String[] args) throws Exception {
- Class classType = InvokeTester.class;
- Object invokeTester = classType.newInstance();
- // 调用InvokeTester对象的add()方法
- Method addMethod = classType.getMethod("add", new Class[] { int.class,
- int.class });
- Object result = addMethod.invoke(invokeTester, new Object[] {
- new Integer(100), new Integer(200) });
- System.out.println((Integer) result);
- // 调用InvokeTester对象的echo()方法
- Method echoMethod = classType.getMethod("echo",
- new Class[] { String.class }); //获取类的方法
- result = echoMethod.invoke(invokeTester, new Object[] { "Hello" }); //调用类的方法
- System.out.println((String) result);
- }
复制代码
|
|