专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

对象实例化的方式有哪些?

来源:小嗨整编  作者:小嗨  发布时间:2024-03-21 07:26
摘要:对象实例化的方式有:1、使用new关键字;2、使用class类的newinstance方法;3、使用constructor类的newinstance方法;4、使用clone方法;5、使用反序列化。对象实例化的几种方式1、使用new关键字这是...

对象实例化的方式有:1、使用new关键字;2、使用class类的newinstance方法;3、使用constructor类的newinstance方法;4、使用clone方法;5、使用反序列化。

对象实例化的方式有哪些?

对象实例化的几种方式

1、使用new关键字

这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。

Employee emp1 = new Employee();0: new           #19          // class org/programming/mitra/exercises/Employee3: dup4: invokespecial #21          // Method org/programming/mitra/exercises/Employee."":()V
登录后复制

2、使用Class类的newInstance方法

我们也可以使用Class类的newInstance方法创建对象。这个newInstance方法调用无参的构造函数创建对象。

我们可以通过下面方式调用newInstance方法创建对象:

Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();或者Employee emp2 = Employee.class.newInstance();51: invokevirtual    #70    // Method java/lang/Class.newInstance:()Ljava/lang/Object;
登录后复制

3、使用Constructor类的newInstance方法

和Class类的newInstance方法很像, java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。

Constructor constructor = Employee.class.getConstructor();Employee emp3 = constructor.newInstance();111: invokevirtual  #80  // Method java/lang/reflect/Constructor.newInstance:([Ljava/lang/Object;)Ljava/lang/Object;
登录后复制

这两种newInstance方法就是大家所说的反射。事实上Class的newInstance方法内部调用Constructor的newInstance方法。这也是众多框架,如Spring、Hibernate、Struts等使用后者的原因。

4、使用clone方法

无论何时我们调用一个对象的clone方法,jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数。

要使用clone方法,我们需要先实现Cloneable接口并实现其定义的clone方法。

Employee emp4 = (Employee) emp3.clone();162: invokevirtual #87  // Method org/programming/mitra/exercises/Employee.clone ()Ljava/lang/Object;
登录后复制

5、使用反序列化

当我们序列化和反序列化一个对象,jvm会给我们创建一个单独的对象。在反序列化时,jvm创建对象并不会调用任何构造函数。为了反序列化一个对象,我们需要让我们的类实现Serializable接口

ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));Employee emp5 = (Employee) in.readObject();261: invokevirtual  #118   // Method java/io/ObjectInputStream.readObject:()Ljava/lang/Object;
登录后复制

我们从上面的字节码片段可以看到,除了第1个方法,其他4个方法全都转变为invokevirtual(创建对象的直接方法),

第一个方法转变为两个调用,new和invokespecial(构造函数调用)。

下面的Java程序中,我们将用5种方式创建Employee对象。你可以从GitHub找到这些代码

public class ObjectCreation {    public static void main(String... args) throws Exception {        // By using new keyword        Employee emp1 = new Employee();        emp1.setName("Naresh");        System.out.println(emp1 + ", hashcode : " + emp1.hashCode());        // By using Class class's newInstance() method        Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee")                               .newInstance();        // Or we can simply do this        // Employee emp2 = Employee.class.newInstance();        emp2.setName("Rishi");        System.out.println(emp2 + ", hashcode : " + emp2.hashCode());        // By using Constructor class's newInstance() method        Constructor constructor = Employee.class.getConstructor();        Employee emp3 = constructor.newInstance();        emp3.setName("Yogesh");        System.out.println(emp3 + ", hashcode : " + emp3.hashCode());        // By using clone() method        Employee emp4 = (Employee) emp3.clone();        emp4.setName("Atul");        System.out.println(emp4 + ", hashcode : " + emp4.hashCode());        // By using Deserialization        // Serialization        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.obj"));        out.writeObject(emp4);        out.close();        //Deserialization        ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));        Employee emp5 = (Employee) in.readObject();        in.close();        emp5.setName("Akash");        System.out.println(emp5 + ", hashcode : " + emp5.hashCode());    }}
登录后复制

相关文章教程推荐:java入门


本文地址:网络百科频道 https://www.eeeoo.cn/wangluo/1152023.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


网络百科
小编:小嗨整编
相关文章相关阅读
  • 阴阳师脚本会不会封号(阴阳师脚本辅助有哪些)?

