Java反射机制:Class、Method等常用类的使用方法和示例
Java反射机制是一种能够动态获取类的信息和调用对象方法的机制。它能够实现在运行时获取类的名称、构造方法、字段、方法等相关信息,并且能够动态创建对象、调用方法、获取和设置属性等操作。
Java反射机制的主要类包括Class类、Constructor类、Field类、Method类、Array类等。在本文中,将介绍其中的Class类和Method类,并给出使用方法和示例。
一、Class类
Class类是Java反射机制的核心所在,它代表了一个类或者一个接口的信息,可以获取这个类或者接口的属性和方法,并且可以动态创建对象。
1. 获取Class对象
获取Class对象的方法有多种,以下是常见的两种方法。
(1)使用类的.class属性获取Class对象
Class clazz = Person.class;
(2)使用Class.forName(String className)方法获取Class对象
Class clazz = Class.forName("com.example.Person");
2. 动态创建对象
通过Class.newInstance()方法可以实例化一个类的对象。
Person person = (Person) clazz.newInstance();
3. 获取属性信息
(1)获取类的属性
Field[] fields = clazz.getFields();//获取所有public属性
Field[] fields = clazz.getDeclaredFields();//获取所有属性
(2)获取属性名、类型、修饰符、值等信息
for (Field f : fields) {
String name = f.getName();//属性名
Class type = f.getType();//属性类型
int modifiers = f.getModifiers();//属性修饰符
Object value = f.get(person);//获取属性值
}
4. 获取方法信息
(1)获取类的方法
Method[] methods = clazz.getMethods();//获取所有public方法
Method[] methods = clazz.getDeclaredMethods();//获取所有方法
(2)获取方法名、返回类型、参数类型、修饰符、异常信息等信息
for (Method m : methods) {
String name = m.getName();//方法名
Class returnType = m.getReturnType();//返回类型
Class[] parameterTypes = m.getParameterTypes();//参数类型
int modifiers = m.getModifiers();//方法修饰符
Class[] exceptionTypes = m.getExceptionTypes();//抛出的异常信息
}
5. 修改属性值
Field field = clazz.getDeclaredField("name");
field.setAccessible(true);//取消访问权限检查
field.set(person, "zhangsan");//修改属性值
二、Method类
Method类是Java反射机制中表示类和接口中的方法的类,它包含了一个方法的信息和方法的具体实现。它可以调用类和实例方法,获取方法的参数类型、返回类型等信息。
1. 获取Method对象
(1)通过Class对象获取
Method method = clazz.getMethod("methodName", argType);
(2)通过类的名称获取
Method method = Class.forName("com.example.Person").getMethod("methodName", argType);
其中,methodName是方法名,argType是方法的参数类型。
2. 调用方法
(1)调用静态方法
method.invoke(null, args);
其中,args是参数数组。
(2)调用实例方法
method.invoke(person, args);
其中,person是一个实例对象。
3. 获取方法的返回值和参数类型
Class returnType = method.getReturnType();//返回类型
Class[] parameterTypes = method.getParameterTypes();//参数类型
4. 其他常用方法
(1)获取方法的访问修饰符
int modifiers = method.getModifiers();
(2)获取方法的异常类型
Class[] exceptionTypes = method.getExceptionTypes();
以上是Java反射机制中Class类和Method类的常用方法和示例。利用Java反射机制,可以实现很多动态的操作,比如动态创建对象和调用对象方法等。但是反射机制的执行效率较低,因此在真正需要动态获取信息或者调用方法的情况下才应该使用反射机制。
