4种创建对象的方法:

  • 使用 new 关键字调用对象的构造器;
  • 使用 Java 反射的 newInstance() 方法;
  • 使用 Object 类的 clone() 方法;
  • 使用对象流 ObjectInputStream的readObject()方法读取序列化对象;

1、使用 new 关键字

最常见的Java 对象的构造方法,通过调用类提供的构造器创建对象。

2、使用 newInstance() 方法

Java 反射中有一个 newInstance() 方法,可以创建对象,步骤如下:获取要创建的类的 Class 对象。如果只需要调用这个类的访问权限为 public 无参构造器,直接使用 Class 类的实例方法 newInstance()。获取 Class 对象的构造器对象,通过调用 Class 类的实例方法 getDeclaredConstractors() 来获取构造器对象的数组。(获取所有构造器,无视访问权限的限制,数组顺序按照代码中的顺序决定)如果调用的构造器是 private 的,需要调用 Constractor 类的父类 AccessibleObject 类的实例方法 setAccessible(true) 来打破访问限制。使用 Constractor 类的实例方法 newInstance()。获取 Class 对象的方法有3个,此处不多赘述。获取Constractor 对象的方法有4个,此处不多赘述。

3、使用 clone() 方法

Object 类是所有类的直接或间接父类,Object 类中提供了 实例方法 native(),在给定对象的基础上,创建一个完全相同的对象。步骤如下:想要使用 clone() 方法创建对象的类,实现 Cloneable 接口。在类的内部,重写 Object 类的 clone() 方法。
备注:
没有实现 Cloneable 接口,会抛出 CloneNotSupportedException 异常。Object 类提供的 clone() 方法,访问权限是 protected,所以如果不重写 clone() 方法,是没有权限调用的。Object 类的 clone() 方法,是 native 方法。

4、使用反序列化的 readObject() 方法

这个方法一共分两步:将对象序列化,存储到一个文件中。从文件中反序列化,得到类对象。
序列化:想要序列化对象的类,实现Serializable接口。使用文件输出流FileOutputStream创建存储序列化之后对象的文件。使用对象输出流ObjectOutputStream的实例方法writeObject(obj)。判断类中是否存在,名为writeReplace(),返回类型为Object的方法,若有,写入这个方法的返回值;否则,写入obj对象。
反序列化:使用文件输入流FileInputStream找到存储序列化对象的文件。使用对象输入流ObjectInputStream的实例方法readObject()。判断类中是否存在,名为readResolve(),返回类型为Object的方法,若有读取这个对象;否则,反序列化文件中的对象流。
备注:在类中,writeReplace()和readResoleve()是两个非常特殊的方法,其特征签名需要严格限制:方法名限定,参数个数限定为0,返回类型必须是Object,不能为Object的子类,但是可以抛出不同的异常。访问修饰符没有限制,但一般推荐为private,防止误操作。其特殊的地方还在于将其设为private方法,没有其他方法调用的情况下,编译器不会发出警告。

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

  1. java中几种创建对象的方式

    java中几种创建对象的方式 在java程序中,对象可以被显式地或者隐式地创建. 下面说说四种显式的创建对象的方式:     ●  用new语句创建对象     ●  运用反射手段,调用java.la ...

  2. JAVA中三种URL连接方法

    Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们通 ...

  3. java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法

    在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...

  4. Java中图形界面重绘方法

    ** Java中图形界面重绘方法 **   在我们编写图形界面程序的过程中,我们就会发现,当我们将窗体拉伸,缩小(或者最大化最小化)的时候,之前在窗体上画的图形会消失了. 这是为什么呢?   1)原来 ...

  5. JAVA中几种常用JSON库性能比较

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本 ...

  6. 【转】Java中获取文件大小的正确方法

    [转]Java中获取文件大小的正确方法 本文出处:http://blog.csdn.net/chaijunkun/article/details/22387305,转载请注明.由于本人不定期会整理相关 ...

  7. 在Java中实现单例模式的有效方法是什么? [关闭]

    在Java中实现单例模式的有效方法是什么? #1楼 我使用Spring框架来管理我的单身人士. 它不会强制类的"单一性"(如果涉及多个类加载器,您将无法真正做到),但是它提供了一种 ...

  8. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...

    http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...

  9. Java中几种常量池的区分

    转载自  Java中几种常量池的区分 在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上 ...

最新文章

  1. 《庆余年》里范闲背了个诗,把这个GitHub项目带火了
  2. 爬虫学习笔记(十)—— Scrapy框架(五):下载中间件、用户/IP代理池、settings文件
  3. Android 测试支持库 1.0 现已发布!
  4. 解决交通拥堵、监测核辐射、野外搜救…无人机将有哪些神应用?
  5. 去除linux 文件中的控制字符,Shell乱码文件中的控制字符处理
  6. 正则表达式搜魂者(转:清清月儿 )
  7. 7-5 日期问题面向对象设计(聚合二) (40 分)
  8. [ZJOI2012]灾难(建图)
  9. 2019 CCF CSP-J2题解
  10. php 文件上传$_FILES中error返回值详解
  11. Hicharts实现世界地图思路及踩过的坑(含中文GeoJSON数据集及详细代码)
  12. 现代操作系统读书笔记
  13. 如何清空c盘只剩系统_电脑C盘怎么清理到最干净?高手教你清理C盘的详细步骤...
  14. windows 区域截屏以及延迟截屏
  15. NLP之文本特征提取详解
  16. 深度学习损失函数 分类损失回归损失
  17. JAVA中操作数据库方式与设计模式的应用 --青山不改绿水长流-EKing
  18. 移动互联网领域当前的主流技术及其社会需求调查报告
  19. android 图片自动拉伸,解决关于ImageView自适应的问题(拉伸变形,图片模糊)
  20. MS-SQL Server 基础类 - SQL语句

热门文章

  1. C语言的文件的写入------C语言
  2. Windows 下使用 nmap ncat 命令测试 UDP 端口连接
  3. 计算机视觉之相机模型
  4. JS和JSP实现页面跳转的几种方法
  5. java phrase_18.match_phrase的用法
  6. 3.6 青年歌手参加歌曲大奖赛,有10个评委给选手打分,试编程求出该选手的平均得分并输出(去掉一个最高分和最低分)
  7. 【Day15 文献泛读】Numerical magnitude affects temporal memories but not time encoding
  8. 为什么我们说NFT拥有无限潜力?
  9. zabbix监控服务器性能,使用zabbix监控apache性能
  10. Linux 服务器 Firewalld 防火墙配置端口转发