百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Java中有哪些创建对象的方法? java创建对象的方式有

lipiwang 2024-10-15 18:44 15 浏览 0 评论

面向对象程序设计(OOP)是当今主流的程序设计规范,它已经基本取代了结构化、过程化的程序设计。Java就是面向对象的,使用java开发程序,不管做什么样的操作,我们第一步都是从创建对象、获取对象开始,有了对象我们就可以完成一切我们所需要的程序了。

那怎么样才能创建对象?java中有哪些创建对象的方法?

我们今天就来详细了解一下。

一:new运算的方式创建对象

首先我们有一个关于宠物的类Dog

当我们程序中需要出现一只狗狗的时候,我们就可以使用new来创建一个具体的对象了

在这里我们就通过了new的方式获得了一个具体的对象,并且起名为小黑,年龄为3岁。

现在,dog1就带表了堆中刚才所实例化出来的对象。以后我们要操作刚才new出来的对象就可以通过dog1来操作了,例如我们让小狗打个招呼(调用Dog类的show方法):

二:通过反射的方式创建对象

Java的反射技术是java程序的特征之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。

反射的作用:1)可以通过反射机制发现对象的类型,找到类中包含的方法、属性和构造器2)可以通过反射创建对象并访问任意对象方法和属性

第二种创建java对象的方式就是通过反射来创建了。

还是我们之前用过的Dog类,首先JVM利用ClassLoader(类加载器)先将Dog类加载到内存,然后马上产生了一个Class类型的对象,该对象可以看成是一个模型,以后无论创建多少个Dog类的实例都是利用该模型来生成(一个类所对应的Class类型的对象只有一个)。

通过反射创建对象第一步:需要获得class对象

这样获取到类对象之后就可以通过newInstance()这个方法来获取具体的对象了,需要注意的是这个方法的返回值是Object类型,我们需要进行转型操作

这样我们就通过反射的方式创建好了java对象,newInstance()和new的区别如下:

newInstance: 弱类型。低效率。只能调用无参构造。new: 强类型。相对高效。能调用任何public构造。

在这里需要注意的是,newInstance()这个方法只能够调用无参的构造函数(其实这也符合javabean规范,一个类必须拥有一个无参构造函数),现在我们在Dog类中写有参构造函数(默认覆盖无参构造函数),值得注意的是,当我们写了有参构造函数之后,系统将不再提供默认的无参构造函数,如果需要的话,需要你自己写

现在再去调用newInstance()方法

现在程序运行结果为java.lang.InstantiationException,着就是程序没有无参构造函数而使用newInstance()方法引发的错误了

当然如果你需要调用有参构造函数的话,可以通过以下的办法:

程序的第二行我们调用Class对象的getConstructor方法,然后在参数列表中传入String和int,因为我们的有参构造函数的参数列表就是这样规定的,现在我们就获取到了前边定义好的Dog类的有参构造函数了

第三行我们通过获取的Constructor对象调用newInstance方法,然后在方法中传入Object类型的参数列表,因为我们的有参构造函数需要这些值,这样就可以通过反射的方式创建只有有参构造函数的对象了

三:通过对象反序列化的方式来创建

当我们使用反序列化一个对象的时候,JVM会给我们创建一个对象。但是,反序列化的时候JVM并不会去调用类的构造函数(前边两种方式都会去调用构造函数)来创建对象,而是通过之前序列化对象的字节序列来创建的。

序列化对象必须实现Serializable这个接口把对象转为字节序列的过程称为对象的序列化把字节序列恢复为对象的过程称为对象的反序列化

需要注意的是:Dog类需要实现Serializable这个接口才可以被序列化/反序列化,否则会出现java.io.NotSerializableException异常

对象序列化通常有两种用途:

1)将对象的字节序列永久的保存到硬盘上

例如web服务器把某些对象保存到硬盘让他们离开内存空间,节约内存,当需要的时候再从硬盘上取回到内存中使用

2)在网络上传递字节序列

当两个进程进行远程通讯的时候,发送方将java对象转换成字节序列发送(序列化),接受方再把这些字节序列转换成java对象(反序列化)

当Dog类实现了Serializable接口后,我们现在将Dog对象序列化

通过ObjectOutputStream的writeObject方法,我们就将一个对象完成了序列化

现在我们再次将刚才序列化后的对象反序列化回来,这次用到的是ObjectInputStream的readObject方法:

这样我们就使用了对象的序列化完成了java对象的创建

四:通过clone的方式来创建

clone方法来源于java中object类,在jdk中的解释为:该方法返回一个此对象的副本。clone顾名思义就是复制的意思。所谓复制对象就是在内存中分配一个和原一模一样的空间,在此创建新的对象。

我们现在就来完成clone的实验,首先我们需要在需要clone的类中实现Cloneable接口,

