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

在Java中,反射机制允许程序在运行时获取类的信息并操作类的属性和方法。通过反射,可以在不直接使用new关键字的情况下创建对象,并调用其方法。这对于框架开发、配置化设计等场景非常有用。
1. 使用反射创建对象
要通过反射创建对象,首先需要获取类的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免费学习笔记(深入)”;
听脑AI
听脑AI语音,一款专注于音视频内容的工作学习助手,为用户提供便捷的音视频内容记录、整理与分析功能。
745 查看详情
Constructor constructor = clazz.getConstructor(String.class, int.class);Object obj = constructor.newInstance("张三", 25);
2. 使用反射调用方法
获取Class对象后,可以通过getMethod()获取公共方法,然后使用invoke()方法调用。
步骤:
获取Method对象,需指定方法名和参数类型 调用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);
3. 注意事项
反射虽然强大,但也有性能开销和安全限制:
破坏封装性,可能引发安全问题 性能低于直接调用,频繁使用需谨慎 编译期无法检查错误,容易出现NoSuchMethodException等异常基本上就这些。掌握反射的核心是理解Class、Constructor、Method这三个类的使用。
以上就是Java语法基础中反射如何创建对象和调用方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/736084.html
微信扫一扫
支付宝扫一扫