在本篇文章中,将介绍5种创建Java对象的方式。类是创建对象的基本模板,接下来将介绍5种不同的方式,利用Java类来实例化Java对象。

1. 使用new关键字

​ 采用new关键字实例化对象是Java中最为常见的方法,下面是采用new关键字实例化对象的示例。在开始之前,我们先准备好一个Java类:Student.java。

package com.ramostear.oops;public class Student{    private String name;    private String nickname;    public Student(String name,String nickname){        this.name = name;        this.nickname = nickname;    }    public String getName(){        return name;    }    public void setName(String name){        this.name = name;    }    public String getNickname(){        return nickname;    }    public void setNickname(String nickname){        this.nickname = nickname;    }}

接下来,我们通过new关键字来创建几个学生:

package com.ramostear.oops;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()方法,动态实例化对象。同理,在开始之前,我们需要准备一个目标类:Student.java。

package com.ramostear.oops;public class Student{    private String name = "Zhangsan";    private String nickname = "张三";    public Student(){        super();    }    public Student(String name,String nickname){        super();        this.name = name;        this.nickname = nickname;    }    public String getName(){        return name;    }    public void setName(String name){        this.name = name;    }    public String getNickname(){        return nickname;    }    public void setNickname(String nickname){        this.nickname = nickname;    }}

接下来,将演示如何通过newInstance()方法来创建新的对象:

package com.ramostear.oops;public class TestUseNewInstanceMethod{    public static void main(String[] args){        try{            String className = "com.ramostear.oops.Student";            Class clz = Class.forName(className);            Student student = (Student) clz.newInstance();            System.out.println("student name :"+ student.getName()+", nickname: "+student.getNickname());        }catch(InstantiationException | IllegalAccessException | ClassNotFoundException e){            e.printStackTrace();        }    }}

运行main()方法,将输出如下信息:

student name :Zhangsan, nickname:张三

3. 使用Constructor.newInstance()方法

​ 与Class类的newInstance()方法相似,我们还可以使用java.lang.reflect.Constructor类的newInstance()方法来创建新的对象。同样,我们先准备一个目标类:

package com.ramostear.oops;public class Student{    private String name = "Constructor";    private String nickname = "构造器";    public Student(){        super();    }    public Student(String name,String nickname){        super();        this.name = name;        this.nickname = nickname;    }    public String getName(){        return name;    }    public void setName(String name){        this.name = name;    }    public String getNickname(){        return nickname;    }    public void setNickname(String nickname){        this.nickname = nickname;    }}

接下来,我们看看如何使用Constructor的newInstance()方法创建新的对象:

package com.ramostear.oops;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;public class UseConstructorNewInstanceMethod{    public static void main(String[] args){        Constructor studentConstructor;        try{            studentConstructor = Student.class.getConstructor();            Student student = studentConstructor.newInstance();             System.out.println("student name :"+ student.getName()+", nickname: "+student.getNickname());        }catch(InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException |               NoSuchMethodException | SecurityException e){            e.printStackTrace();        }    } }

执行main()方法,将在控制台输出如下信息:

student name:Constructor, nickname:构造器

4. 使用反序列化

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

package com.ramostear.oops;import java.io.Serializable;public class Student implements Serializable{ private String name; private String nickname; public Student() {  super(); } public Student(String name, String nickname) {  super();  this.name = name;  this.nickname = nickname; } public String getName() {  return name; } public void setName(String name) {  this.name = name; } public String getNickname() {  return nickname; } public void setNickname(String nickname) {  this.nickname = nickname; }}

接下来,将通过一个简单的示例,演示如何使用反序列化的方式创建新的对象:

package com.ramostear.oops;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class StudentDemo {    public static void main(String[] args) {        String filePath = "data.txt";        Student student1 = new Student("Deserialization", "反序列化");        try {            FileOutputStream fileOutputStream = new FileOutputStream(filePath);            ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);            outputStream.writeObject(student1);            outputStream.flush();            outputStream.close();            FileInputStream fileInputStream = new FileInputStream(filePath);            ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);            Student student2 = (Student) inputStream.readObject();            inputStream.close();            System.out.println("Student name:"+student2.getName()+", nickname:"+student2.getNickname());        } catch (Exception ee) {            ee.printStackTrace();        }    }}

执行上述代码,将在控制台输出如下信息:

Student name:Deserialization,nickname:反序列化

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

​ clone()方法可以创建现有对象的副本,但在使用clone()方法前,需保证模板类实现了Cloneable接口,Cloneable接口也是一个标记类接口。下面是使用克隆方式创建新对象的完整示例:

