随笔 - 832  文章 - 2  评论 - 31  阅读 - 167万

5种创建Java对象的方式

在本篇文章中,将介绍5种创建Java对象的方式。

1. 使用new关键字

复制代码
package com.idea.test;
public class Student {
    
    private String userName;
    private String nickName;

    public Student(String userName, String nickName) {
        this.userName = userName;
        this.nickName = nickName;
    }
public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        
        this.userName = userName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    @Override
    public String toString() {
        return "Student{" +
                "userName='" + userName + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }
}
复制代码
public class TestNewStudent{
    public static void main(String[] args){
        Student zhangsan = new Student("Zhangsan","张三");
        Student lisi = new Student();
        lisi.setName("Lisi");
        lisi.setNickname("李四");
    }}

2. 使用Class类的newInstance()方法

​ 首先,我们可以通过Class.forName()方法动态加载目标类,然后再调用newInstance()方法,动态实例化对象。

复制代码
package com.idea.test;


public class Student {

    private String userName;
    private String nickName;

    public Student(String userName, String nickName) {
        this.userName = userName;
        this.nickName = nickName;
    }

    public Student() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {

        this.userName = userName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    @Override
    public String toString() {
        return "Student{" +
                "userName='" + userName + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }
}
复制代码
复制代码
    try {
            Class clz=Class.forName("com.idea.test.Student");
            Student student1=(Student)clz.newInstance();
            student1.setUserName("庞翔");
            student1.setNickName("大个");
            System.out.println("Class 的newInstance方法创建对象"+student1);
        } catch (Exception e) {
            e.printStackTrace();
        }
复制代码

3. 使用Constructor.newInstance()方法

​ 与Class类的newInstance()方法相似,我们还可以使用java.lang.reflect.Constructor类的newInstance()方法来创建新的对象。

复制代码
package com.idea.test;


public class Student {

    private String userName;
    private String nickName;

    public Student(String userName, String nickName) {
        this.userName = userName;
        this.nickName = nickName;
    }

    public Student() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {

        this.userName = userName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    @Override
    public String toString() {
        return "Student{" +
                "userName='" + userName + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }
}
复制代码
复制代码
Constructor<Student> constructorStudent;
        try{
            constructorStudent=Student.class.getConstructor();
            Student student2=constructorStudent.newInstance();
            student2.setUserName("傻逼");
            System.out.println("Contructor newInstance()创建对象"+student2);
        }catch (Exception e){
            e.printStackTrace();
        }
复制代码

4. 使用反序列化

​ 如果要使用反序列化创建对象,则目标类首先要实现Serializable接口。在本次示例中,我们先创建一个Student对象,并将其保存到data.txt文件中,然后在通过反序列化操作,读取data.txt中的数据,并创建新的对象。

复制代码
package com.idea.test;


import java.io.Serializable;

public class Student implements Serializable {

    private static final long serialVersionUID = 7497761277861642186L;
    private String userName;
    private String nickName;

    public Student(String userName, String nickName) {
        this.userName = userName;
        this.nickName = nickName;
    }

    public Student() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {

        this.userName = userName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    @Override
    public String toString() {
        return "Student{" +
                "userName='" + userName + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }
}
复制代码
复制代码
String filePath="D:\\data.txt";
         Student stu=new Student("序列化","反序列化");
        FileOutputStream fileOutputStream=null;
        try{
          fileOutputStream=new FileOutputStream(filePath);
            ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream);
            objectOutputStream.writeObject(stu);
            objectOutputStream.flush();
            objectOutputStream.close();
            FileInputStream fileInputStream=new FileInputStream(filePath);
            ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream);
            Student stu1=(Student) objectInputStream.readObject();
            System.out.println("通过反序列化创建对象"+stu1);

        }catch(Exception e){

        }
复制代码

5. 使用对象克隆创建新的对象

​ clone()方法可以创建现有对象的副本,但在使用clone()方法前,需保证模板类实现了Cloneable接口,Cloneable接口也是一个标记类接口。

posted on   小破孩楼主  阅读(210)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示