java反射的详细使用方式
1.获取Class类的方式
User user = new User();
Class clazz = user.getClass();
Class clazz = User.class;
Class clazz = Class.forName("com.zsq.demo.User");
2.通过Class类进行构造方法操作
2.1.通过Class类获取构造方法
Constructor[] constructors = clazz.getConstructors();
Constructor[] constructors = clazz.getDeclaredConstructors();
Constructor constructor = clazz.getConstructor(long.class, String.class);
Constructor constructor = clazz.getDeclaredConstructor(long.class, String.class);
3.2.通过方法获取实例对象
User user = clazz.newInstance();
User user = constructor.newInstance();
3.通过Class获取属性和对属性进行操作
3.1.通过Class获取属性
Field[] fields = clazz.getFields();
Field[] fields = clazz.getDeclaredFields();
Field field = clazz.getField("userName");
Field field = clazz.getDeclaredField("userName");
3.2.获取属性的基本信息(修饰符、类型、字段名等等)
int modifiersIndex = field.getModifiers();
String modifiers = Modifier.toString(modifiersIndex);
Class<?> type = field.getType();
String typeName = type.getName();
String fieldName = field.getName();
Annotation[] annotations = field.getAnnotations();
ApiModel annotation = field.getAnnotation(ApiModel.class);
3.3.给属性赋值
Class clazz = Class.forName("com.zsq.demo.User");
User user = clazz.newInstance();
Field field = clazz.getField("userName");
field.setAccessible(true);
field.set(user,"张三");
4.通过Class进行方法操作
4.1.通过Class获取方法
Method[] methods = clazz.getMethods();
Method[] methods = clazz.getDeclaredMethods();
Method method = clazz.getMethod("getUserName");
Method method = clazz.getMethod("setUserName",String.class);
Method method = clazz.getDeclaredMethod("getUserName");
Method method = clazz.getDeclaredMethod("setUserName",String.class);
4.2.获取方法的基本信息(修饰符、返回值、方法名、参数列表等等)
int modifiersIndex = method.getModifiers();
String modifiers = Modifier.toString(modifiersIndex);
Class returnType = method.getReturnType();
String typeName = returnType.getName();
String methodName = method.getName();
Class[] parameterTypes = method.getParameterTypes();
Annotation[] annotations = method.getAnnotations();
Data annotation = method.getAnnotation(Data.class);
Class[] exceptionTypes = method.getExceptionTypes();
4.3.调用实例对象的方法
Class clazz = Class.forName("com.zsq.demo.User");
User user = clazz.newInstance();
Method method1 = clazz.getDeclaredMethod("getUserName");
Method method2 = clazz.getDeclaredMethod("setUserName",String.class);
method1.invoke(user);
method2.invoke(user,"张三");
5.通过Class获取类的基本信息
Class superclass = clazz.getSuperclass();
Class[] interfaces = clazz.getInterfaces();
Package aPackage = clazz.getPackage();
String name = aPackage.getName();