Java反射
定义
原理
java中反射的常规使用
package com.masily.utils;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.stream.Stream;
public class ReflectLearn {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException, ClassNotFoundException {
User user = new User();
Class<User> userClass = User.class;
Constructor<User> userConstructor = userClass.getConstructor();
Object user1 = userConstructor.newInstance();
Method getAgeMethod = userClass.getMethod("getAge");
Object a = getAgeMethod.invoke(user1);
System.out.println(a);
Class<User> userClass1 = (Class<User>) Class.forName("com.masily.utils.User");
Constructor<User> userConstructor1 = userClass1.getConstructor();
Constructor<User> userConstructor2 = userClass1.getConstructor(String.class, int.class, String.class);
User user2 = userConstructor1.newInstance();
User user3 = userConstructor2.newInstance("123", 4, "567");
Method setAgeMethod2 = userClass1.getMethod("setAge", int.class);
Method setAgeMethod3 = userClass1.getMethod("setAge", int.class);
setAgeMethod2.invoke(user2, 6);
setAgeMethod3.invoke(user3, 5);
Method getAgeMethod2 = userClass1.getMethod("getAge");
Object b = getAgeMethod2.invoke(user2);
Object c = getAgeMethod2.invoke(user3);
System.out.printf("b的值%d\n", b);
System.out.printf("c的值%d\n", c);
Field[] fields1 = userClass.getFields();
Stream.of(fields1).forEach(field -> System.out.println(field.getName()));
Field[] fields2 = userClass.getDeclaredFields();
Stream.of(fields2).forEach(field -> System.out.println(field.getName()));
}
}