反射机制可在运行时获取类信息并创建对象、调用方法,通过Class.forName获取Class对象,利用Constructor实例化对象,使用Method调用方法,支持私有成员访问但存在性能与安全风险。

在Java中,反射机制允许程序在运行时获取类的信息并操作类的属性和方法。通过反射,可以在不直接使用new关键字的情况下创建对象,并调用其方法。这对于框架开发、配置化设计等场景非常有用。
要通过反射创建对象,首先需要获取类的Class对象,然后调用其newInstance()方法(已过时)或使用Constructor类来实例化对象。
示例:
// 获取Class对象
Class<?> clazz = Class.forName("com.example.MyClass");
// 方式一:使用newInstance()(适用于无参构造函数)
Object obj = clazz.newInstance();
// 方式二:使用Constructor(推荐,更灵活)
Constructor<?> constructor = clazz.getConstructor(); // 获取无参构造
Object obj2 = constructor.newInstance();
如果类的构造函数有参数,可以通过getConstructor(Class...)指定参数类型。
立即学习“Java免费学习笔记(深入)”;
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object obj = constructor.newInstance("张三", 25);
获取Class对象后,可以通过getMethod()获取公共方法,然后使用invoke()方法调用。
步骤:
// 获取方法(例如:public void setName(String name))
Method method = clazz.getMethod("setName", String.class);
// 调用方法
method.invoke(obj, "李四");
// 调用有返回值的方法
Method getMethod = clazz.getMethod("getName");
String name = (String) getMethod.invoke(obj);
System.out.println(name);
对于私有方法,使用getDeclaredMethod()并调用setAccessible(true)绕过访问控制。
Method privateMethod = clazz.getDeclaredMethod("privateMethod");
privateMethod.setAccessible(true);
privateMethod.invoke(obj);
反射虽然强大,但也有性能开销和安全限制:
以上就是Java语法基础中反射如何创建对象和调用方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号