java创建对象的方式

总结

1、new

2、反射机制

3、clone机制,根据一个已有对象,克隆一个新对象。

4、序列化机制,先将一个对象序列化为二进制,再反序列化为java对象。

代码演示

下面的代码将会演示这四种创建对象的方式

我们要创建的的对象是一个Person类

java 复制代码
import java.io.Serializable;

public class Person implements Serializable, Cloneable {
    private static final long serialVersionUID = 1L;

    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

下面是main方法

java 复制代码
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        // 1) new
        Person p1 = new Person("Alice", 20);
        print("new", p1);

        // 2) reflection
        Person p2 = Person.class.getDeclaredConstructor().newInstance();
        p2.setName("Bob");
        p2.setAge(21);
        print("reflection", p2);

        // 3) clone
        Person p3 = (Person) p1.clone();
        p3.setName("Alice-Clone");
        print("clone", p3);

        // 4) serialization
        Person p4 = serializeAndDeserialize(p1);
        print("serialization", p4);
    }

    private static void print(String label, Person person) {
        System.out.println(label + ": " + person + ", identityHashCode=" + System.identityHashCode(person));
    }

    private static Person serializeAndDeserialize(Person original) throws Exception {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try (ObjectOutputStream out = new ObjectOutputStream(bos)) {
            out.writeObject(original);
        }

        byte[] data = bos.toByteArray();
        try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(data))) {
            return (Person) in.readObject();
        }
    }

}

输出

out 复制代码
new: Person{name='Alice', age=20}, identityHashCode=764977973
reflection: Person{name='Bob', age=21}, identityHashCode=189568618
clone: Person{name='Alice-Clone', age=20}, identityHashCode=793589513
serialization: Person{name='Alice', age=20}, identityHashCode=1190654826

面试

有四种方式,直接new对象,用反射机制动态创建对象,用clone机制复制一个新对象,用序列化机制的反序列化操作创建对象。

相关推荐
Bs_MoneyMagnet6 小时前
基于springboot+vue的茶铺管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
她说..6 小时前
RabbitMQ 使用场景详解
java·spring boot·后端·spring·rabbitmq·java-rabbitmq
宁渡AI大模型6 小时前
河南宁渡科技有限公司|宁渡课堂 AI 全栈面试分享,AI 应用开发高频考点汇总
java·c++·人工智能·python·深度学习·神经网络·rag
代码什么用6 小时前
JSON一文速通
java·json
Lyyaoo.6 小时前
【二分查找】【中等】搜索二维矩阵/排序数组的第一位和最后位置/搜索旋转排序数组/旋转排序数组中的最小值
java·数据结构·算法
土司大王6 小时前
LeetCode hot100——153.寻找旋转排序数组中的最小值:Java 二分模板与 O(log n) 分析
java·算法·leetcode
磐链科技7 小时前
交易所开发中的合规与安全:KYC、AML、冷热钱包设计要点
java·区块链
码农飞哥7 小时前
企业级RAG系统架构详解
java·人工智能·ai编程·rag·ai应用
Wang's Blog7 小时前
Java框架快速入门: Spring Security+OAuth2之搭建授权服务器(依赖与表结构)
java·服务器·spring
土司大王7 小时前
LeetCode hot100——4.寻找两个正序数组的中位数:Java 二分第K小 递归裁剪
java·算法·leetcode