    阴阳师脚本会不会封号(阴阳师脚本辅助有哪些)?

    阴阳师脚本会不会封号(阴阳师脚本辅助有哪些)?关于阴阳师脚本会不会封号这一问题,一直困扰着许多玩家。本文将为大家揭开阴阳师脚本辅助的神秘面纱,让你对这一问题有更清晰的了解。一、阴阳师脚本种类及功能1.加速脚本:通过修改游戏运行速度,让玩家在...

  • 绝地求生赛事2024赛程表(绝地求生赛事有哪些)?

    绝地求生赛事2024赛程表(绝地求生赛事有哪些)?

    绝地求生赛事2024赛程表(绝地求生赛事有哪些)?随着电子竞技的蓬勃发展,绝地求生作为一款深受全球玩家喜爱的游戏,其赛事活动自然备受瞩目。2024年,绝地求生赛事将继续火热进行,为广大玩家带来一场场精彩绝伦的竞技盛宴。一、PCL春季联赛(2...

  • 王者荣耀电脑版怎么操作(电脑打王者按哪些键)?

    王者荣耀电脑版怎么操作(电脑打王者按哪些键)?

    王者荣耀电脑版怎么操作(电脑打王者按哪些键)?王者荣耀电脑版吸引了大批玩家。电脑版王者荣耀通过模拟器运行,为玩家提供了更加舒适的操控体验。那么,电脑上玩王者荣耀应该如何操作呢?下面介绍一下键盘按键设置及其功能。一、下载与安装要在电脑上下载并...

  • 推广app赚佣金平台有哪些(推广app是什么工作)?

    推广app赚佣金平台有哪些(推广app是什么工作)?

    推广app赚佣金平台有哪些(推广app是什么工作)?简单来说,推广引流app就是利用各种渠道,将一款应用程序(App)推广给潜在用户,吸引他们下载并使用。推广app赚佣金平台有哪些1:U客直谈想要从事地推app拉新行业,U客直谈建议深入了解...

  • lol战队最新排名(lol战队有哪些)?

    lol战队最新排名(lol战队有哪些)?

    lol战队最新排名(lol战队有哪些)?近日,英雄联盟赛事官方正式推出全球战队战力排名,该榜单涵盖了全球各大赛区的一级联赛战队。让我们一起来看看这份最新排名。在这份榜单中,LCK赛区的实力继续保持领先地位,其中GEN战队以出色表现位居榜首。...

  • 视频格式转换软件有哪些(视频格式转换软件免费版)?

    视频格式转换软件有哪些(视频格式转换软件免费版)?

    视频格式转换软件有哪些(视频格式转换软件免费版)?随着科技的不断发展,人们对视频拍摄和观看的需求日益增长,视频格式转换软件也应运而生。本文将为大家介绍几款免费视频格式转换软件,帮助你轻松应对不同视频格式的转换需求。一、AnyVideoCon...

  • 电脑锁屏软件哪个好用(电脑锁屏软件有哪些)?

    电脑锁屏软件哪个好用(电脑锁屏软件有哪些)?

    电脑锁屏软件哪个好用(电脑锁屏软件有哪些)?一款好用的电脑锁屏软件就能派上大用场。本文将为您盘点目前市面上较为流行的电脑锁屏软件,并分析它们的优缺点,帮助您选择最适合自己的软件。一、电脑锁屏软件有哪些?1.Windows自带锁屏功能2.Sc...

  • 视频app哪个最好用(视频app有哪些推荐一下)?

    视频app哪个最好用(视频app有哪些推荐一下)?

    视频app哪个最好用(视频app有哪些推荐一下)?随着互联网的快速发展,视频已经成为人们日常生活中不可或缺的一部分。越来越多的人通过视频APP观看各类节目、学习知识、娱乐消遣。那么,在众多视频APP中,哪个最好用呢?一、腾讯视频腾讯视频作为...

  • 周排行
  • 月排行
  • 年排行

精彩推荐