java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java创建对象

Java创建对象的常见方式技术指南

作者:拾荒的小海螺

在 Java 开发中,对象是一切面向对象编程的基础,Java 提供了多种方式来创建对象,不同方式背后有不同的应用场景与运行机制,下面哦我们就来深入了解下吧

1、简述

在 Java 开发中,“对象”是一切面向对象编程的基础。Java 提供了多种方式来创建对象,不同方式背后有不同的应用场景与运行机制。理解这些方法,对于提升系统性能、掌握底层机制都有重要价值。

2、创建对象

2.1 使用 new 关键字(最常见)

示例代码:

public class User {
    String name;
}

​​​​​​​User user = new User();

说明:

2.2 使用反射 Class.newInstance()(不推荐)

示例代码:

Class<?> clazz = Class.forName("com.example.User");
User user = (User) clazz.newInstance();

注意事项:

2.3 使用反射 Constructor.newInstance()(推荐反射方式)

示例代码:

Constructor<User> constructor = User.class.getDeclaredConstructor();
constructor.setAccessible(true);
User user = constructor.newInstance();

特点:

2.4 使用 clone() 方法(浅拷贝)

示例代码:

public class User implements Cloneable {
    String name;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
// 使用
User user1 = new User();
user1.name = "Tom";
User user2 = (User) user1.clone();

特点:

2.5 使用反序列化(从字节流创建)

示例代码:

// 序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("user.ser"));
out.writeObject(user);

// 反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream("user.ser"));
User user2 = (User) in.readObject();

特点:

2.6 使用对象工厂(工厂模式)

示例代码:

public class UserFactory {
    public static User createUser(String name) {
        User user = new User();
        user.name = name;
        return user;
    }
}

特点:

2.7 使用第三方库:如 CGLIB、Objenesis

CGLIB 动态代理创建对象(无构造函数调用)

Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(User.class);
enhancer.setCallback(new NoOp() {});
User proxyUser = (User) enhancer.create();

Objenesis

Objenesis objenesis = new ObjenesisStd();
User user = objenesis.newInstance(User.class);

特点:

2.8 总结对比

方式是否调用构造函数是否常用应用场景
new✅ 是✅ 常用普通对象创建
Class.newInstance()✅ 是❌ 已过时框架反射,旧代码中偶见
Constructor.newInstance()✅ 是✅ 推荐Spring、框架依赖注入
clone()❌ 否(复制)⚠️ 慎用对象拷贝、实现原型模式
反序列化❌ 否⚠️ 慎用网络传输、缓存恢复
工厂方法✅ 是✅ 常用面向接口编程、统一对象创建入口
Objenesis / CGLIB❌ 否❌ 框架级Spring、Mock 框架底层、ORM 动态代理

实践建议

日常开发:首选 new 或工厂方法,代码清晰,易维护。

框架开发:选择反射 Constructor.newInstance() 或 Objenesis。

对象复制:优先考虑手动复制或使用库如 Apache Commons Lang 的 SerializationUtils,避免使用 clone()。

性能敏感:避免使用反序列化方式,风险高、开销大。

3、结语

Java 提供了多种方式创建对象,不同方式各有适用场景。掌握它们不仅有助于写出更灵活的代码,也有助于深入理解如 Spring、MyBatis、Dubbo 等优秀框架的实现原理。推荐大家多动手实践,如自己实现一个对象工厂,或基于反射构建简单容器,进一步巩固理解。

如果你想,我可以继续提供以下内容:

到此这篇关于Java创建对象的常见方式技术指南的文章就介绍到这了,更多相关Java创建对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文