欢迎光临
我们一直在努力

同样是创建对象,new和反射到底差在哪?

1. 执行时间完全不同

使用 new 创建对象,是编译期间就确定好类。
写代码的时候编译器就已经识别你要 new 的是哪一个类,程序运行时直接创建对象,属于静态创建。

使用反射创建对象,编译期间完全不知道是什么类。
编译阶段只识别通用的 Class 类型,完全不锁定具体类,只有程序运行起来以后,根据字符串类名动态加载类、创建对象,属于动态创建。

2. 写法与类名绑定方式不同

new 创建对象,类名必须写死在代码里。
程序一旦写完,你 new 的类就固定不能变,不能根据需求切换不同类。

反射创建对象,类是以字符串形式传入。
字符串可以来自配置文件、用户输入、参数传递,运行时随时可以换类,不需要修改源码,扩展性极强。

3. 访问权限能力不同

new 创建对象严格遵守访问权限规则。
只能调用 public 的构造方法、成员变量、成员方法,无法访问私有内容,安全性高,完全符合封装原则。

反射可以突破权限修饰符限制。
运行时可以强行获取、调用 private 私有构造、私有属性、私有方法,破坏封装特性,功能强大但不安全。

4. 性能效率差异

new 的执行速度非常快。
编译期间已经完成类检查、语法绑定,运行阶段直接创建对象,没有额外解析步骤。

反射速度慢很多。
运行时需要动态读取字节码、解析类结构、遍历构造方法、生成对象,存在大量额外操作,开销大、效率低。

5. 使用场景完全不同

new 适合所有普通业务开发。
只要你在写代码时明确知道自己要创建哪个类,全部使用 new,简单、高效、安全。

反射适合框架底层、动态开发场景。
Spring、Mybatis、Tomcat 全部大量使用反射,用来实现不修改代码就能自动创建对象、自动注入资源、动态执行方法。

6. 代码灵活性区别

new 是固定硬编码。
类写死,对象固定,无法动态切换不同实现类。

反射是动态可配置。
同一个代码逻辑,可以根据不同配置自动创建不同类的对象,实现解耦、高扩展。

终极总结(考试必背一句话)

new 是编译期静态创建对象,速度快、安全、写法固定、无法动态切换类;
反射是运行期动态创建对象,速度慢、可突破权限、支持动态加载类,是所有 Java 框架底层核心原理。

赞(0)
未经允许不得转载:171主机测评 » 同样是创建对象,new和反射到底差在哪?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址