Java中4种创建对象的方法
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种创建对象的方法相关推荐
- java中几种创建对象的方式
java中几种创建对象的方式 在java程序中,对象可以被显式地或者隐式地创建. 下面说说四种显式的创建对象的方式: ● 用new语句创建对象 ● 运用反射手段,调用java.la ...
- JAVA中三种URL连接方法
Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们通 ...
- java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法
在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...
- Java中图形界面重绘方法
** Java中图形界面重绘方法 ** 在我们编写图形界面程序的过程中,我们就会发现,当我们将窗体拉伸,缩小(或者最大化最小化)的时候,之前在窗体上画的图形会消失了. 这是为什么呢? 1)原来 ...
- JAVA中几种常用JSON库性能比较
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本 ...
- 【转】Java中获取文件大小的正确方法
[转]Java中获取文件大小的正确方法 本文出处:http://blog.csdn.net/chaijunkun/article/details/22387305,转载请注明.由于本人不定期会整理相关 ...
- 在Java中实现单例模式的有效方法是什么? [关闭]
在Java中实现单例模式的有效方法是什么? #1楼 我使用Spring框架来管理我的单身人士. 它不会强制类的"单一性"(如果涉及多个类加载器,您将无法真正做到),但是它提供了一种 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...
http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...
- Java中几种常量池的区分
转载自 Java中几种常量池的区分 在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上 ...
最新文章
- 《庆余年》里范闲背了个诗,把这个GitHub项目带火了
- 爬虫学习笔记(十)—— Scrapy框架(五):下载中间件、用户/IP代理池、settings文件
- Android 测试支持库 1.0 现已发布!
- 解决交通拥堵、监测核辐射、野外搜救…无人机将有哪些神应用?
- 去除linux 文件中的控制字符,Shell乱码文件中的控制字符处理
- 正则表达式搜魂者(转:清清月儿 )
- 7-5 日期问题面向对象设计(聚合二) (40 分)
- [ZJOI2012]灾难(建图)
- 2019 CCF CSP-J2题解
- php 文件上传$_FILES中error返回值详解
- Hicharts实现世界地图思路及踩过的坑(含中文GeoJSON数据集及详细代码)
- 现代操作系统读书笔记
- 如何清空c盘只剩系统_电脑C盘怎么清理到最干净?高手教你清理C盘的详细步骤...
- windows 区域截屏以及延迟截屏
- NLP之文本特征提取详解
- 深度学习损失函数 分类损失回归损失
- JAVA中操作数据库方式与设计模式的应用 --青山不改绿水长流-EKing
- 移动互联网领域当前的主流技术及其社会需求调查报告
- android 图片自动拉伸,解决关于ImageView自适应的问题(拉伸变形,图片模糊)
- MS-SQL Server 基础类 - SQL语句
热门文章
- C语言的文件的写入------C语言
- Windows 下使用 nmap ncat 命令测试 UDP 端口连接
- 计算机视觉之相机模型
- JS和JSP实现页面跳转的几种方法
- java phrase_18.match_phrase的用法
- 3.6 青年歌手参加歌曲大奖赛,有10个评委给选手打分,试编程求出该选手的平均得分并输出(去掉一个最高分和最低分)
- 【Day15 文献泛读】Numerical magnitude affects temporal memories but not time encoding
- 为什么我们说NFT拥有无限潜力?
- zabbix监控服务器性能,使用zabbix监控apache性能
- Linux 服务器 Firewalld 防火墙配置端口转发