使用new关键字

通过new关键字直接在堆内存上创建对象,这样很方便的调用对象的有参和无参的构造函数.

Student stu1 = new Student("lihua");

Class反射调用

使用Java中反射特性,来进行对象的创建。使用Class类的newInstance方法可以调用无参的构造器来创建对象,如果是有参构造器,则需要使用ClassforName方法和Constructor来进行对象的创建。

Class stuClass = Class.forName("Student");
Constructor constructor = stuClass.getConstructor(String.class);
Student stu2 = (Student) constructor.newInstance("李四");

使用Clone方法

使用Clone的方法:无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。要使用clone方法,我们必须先实现Cloneable接口并实现其定义的clone方法。

try
{Student stu3 = (Student) stu1.clone();System.out.println(stu3);
}
catch (CloneNotSupportedException e)
{e.printStackTrace();
}

使用序列化

一个对象实现了Serializable接口,就可以把对象写入到文件中,并通过读取文件来创建对象。

String path = Test.class.getClassLoader().getResource("").getPath();
String objectFilePath = path + "out.txt";ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(objectFilePath));
objectOutputStream.writeObject(stu2);ObjectInput objectInput = new ObjectInputStream(new FileInputStream(objectFilePath));
Student stu4 = (Student) objectInput.readObject();

示例代码

Student对象,实现CloneableSerializable接口

import java.io.Serializable;/*** Created by wzj on 2017/11/3.*/
public class Student implements Cloneable,Serializable
{private String name;public Student(String name){this.name = name;}/*** @return a clone of this instance.* @throws CloneNotSupportedException if the object's class does not*                                    support the {@code Cloneable} interface. Subclasses*                                    that override the {@code clone} method can also*                                    throw this exception to indicate that an instance cannot*                                    be cloned.* @see Cloneable*/@Overrideprotected Object clone() throws CloneNotSupportedException{return super.clone();}
}

测试类

import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;/*** Created by wzj on 2017/11/2.*/
public class Test
{public static void main(String[] args) throws Exception{//1、第一种方式是通过newStudent stu1 = new Student("lihua");System.out.println(stu1);//2、通过java反射,静态方式Class stuClass = Class.forName("Student");Constructor constructor = stuClass.getConstructor(String.class);Student stu2 = (Student) constructor.newInstance("李四");System.out.println(stu2);//3、通过clone实现,必须实现Cloneable接口try{Student stu3 = (Student) stu1.clone();System.out.println(stu3);}catch (CloneNotSupportedException e){e.printStackTrace();}//4、通过对象流,必须实现SerializableString path = Test.class.getClassLoader().getResource("").getPath();String objectFilePath = path + "out.txt";ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(objectFilePath));objectOutputStream.writeObject(stu2);ObjectInput objectInput = new ObjectInputStream(new FileInputStream(objectFilePath));Student stu4 = (Student) objectInput.readObject();System.out.println(stu4);}}

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

  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创建对象的5种方式

    说明 Java有5种方式来创建对象: 使用 new 关键字(最常用):         ObjectName obj = new ObjectName(); 使用反射的Class类的newInstan ...

  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. spring 数组中随机取几个_别给孩子取这三种名字!截止年末,名字中的这几个字已经烂大街了...
  2. MongoDB配置参数说明
  3. Linux 命令之 head -- 在屏幕上显示指定文件的开头若干行/显示文件开头内容/查看文件开头内容
  4. 商业智能常见名词浅释(转载)
  5. 德鲁伊 oltp oltp_内存中OLTP –娱乐看门狗的三个关键点–桶数
  6. Linux 创建用户并限制其访问目录,设置密码为永不过期
  7. VSS 2005配置,很详细
  8. 我如何学习:开篇 先提升下肾上腺素
  9. 【云驻共创】华为云文字识别服务的体验之旅
  10. 计算机国际期刊等级,计算机期刊等级(全)
  11. 设计模式:仲裁者(Mediator)模式
  12. SQLiteSpy 打开SqLite数据库文件
  13. vue的过渡动画(有vue的动画库和ui库的介绍)
  14. 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)
  15. 计算机多媒体论文致谢,这篇博士论文《致谢》刷屏,句句扎心……
  16. Chosen by god 【组合数打表,快速幂,求逆元】
  17. 湖畔大学曾鸣演讲:从0到0.1最难,伟大如何孕育于此?
  18. 机器学习利用Anaconda搭建Python科学计算环境
  19. iperf3使用说明
  20. 趋向于符号,趣味编程

热门文章

  1. 【免费教程】Delft3D水动力模型应用和地表水环评报告编制
  2. Wordpress插件wp-automatic采集频率设置成1秒每次
  3. 大数据治理平台建设方案(文末附PDF下载)
  4. LeetCode-126.单词接龙II(相关话题:Dijkstra算法+深度优先)
  5. 解决EAapp启动不了“战地V”等游戏的方法
  6. C++ 函数模板的使用
  7. 录屏怎么录声音苹果_苹果手机自带录屏功能,自己的声音也能录进去?还真没想到...
  8. Windows11任务栏时钟的秒钟显示
  9. 众推平台架构mdash;mdash;分布式爬虫
  10. Android9及以上后台应用无法获取麦克风权限问题