package net.javaguides.corejava.oops;import java.io.Serializable;public class Student implements Cloneable {    private String name;    private String nickname;    public Student() {        super();    }    public Student(String name, String nickname) {        super();        this.name = name;        this.nickname = nickname;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getNickname() {        return nickname;    }    public void setNickname(String nickname) {        this.nickname = nickname;    }    public static void main(String args[]) {        Student stu1 = new Student("Clone", "克隆");        try {            Student stu2 = (Student) stu1.clone();            System.out.println("Student name :"+stu2.getName()+",nickname:"+stu2.getNickanme());        } catch (CloneNotSupportedException e) {            e.printStackTrace();        }    }}

运行上述代码,控制台将输出如下信息:

Student name: Clone,nickname:克隆

java 对象创建过程_5种创建Java对象的方式相关推荐

  1. Java线程池的四种创建方式

    Java线程池的四种创建方式 Java使用Thread类来表示线程,所有的线程都是Thread类或者是他的子类.Java有四种方式来创建线程. (1)继承Thread类创建线程 (2)实现Runnab ...

  2. java进程调度怎么画图,[Java教程]进程调度的两种算法JAVA实现

    [Java教程]进程调度的两种算法JAVA实现 0 2015-10-21 12:00:08 (SJF分为preemptive shortest job first(抢占式)和non-preemptiv ...

  3. js之删除对象属性的三种方法 判断对象中是否有某一属性的四种方法

    js之删除对象属性的三种方法 & 判断对象中是否有某一属性的四种方法 示例 1.基础版 var a = { id: 18, age: 20, name: "zhangsan" ...

  4. Java基础进阶多线程-四种创建方式

    文章目录 1.分析以下程序,有几个线程,除垃圾回收线程之外.有几个线程? 示例代码01: 2.线程创建的第一种方式:(继承Thread类) 示例代码02: 运行结果: 3.线程创建的第二种方式:(Ru ...

  5. java 序列化 文件_一种恢复Java序列化文件数据的方法与流程

    本发明涉及信息安全技术领域,特别涉及一种恢复Java序列化文件数据的方法. 背景技术: 在数据解析恢复领域经常会遇到序列化文件的解析.Java序列化是Java 自身提供的一种数据序列化方式,它允许开发 ...

  6. java 下载加速_一种基于Java的大文件下载加速方法与流程

    本发明涉及java/多线程技术领域,涉及一种加速文件下载装置,具体提供一种基于java的大文件下载加速方法. 背景技术: 现有的常用下载方式是基于浏览器的单线程下载.这种单线程下载的方式,是通过htt ...

  7. CGB2005 JT-1(jt概述 SqlYog 物理模型图PD 表结构 pom文件标签说明 jt环境搭建 创建项目2种,创建各种文件 idea导入,打包,删除项目,启动原理)

    注意事项: 1.京淘项目概述和动吧项目缺点描述 2.把sql文件导入数据库:通过SqlYog可视化工具或者Dos命令窗口. 3.SqlYog说明,和制作物理模型图的工具pd用发. 4.表结构学习 5. ...

  8. java script创建对象_JavaScript七种非常经典的创建对象方式

    JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产.接下来介绍七种非常经典的创建对象的方式,他们也 ...

  9. java调试生命周期,一种基于JAVA的智能合约生命周期的管理方法与流程

    本发明涉及区块链技术,尤其涉及一种基于JAVA的智能合约生命周期的管理方法. 背景技术: 区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交 ...

最新文章

  1. 2021年1月20日 北京经纬恒润科技有限公司一面
  2. ZLComboBox自定义控件开发详解
  3. 低延时直播与RTC融合架构设计③:RTC融合架构设计
  4. 技术关注:搜索引擎经验
  5. Java Project项目在Linux下部署步骤及注意事项
  6. 资源打包Assetbundle .
  7. 机器学习基础(二十八) —— 数据规格化
  8. HTML5 音频 / 视频 DOM 操作
  9. 【C++软件开发】面试经典题目汇总
  10. 力士乐电源模块故障代码_REXROTH DRIVE博士力士乐伺服驱动器故障代码大全
  11. python操作模拟器多开操作_appium+python自动化60-windows上同时启动多个appium服务,让多个android机器并行运行...
  12. Wireshark过滤器写法总结
  13. Firefox插件的安装及使用方法(持续更新中)
  14. Android基础入门教程——2.4.2 ListView简单使用
  15. 人生法则:蝴蝶效应、青蛙现象、鳄鱼法则、鲇鱼效应、羊群效应、刺猬法则...
  16. easyExcel导入导出(列锁定单元格、表头合并、导出类型限制、锁定单元格增加底色、设置密码、隐藏列等)
  17. hal库串口dma卡死_STM32 HAL库 串口DMA发送完成中断
  18. 数据库设计第一范式(1NF)
  19. 小红书通过分享链接获取用户ID
  20. cax计算机绘图实训报告,cad实习报告精选

热门文章

  1. c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?...
  2. [云炬ThinkPython阅读笔记]2.1 赋值语句
  3. 科大星云诗社动态20210828
  4. [我的1024开源程序]600元WORD公文校对器插件
  5. 重磅 | AI 圣经 PRML《模式识别与机器学习》官方开源了!
  6. oracle的redo和undo,OracleUndoRedo通俗理解
  7. Unet项目解析(1): run_training.py
  8. 小波的秘密6_小波包的理解
  9. 深度解析K-L变换 及其 在特征识别中的应用
  10. Unity3D 单例模式