<java反射机制>

Posted by <夏天s> on 2021-12-02

Java 反射机制

(一)java反射的定义

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道和获取这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和获取任意一个属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

即通过反射机制可以动态的进行对类分割,将类中例如方法 变量名映射到对象中。

(二)java 反射核心类

Class

获取class对象的三种方式(假设有一个类User且有一个user实例对象)

1
2
3
4
5
6
7
//通过类的静态方法.class
class = User.class;
//通过对象.getClass方法
class = user.getClass();
//通过类的全路径名
String className = "com.hocztms.entity.User";
class = Class.forName(className);

通过获取的这个类Class就能够获取到类中方法,变量的对象;

方法类 Method

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//获取所有公有的方法
Method[] methods = clazz.getMethods();
//获取全部方法,包括私有和不私有
methods = clazz.getDeclaredMethods();
//获取方法名获取方法
Method method = object.getClass().getMethod(methodName, parameterTypes);


//通过method对象获取相应的属性
//获取并输出方法的访问权限(Modifiers:修饰符)
int modifiers = method.getModifiers();
//Modifier类
System.out.print(Modifier.toString(modifiers));
//获取并输出方法的返回值类型
Class returnType = method.getReturnType();
//获取并输出方法的所有参数
Parameter[] parameters = method.getParameters();
//获取并输出方法抛出的异常
Class[] exceptionTypes = method.getExceptionTypes();

//相应的信息都可以获取到,这里不全作为例子

//相应的调用method的invoke方法就可以动态调用类的实例对象的属性
attribute = method.invoke(object, null).toString();

字段 Field

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//获取公有字段
Field[] fields = class.getFields();
//获取私有字段
fields = stuClass.getDeclaredFields();
//通过字段名获取字段
Field field = class.getField(fieldName);

//通过字段名可以获取以下信息
//获取访问权限并输出
int modifiers = field.getModifiers();
//Modifier类
System.out.print(Modifier.toString(modifiers));
//变量类型 也可以通过field.getType获取泛型
String fieldType = field.getType().getName();
//变量名
String fieldName = field.getName();

总结

通过反射可以在java程序运行时动态的获取任意类的任意成员变量以及任意方法。

通过java 的反射机制就能够做非常多的事情,结合一定的规则以及利用java的泛型就能够实现,例如统一数据库存储接口,List任意属性排序方法。。。。

理解java反射机制可以做到非常多事情。。。