Java创建对象的几种方法

发布时间 - 2026-01-10 21:52:13    点击率:

有时候,也可能碰到这样面试题,如:

Java创建对象有哪几种方法?

除了new之外,java创建对象还有哪几种方式?

本文结合例子,给出几种Java创建对象的方法,Here we go~~~~

使用new创建

这是最常用的一种。如:

Book book = new Book();

示例如下:

package test;

import java.io.Serializable;
import java.util.List;

/**
 * @author wangmengjun
 *
 */
public class Book implements Serializable{

  private static final long serialVersionUID = -6212470156629515269L;

  /**书名*/
  private String name;

  /**作者*/
  private List<String> authors;

  /**ISBN*/
  private String isbn;

  /**价格*/
  private float price;

  public Book() {
  }

  /**
   * @param name
   * @param authors
   * @param isbn
   * @param price
   */
  public Book(String name, List<String> authors, String isbn, float price) {
    this.name = name;
    this.authors = authors;
    this.isbn = isbn;
    this.price = price;
  }

  /**
   * @return the name
   */
  public String getName() {
    return name;
  }

  /**
   * @param name the name to set
   */
  public void setName(String name) {
    this.name = name;
  }

  /**
   * @return the authors
   */
  public List<String> getAuthors() {
    return authors;
  }

  /**
   * @param authors the authors to set
   */
  public void setAuthors(List<String> authors) {
    this.authors = authors;
  }

  /**
   * @return the isbn
   */
  public String getIsbn() {
    return isbn;
  }

  /**
   * @param isbn the isbn to set
   */
  public void setIsbn(String isbn) {
    this.isbn = isbn;
  }

  /**
   * @return the price
   */
  public float getPrice() {
    return price;
  }

  /**
   * @param price the price to set
   */
  public void setPrice(float price) {
    this.price = price;
  }

  /* (non-Javadoc)
   * @see java.lang.Object#toString()
   */
  @Override
  public String toString() {
    return "Book [name=" + name + ", authors=" + authors + ", isbn=" + isbn + ", price="
        + price + "]";
  }

}

    /**
     * 1. 使用new创建对象
     */
    Book book1 = new Book();
    book1.setName("Redis");
    book1.setAuthors(Arrays.asList("Eric", "John"));
    book1.setPrice(59.00f);
    book1.setIsbn("ABBBB-QQ677868686-HSDKHFKHKH-2324234");
    System.out.println(book1);

使用object.clone()

如果要调用clone方法,那么该object需要实现Cloneable接口,并重写clone()方法。

修改后的Book类如下:

package test;

import java.io.Serializable;
import java.util.List;

/**
 * @author wangmengjun
 *
 */
public class Book implements Serializable, Cloneable {

  private static final long serialVersionUID = -6212470156629515269L;

  /**书名*/
  private String name;

  /**作者*/
  private List<String> authors;

  /**ISBN*/
  private String isbn;

  /**价格*/
  private float price;

  public Book() {
  }

  /**
   * @param name
   * @param authors
   * @param isbn
   * @param price
   */
  public Book(String name, List<String> authors, String isbn, float price) {
    this.name = name;
    this.authors = authors;
    this.isbn = isbn;
    this.price = price;
  }

  /**
   * @return the name
   */
  public String getName() {
    return name;
  }

  /**
   * @param name the name to set
   */
  public void setName(String name) {
    this.name = name;
  }

  /**
   * @return the authors
   */
  public List<String> getAuthors() {
    return authors;
  }

  /**
   * @param authors the authors to set
   */
  public void setAuthors(List<String> authors) {
    this.authors = authors;
  }

  /**
   * @return the isbn
   */
  public String getIsbn() {
    return isbn;
  }

  /**
   * @param isbn the isbn to set
   */
  public void setIsbn(String isbn) {
    this.isbn = isbn;
  }

  /**
   * @return the price
   */
  public float getPrice() {
    return price;
  }

  /**
   * @param price the price to set
   */
  public void setPrice(float price) {
    this.price = price;
  }

