通过反射调用成员变量
获取 Class 类中的字段(更多请查看JDK文档,关键字:Class)
- Field getField(String name) 返回类中某个 公共字段
- Field[] getFields() 返回类中 所有公共字段 [ ]
- Field getDeclaredField(String name) 返回类中 任意某个字段
- Field[] getDeclaredFields() 返回类中 所有字段 [ ]
Student类、class.properties文件代码看这:反射创建实例对象 - 鹿先森JIAN - 博客园 (cnblogs.com)
import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.Properties; public class Test { public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { Properties properties = new Properties(); FileInputStream fis = new FileInputStream("day14\\class.properties"); properties.load(fis); //2.从集合中,把className的信息获取到 String className = properties.getProperty("className"); // 类路径名 //3.反射根据类的全路径(包名 + 类名),将当前的类加载进内存,形参Class类对象 Class<?> c = Class.forName(className); System.out.println("getField(String name) 返回类中某个 公共字段---------------"); Field tel = c.getField("tel"); // 比如获取字段 tel System.out.println(tel); System.out.println("getDeclaredField(String name) 返回类中 任意某个字段------------"); Field name = c.getDeclaredField("name"); System.out.println(name); System.out.println("getFields() 返回类中 所有公共字段[]------------"); Field[] fields = c.getFields(); for (Field field : fields) { System.out.println(field); } System.out.println("getDeclaredFields() 返回类中 所有字段[]-------------"); Field[] declaredFields = c.getDeclaredFields(); for (Field declaredField : declaredFields) { System.out.println(declaredField); } // 读取配置文件的做法 String fieldName = properties.getProperty("fieldName"); // (字段名) String fieldValue = properties.getProperty("fieldValue"); // (字段名对应的值) Field fName = c.getDeclaredField(fieldName); fName.setAccessible(true); Constructor<?> constructor = c.getConstructor(); Object o = constructor.newInstance(); // 创建对象,默认调用该类的无参构造方法 fName.set(o,fieldValue); // 赋值 Object fValue = fName.get(o); // 取值 System.out.println(fValue); } }