通过反射调用成员变量
获取 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); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库