否则会出现java.lang.CloneNotSupportedException异常,由于Object类中clone方法是protected 修饰的,所以我们必须在需要克隆的类中重写克隆方法

现在进入实验1:

返回值为true,因为在这个地方只有d1是真实创建了对象,d2来源于d1的赋值,引用地址值一样(代表是同一个对象),所以==判断结果为true

现在进入实验2:

实验结果为false,因为clone是真实在内存中重新划分一块区域来存储新的对象,d1和d2是两个不同的对象所以返回结果值为false

这样我们就使用了对象的克隆的方式完成了java对象的创建。

如果大家有问题想了解更多的技术干货可以私信发送【微信】加朗妹儿微信哟~

相关推荐

Nat. Synthesis: 重大突破,电化学形成C-S键

第一作者:JunnanLi,HasanAl-Mahayni通讯作者:AliSeifitokaldani,NikolayKornienko通讯单位:蒙特利尔大学,麦吉尔大学【研究亮点】形成C-...

网络安全与应用(二)(网络安全理论与应用)

1、应用层安全协议SHTTP和HTTPS:SHTTP:SecHTTP,安全超文本传输协议,是HTTP扩展,使用TCP的80端口。HTTPS:HTTP+SSL,使用TCP的443端口。大部分web应用...

TN-C、TN-S、TT、IT供电系统详解及对比

TN-C、TN-S、TT、IT供电系统是低压配电系统中常见的四种接地方式,它们各自有不同的特点和适用场景。一、系统介绍TN-C供电系统①定义:整个系统中,工作零线(N线)与保护零线(PE线)是合一的,...

网络应用服务器(三)(网络应用程序服务器)

#头条创作挑战赛#1、DNS协议:域名解析协议,用于把主机域名解析为对应的IP地址。是一个分布式数据库,C/S工作方式。主要基于UDP协议,少数使用TCP,端口号都是53。常用域名如下2、DNS协议...

腾讯发布混元Turbo S:业界首次无损应用Mamba架构

21世纪经济报道记者白杨北京报道2月27日,腾讯正式发布新一代基座模型——混元TurboS。据腾讯混元团队介绍,混元TurboS在架构方面创新性地采用了Hybrid-Mamba-Transfor...

【收藏】低压配电系统中TT IT TN-S/TN-C/TN-C-S 的区别?

低压配电系统的接地型式选择是电气安全设计的核心环节,TT、IT、TN-S、TN-C、TN-C-S这五种主要接地型式因其结构、保护原理和故障特性的显著差异,在工程应用中有不同的适用范围和限制条件。如若发...

金万维公有云平台如何实现C/S架构软件快速SaaS化

金万维作为国内领先的企业信息化垂直B2B平台运营商,拥有超过5000家管理软件合作伙伴,掌握管理软件一线的发展动态,因此深知传统管理软件近年来面对的困境和问题。而SaaS却在软件行业内发展迅猛势如燎原...

随时随地做翻译:B/S架构的传奇时代到来

随着新兴技术的发展和大数据时代的到来,翻译作为连接各国语言和文化的工具,更是具有前所未有的拓展空间。传统的在计算机辅助翻译软件(CAT)上进行翻译的模式,受到时间和空间的限制,导致翻译过程中面临层层障...

BS和CS 架构的介绍(一篇就够了)(cs和bs架构的含义)

简介C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。...

物管王(包租婆)软件架构与B/S和C/S架构的优点和缺点比较

一、B/S系统架构的优点和缺点优点:1)客户端无需安装,有Web浏览器即可。2)BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强。3)BS架构无需升级多个客户端,升级服...

监听器入门看这篇就够了(怎么检查车上有没有被别人安装监听器)

什么是监听器监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。。为什么我们要使用监听器?...

购物车【JavaWeb项目、简单版】(java购物车的实现原理)

①构建开发环境免费学习资料获取方式导入需要用到的开发包建立程序开发包②设计实体书籍实体publicclassBook{privateStringid;privat...

基础篇-SpringBoot监听器Listener的使用

1.监听器Listener简介1.1监听器Listener介绍Listener是JavaWeb的三大组件(Servlet、Filter、Listener)之一,JavaWeb中的监听器主要用...

你在 Spring Boot3 整合 JWT 实现 RESTful 接口鉴权时是否遇到难题?

各位后端开发小伙伴们!在日常使用SpringBoot3搭建项目时,RESTful接口的鉴权至关重要。而JWT技术,作为一种简洁且高效的鉴权方式,被广泛应用。但大家是不是在整合过程中遇到过各...

javaWeb RSA加密使用(rsa加密java代码)

加密算法在各个网站运用很平常,今天整理代码的时候看到了我们项目中运用了RSA加密,就了解了一下。先简单说一下RSA加密算法原理,RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要...

取消回复欢迎 发表评论: