说明

Java有5种方式来创建对象:

  • 使用 new 关键字(最常用):

        ObjectName obj = new ObjectName();

  • 使用反射的Class类的newInstance()方法:

        ObjectName obj = ObjectName.class.newInstance();

  • 使用反射的Constructor类的newInstance()方法:

        ObjectName obj = ObjectName.class.getConstructor.newInstance();

  • 使用对象克隆clone()方法:

ObjectName obj = obj.clone();

  • 使用反序列化(ObjectInputStream)的readObject()方法:

try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {

ObjectName obj = ois.readObject();

}

示例

创建类

package object;import java.io.Serializable;
import java.util.Objects;public class Employee implements Serializable, Cloneable {private static final long serializableUID = 1L;private String name;public Employee() {System.out.println("Employee Constructor Called...");}public String getName() { return name; }public void setName(String name) { this.name = name; }@Overridepublic Employee clone() {Employee clone = null;try {clone = (Employee) super.clone();} catch (CloneNotSupportedException e) {}return clone;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Employee employee = (Employee) o;return Objects.equals(name, employee.name);}@Overridepublic int hashCode() { return Objects.hash(name); }@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +'}';}
}

创建类对象

package object;import java.io.*;
import java.lang.reflect.Constructor;public class ObjectCreate {private static final String FILE_NAME = "employee.obj";public static void main(String[] args) throws Exception {// 使用 new关键字 创建对象Employee employee = new Employee();employee.setName("张三");// 使用 Class类的 newInstance()方法// Employee employee2 = (Employee) Class.forName("Employee").newInstance();Employee employee2 = Employee.class.newInstance();employee2.setName("xxx2");System.out.println("Class类的newInstance()方法:" + employee2);// 使用 Constructor类的newInstance()方法Employee employee3 = Employee.class.getConstructor().newInstance();employee3.setName("xxx3");System.out.println("Constructor类的newInstance()方法:" + employee3);// 使用 clone()方法:类必须实现Cloneable接口,并重写其clone()方法Employee employee4 = (Employee) employee.clone();// employee4.setName("xxx4");System.out.println("对象clone()方法:" + employee4);// 使用 反序列化ObjectInputStream 的readObject()方法:类必须实现 Serializable接口// 序列化try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) {oos.writeObject(employee);}// 反序列化try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {Employee employee5 = (Employee) ois.readObject();System.out.println("反序列化:" + employee5);}}
}

Java创建对象的5种方式相关推荐

  1. java创建对象的五种方式

    java创建对象的五种方式 一.使用new关键字 二.使用clone方法 三.使用反序列化 四.使用反射 五.使用Unsafe 一.使用new关键字 如 User user=new User(); 执 ...

  2. Java 创建对象的 6 种方式,总有一种适合你

    创建对象的 6 种方式 假设有个女朋友类: @Data @NoArgsConstructor @AllArgsConstructor class GirlFriend {private String ...

  3. java创建对象的几种方式

    前言,今日面试被问到创建对象是否一定要通过构造器,当时回答错误,查询分析后记录. 创建对象的几种方式: 第一种,也是最常用.一直接触到的方法:通过new 创建对象.这种方法需要用到构造器   Demo ...

  4. Java创建对象的四种方式

    1. new 2. clone 3. 通过反射newInstance 4. 反序列化 5. String s = "abc"(这个是比较特殊的) 以String类为例 String ...

  5. Java创建对象的4种方式

    使用new关键字 通过new关键字直接在堆内存上创建对象,这样很方便的调用对象的有参和无参的构造函数. Student stu1 = new Student("lihua"); C ...

  6. 盘点一下 Java创建对象的几种方式(7大种)全面版

    1.new 关键字 ① 最常见的方式就是直接 new 加构造器的方式创建 ② 变形一:XXX(类名). 静态方法,本质这种方式还去调用类中构造器,比如说:单例模式.日历类(Calendar) 和一些工 ...

  7. java中 object创建对象_java创建对象的几种方式

    本文收集整理关于java创建对象的几种方式的相关议题,使用内容导航快速到达. 内容导航: Q1:[八喜小子]java中创建对象的方式有哪些? 创建对象那就是应该为object 类型的值吧 那是一个引用 ...

  8. 什么是创建对象java_java创建对象的几种方式分别是什么

    java创建对象有五种方式,分别是: 1.使用new关键字 这是最常见也是最简单的创建对象的方式.通过这种方式,我们可以调用任意的构造函数(无参的和带参数的).Employee emp1 = new ...

  9. 12月18日云栖精选夜读 | Java 中创建对象的 5 种方式!...

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

最新文章

  1. iOS-UIViewController视图控制器跳转界面的几种常用方法
  2. php怎么读取上传文件的md5,PHP获取上传文件的md5码_PHP教程
  3. Ajax — 第六天
  4. python之元组操作
  5. cad二次开发加载cad自动调用_python实例_cad半自动绘图
  6. js 从一个json拼接成另一个json,并做json数据分页table展示
  7. 左耳朵耗子:云原生时代的开发者应具备这5大能力
  8. VBScript编程教程 [下]
  9. VSCode创建Vue项目完整教程
  10. wps小技巧,wps删除空白页怎么删?
  11. 单片机延时C语言程序
  12. 苹果手机输入汉字显示拼音和汉字问题
  13. OverTheWire——Bandit
  14. 如何设计一个结构合理的java项目
  15. ubuntu和windos 局域网NTP配置时间同步设置方法
  16. free导致的内存踩踏例子
  17. 听见丨美国大型连锁创客空间TechShop破产 首汽约车获7亿元B+轮融资 百度和蔚来汽车等领投
  18. 卡巴斯基 取消 远程控制 限制
  19. webrtc】windows 构建 :depot_tools 采坑
  20. java 黄金分割率_黄金分割率使您的网页设计更有效

热门文章

  1. zabbix设置中文字体
  2. 如何租用云GPU跑深度学习?AutoDL、恒源云极简高效使用教程
  3. 【数据库】PL/SQL向Oracle数据库中粘贴数据
  4. JS 字符串常用方法总结
  5. fgo服务器维护补偿,fgo国服4月12日版本版本更新公告 维护18个小时 补偿18个圣晶石...
  6. 大阪第76天——大阪街头暴走(遭遇性骚扰)
  7. 机器学习One-Hot编码
  8. 王者荣耀s22服务器维护,王者荣耀安卓无法更新解决方法 S22更新问题汇总
  9. 如何用WordPress+SRS做直播网站
  10. 百度这些年,有了狼性,却没了牙齿