  /* (non-Javadoc)
   * @see java.lang.Object#toString()
   */
  @Override
  public String toString() {
    return "Book [name=" + name + ", authors=" + authors + ", isbn=" + isbn + ", price="
        + price + "]";
  }

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

}

测试代码

    /**
     * 1. 使用new创建对象
     */
    Book book1 = new Book();
    book1.setName("Redis");
    book1.setAuthors(Arrays.asList("Eric", "John"));
    book1.setPrice(59.00f);
    book1.setIsbn("ABBBB-QQ677868686-HSDKHFKHKH-2324234");
    System.out.println(book1);

    /**
     * 2. 使用clone创建对象
     */
    try {
      Book book2 = (Book) book1.clone();
      System.out.println(book2);
    } catch (CloneNotSupportedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

使用Class.newInstance()

可以直接使用Class.forName("xxx.xx").newInstance()方法或者XXX.class.newInstance()完成。

    /**
     * 3. 使用Class.newInstance();
     */
    try {
      Book book3 = (Book) Class.forName("test.Book").newInstance();
      System.out.println(book3);

      book3 = Book.class.newInstance();
      System.out.println(book3);
    } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

使用Contructor.newInstance()

可以指定构造器来创建,如选择第一个构造器创建;也可以指定构造函数参数类型来创建。

    /**
     * 4. 使用Constructor.newInstance();
     */
    try {
      //选择第一个构造器创建Book
      Book book4 = (Book) Book.class.getConstructors()[0].newInstance();
      //Book [name=null, authors=null, isbn=null, price=0.0]
      System.out.println(book4);

      /**
       * 调用指定构造函数创建对象
       */
      book4 = (Book) Book.class.getConstructor(String.class, List.class, String.class,
          float.class).newInstance("New Instance Example", Arrays.asList("Wang", "Eric"),
          "abc1111111-def-33333", 60.00f);
      //Book [name=New Instance Example, authors=[Wang, Eric], isbn=abc1111111-def-33333, price=60.0]
      System.out.println(book4);
    } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
        | InvocationTargetException | SecurityException | NoSuchMethodException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

使用Class.newInstance()或者Contructor.newInstance(),其本质是一样的,都采用了反射机制。

使用反序列化

    /**
     * 5. 使用反序列化
     */
    try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("book.dat"));
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("book.dat"));) {
      oos.writeObject(book1);

      Book book5 = (Book) ois.readObject();
      System.out.println(book5);

    } catch (IOException | ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
 

当然了,除了上述几种方式之外,还可以使用JNI等方式来创建对象,这边就不一一列举了。

完整的示例代码如下:

Book.java

package test;

import java.io.Serializable;
import java.util.List;

/**
 * @author wangmengjun
 *
 */
public class Book implements Serializable, Cloneable {

  private static final long serialVersionUID = -6212470156629515269L;

  /**书名*/
  private String name;

  /**作者*/
  private List<String> authors;

  /**ISBN*/
  private String isbn;

  /**价格*/
  private float price;

  public Book() {
  }

  /**
   * @param name
   * @param authors
   * @param isbn
   * @param price
   */
  public Book(String name, List<String> authors, String isbn, float price) {
    this.name = name;
    this.authors = authors;
    this.isbn = isbn;
    this.price = price;
  }

  /**
   * @return the name
   */
  public String getName() {
    return name;
  }

  /**
   * @param name the name to set
   */
  public void setName(String name) {
    this.name = name;
  }

  /**
   * @return the authors
   */
  public List<String> getAuthors() {
    return authors;
  }

  /**
   * @param authors the authors to set
   */
  public void setAuthors(List<String> authors) {
    this.authors = authors;
  }

  /**
   * @return the isbn
   */
  public String getIsbn() {
    return isbn;
  }

  /**
   * @param isbn the isbn to set
   */
  public void setIsbn(String isbn) {
    this.isbn = isbn;
  }

  /**
   * @return the price
   */
  public float getPrice() {
    return price;
  }

  /**
   * @param price the price to set
   */
  public void setPrice(float price) {
    this.price = price;
  }

  /* (non-Javadoc)
   * @see java.lang.Object#toString()
   */
  @Override
  public String toString() {
    return "Book [name=" + name + ", authors=" + authors + ", isbn=" + isbn + ", price="
        + price + "]";
  }

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

}

CreateObjectExample.java

package test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List;

/**
 * @author wangmengjun
 *
 */
public class CreateObjectExample {

  public static void main(String[] args) {
    /**
     * 1. 使用new创建对象
     */
    Book book1 = new Book();
    book1.setName("Redis");
    book1.setAuthors(Arrays.asList("Eric", "John"));
    book1.setPrice(59.00f);
    book1.setIsbn("ABBBB-QQ677868686-HSDKHFKHKH-2324234");
    System.out.println(book1);

    /**
     * 2. 使用clone创建对象
     */
    try {
      Book book2 = (Book) book1.clone();
      System.out.println(book2);
    } catch (CloneNotSupportedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }


    /**
     * 3. 使用Class.newInstance();
     */
    try {
      Book book3 = (Book) Class.forName("test.Book").newInstance();
      System.out.println(book3);

      book3 = Book.class.newInstance();
      System.out.println(book3);
    } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    /**
     * 4. 使用Constructor.newInstance();
     */
    try {
      //选择第一个构造器创建Book
      Book book4 = (Book) Book.class.getConstructors()[0].newInstance();
      //Book [name=null, authors=null, isbn=null, price=0.0]
      System.out.println(book4);

      /**
       * 调用指定构造函数创建对象
       */
      book4 = (Book) Book.class.getConstructor(String.class, List.class, String.class,
          float.class).newInstance("New Instance Example", Arrays.asList("Wang", "Eric"),
          "abc1111111-def-33333", 60.00f);
      //Book [name=New Instance Example, authors=[Wang, Eric], isbn=abc1111111-def-33333, price=60.0]
      System.out.println(book4);
    } catch (InstantiationException | IllegalAccessException | IllegalArgumentException
        | InvocationTargetException | SecurityException | NoSuchMethodException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    /**
     * 5. 使用反序列化
     */
    try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("book.dat"));
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("book.dat"));) {
      oos.writeObject(book1);

      Book book5 = (Book) ois.readObject();
      System.out.println(book5);

    } catch (IOException | ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Java创建对象  # Java创建对象方法  # Java中创建对象的6种方式  # java教学笔记之对象的创建与销毁  # Java中五种不同方法的创建对象  # Java中创建对象的5种方式总结  # Java创建对象的六种常用方式总结  # 第一个  # 几种  # 序列化  # 这是  # 还可以  # 采用了  # 可以直接  # 重写  # 最常用  # 大家多多  # 不一一  # 几种方法  # 面试题  # 其本质  # 是一样的  # 当然了  # price  # set  # void  # return 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速上传自定义模板至建站之星?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  如何确认建站备案号应放置的具体位置?  教你用AI将一段旋律扩展成一首完整的曲子  如何实现建站之星域名转发设置?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  高端云建站费用究竟需要多少预算?  如何在腾讯云服务器快速搭建个人网站?  Laravel如何保护应用免受CSRF攻击?(原理和示例)  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  EditPlus中的正则表达式实战(6)  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  微信小程序 scroll-view组件实现列表页实例代码  Laravel如何使用withoutEvents方法临时禁用模型事件  如何在香港免费服务器上快速搭建网站?  香港服务器租用费用高吗?如何避免常见误区?  微信公众帐号开发教程之图文消息全攻略  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  android nfc常用标签读取总结  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  如何用景安虚拟主机手机版绑定域名建站?  高端建站如何打造兼具美学与转化的品牌官网?  C#如何调用原生C++ COM对象详解  Java解压缩zip - 解压缩多个文件或文件夹实例  EditPlus中的正则表达式 实战(2)  EditPlus中的正则表达式 实战(1)  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  JavaScript如何操作视频_媒体API怎么控制播放  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何用虚拟主机快速搭建网站?详细步骤解析  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel如何实现用户注册和登录?(Auth脚手架指南)  如何将凡科建站内容保存为本地文件?  Laravel如何处理异常和错误?(Handler示例)  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel如何实现用户密码重置功能?(完整流程代码)  再谈Python中的字符串与字符编码(推荐)  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比