-
获取Class对象:首先,你需要获取表示要操作的类的
Class
对象。可以使用以下三种方式之一来获取Class
对象:Class.forName()
方法:使用类的全限定名获取Class
对象,例如:Class<?
Class<?> clazz = MyClass.class;
> clazz = Class.forName("com.example.MyClass");
.class
语法:如果你已经有了类的实例,可以使用.class
语法来获取Class
对象,例如:Class<?> clazz = MyClass.class;
getClass()
方法:如果你已经有了类的实例,还可以使用getClass()
方法获取Class
对象,例如:Class<?> clazz = myObject.getClass();
-
获取类的构造方法、方法或字段:一旦你有了
Class
对象,就可以使用它来获取类的构造方法、方法或字段。- 获取构造方法:使用
getConstructor()
或getDeclaredConstructor()
方法,例如:Constructor<?> constructor = clazz.getConstructor(paramTypes);
- 获取方法:使用
getMethod()
或getDeclaredMethod()
方法,例如:Method method = clazz.getMethod("methodName", paramTypes);
- 获取字段:使用
getField()
或getDeclaredField()
方法,例如:Field field = clazz.getField("fieldName");
- 获取构造方法:使用
-
调用方法或访问字段:一旦你有了方法或字段的引用,就可以使用它们来调用方法或访问字段。
- 调用方法:使用
invoke()
方法,例如:Object result = method.invoke(object, args);
- 访问字段:使用
get()
和set()
方法,例如:Object value = field.get(object);
或field.set(object, value);
- 调用方法:使用
需要注意的是,反射涉及到对类的访问和操作
- 获取类的
Class
对象:Class<?> clazz = MyClass.class;
- 获取类的构造方法并实例化对象:
Constructor<?> constructor = clazz.getConstructor(); Object object = constructor.newInstance();
- 获取方法并调用:
Method method = clazz.getMethod("methodName", parameterTypes); Object result = method.invoke(object, arguments);
- 获取字段并访问:
Field field = clazz.getField("fieldName"); Object value = field.get(object); field.set(object, newValue);
我们平时的get,set方法的调用也是反射的使用之一,我认为反射就是来调用别的类的方法的手段,是Java常用基础方法之一