如何销毁一个实例化对象_JAVA中如何创建和销毁对象

97c354aad6e7517e75725135c56ac4dd.png

第1条 考虑用静态方法代替构造器

类可以通过静态工厂方法来提供它的客户端,而不是通过构造器。提供静态工厂方法而不是公有构造器,这样做具有几大优势。

1.静态工厂方法与构造器不同的第一大优势在于,它们有名称。

例如,构造器BigInteger(int,int,Random)返回的BigInteger可能为素数,如果名为BigInteger.probablePrime的静态工厂方法来表示,显然更为清晰

2.静态工厂方法与构造器不同的第二大优势在于,不用在每次调用它们的时候都创建一个新对象。

静态工厂方法能够为重复的调用返回相同对象,这样有助于类总能控制在某个时刻哪些实例应该存在。这种类被称作实例受控的类。实例受控使得类可以确保他是一个Singleton或者是不可实例化的。

3.静态工厂方法与构造器不同的第三大优势在于,它们可以返回原返回类型的任何子类型的对象。

这种灵活性的一种应用是,API可以返回对象,同时又不会使对象的类变成公有的。以这种方式隐藏实现类会使API变的非常简洁。

4.静态工厂方法的第四大优势在于,在创建参数化类型实例的时候,它们使代码变得更加简洁

其实这一点java1.7就已经优化,调用参数化构造器时,它会自动进行类型检查,不需要显示申明

Map> map = new HashMap>();

//上下两种方式都是可以的

Map> map = new HashMap<>();

静态工厂方法的主要缺点在于,类如果不含公有的或者受保护的构造器,就不能被子类化。

静态工厂方法的第二个缺点在于,它们与其他的静态方法实际上没有任何区别。

最后附上静态工厂方法的一些惯用命名:

valueOf----不太严格讲,该方法返回的实例与它的参数具有相同的值。这样的静态工厂方法实际上是类型转换方法。

of----valueOf的一种更为简洁的替代,在EnumSet中使用并流行起来。

getInstance----返回的实例是通过方法的参数来描述的。

newInstance----和getInstance一样,但newInstance能够确保返回的每个实例都与所有其他实例不同。

getType----和getInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型。

newType----和newInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型。

23be00420ee0eadac754162983817fde.png

第2条 遇到多个构造器参数时要考虑用构建器

静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。

第三种替代方法,即能保证像重叠构造器模式那样的安全性,也能保证像JavaBeans模式那么好的可读性。这就是Builder模式的一种形式。不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器(或者静态工厂),得到一个builder对象。让后客户端在builder对象上调用类似于setter的方法,来设置每个相关的可选参数。最后客户端调用无参的builder方法来生成不可变的对象。

其实,像SpringBoot启动类就是个典型的例子:

public class Application extends SpringBootServletInitializer {

public static void main(String[] args) throws Exception {

//使用构建器创建SpringApplication对象

SpringApplication springApplication = new SpringApplicationBuilder()

.bannerMode(Banner.Mode.CONSOLE)

.initializers(ApplicationContextInitializerImpl.instance())

.sources(Application.class)

.build();

springApplication.run();

}

}

第3条 用私有构造器或者枚举类型强化Singleton属性

实现Singleton有两种方法。这两种方法都要把构造器保持为私有的,并导出公有的静态成员,以便允许客户端能够访问该类的唯一实例。

实现Singleton还有第三种方法。只编写一个包含单个元素的枚举类型:

private enum Elvis {

INSTANCE;

public void leaveTheBuilding(){...}

}

第4条 通过私有构造器强化不可实例化的能力

其实就像一些工具类,我们不想让其他用户创建该类对象,也不想被其他类继承,我们只要把这个类的构造器私有化,他就不能被实例化了。

第5条 避免创建不必要的对象

一般来说,最好能重用对象而不是在每次需要的时候就创建一个相同功能的新对象。

对于同时提供了静态工厂方法和构造器的不可变类,通常可以使用静态工厂方法而不是构造器,以避免创建不必要的对象。因为构造器在每次被调用的时候都会创建一个新的对象,而静态工厂方法只会创建一个。

要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。

当你应该重用现有对象的时候,请不要创建新的对象。

第6条 消除过期的对象引用

清空过期引用的另一个好处是,如果它们以后又被错误地解除引用,程序就会立即抛出空指针异常,而不是悄悄地错误运行下去。尽快地检测出程序中的错误总是有益的。

一般而言,只要类是自己管理内存,程序员就应该警惕内存泄漏问题。一旦元素被释放掉,则该元素中包含的任何对象引用都应该被清空。

内存泄漏的另一个常见来源是缓存。

内存泄漏的第三个常见来源是监听器和其他回调。确保回调立即被当做垃圾回收的最佳方法是只保存它们的弱引用。

第7条 避免使用终结方法

终结方法通常是不可预测的,也是很危险的,一般情况下是不必要的。使用终结方法会导致行为不稳定,降低性能,以及可移植性问题。

显示终止方法的典型例子是InputStream、OutputStream和java.sql.Connection上的close方法。显示的终止方法通常与try-finally结构结合起来使用,以确保及时终止。在finally子句内部调用显示的终止方法,可以保证即使在使用对象的时候有异常抛出,该终止方法也会执行。

你应该在一个try块中终结子类,并在相应的finally块中调用超类的终结方法。这样做可以保证:即使子类的终结过程抛出遗产,超类的终结方法也会得到执行。

072016f48822596f1f77d5676848c359.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

因果图-交通一卡通自动充值软件系统-实例分析

因果图法测试用例的设计步骤 &#xff08;1&#xff09;确定软件规格(需求)中的原因和结果 &#xff08;2&#xff09;确定原因和结果之间的逻辑关系 &#xff08;3&#xff09;确定因果图中的各个约束(constraints) &#xff08;4&#xff09;画出因果图并转换为决策表 &…

如何区分电梯卡为id卡ic卡_电梯刷卡系统基本属性

电梯刷卡控制系统的发展是十分迅速的&#xff0c;在这点上相信大家都有所体会。但是为了节约成本费用&#xff0c;很多地产商都是安装的基本常见的电梯刷卡控制系统&#xff0c;这种常见的电梯&#xff0c;能够满足基本上的用户需求&#xff0c;在零件上面也是能够与大多数的零…

前端校验和后端校验区别

前台验证数据格式 后台验证的是数据的正确性 当下流行的系统架构方案中&#xff0c;前端和后端都是分离开的。 目的&#xff1a;① 为了方便前端开发人员和后端开发人员可以同时开发&#xff1b;② 前后端分离也使得前后端的代码可以分开进行管理&#xff0c;方便了各自的版…

socket timeout是什么引起的_MySQL C API 参数 MYSQL_OPT_READ_TIMEOUT 的一些行为分析

作者&#xff1a;戴岳兵MYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客户端中用来设置读取超时时间的参数。在 MySQL 的官方文档中&#xff0c;该参数的描述是这样的&#xff1a;MYSQL_OPT_READ_TIMEOUT (argument type: unsigned int *)The timeout in seconds for each attempt t…

Python操作文件,报FileNotFoundError: [Error 2] No such file or directory错误

python操作文件时&#xff0c;报No such file or directory错误。 多次检查目录、文件名、语法都是对的。 折腾一番后&#xff0c;打开文件所在文件夹&#xff0c;并显示所有文件后缀名&#xff0c;才发现此文件并没有txt后缀名 解决方法&#xff1a; 添加文件的.txt后缀名&a…

练习ddt-file_data时,报错UnboundLocalError local variable ‘value‘ referenced before assignment

错误原因就是&#xff0c;在xx.yml中的内容无效 更改之前&#xff1a; 更改之后&#xff1a; 注意冒号后面要有空格 改完之后运行就能正确读取到了

卷积神经网络原理_人脸识别背后,卷积神经网络的数学原理原来是这样的

在自动驾驶、医疗以及零售这些领域&#xff0c;计算机视觉让我们完成了一些直到最近都被认为是不可能的事情。卷积神经网络可能是这一巨大成功背后的关键组成模块。这次&#xff0c;我们将要使用卷积神经网络的思想来拓宽我们对神经网络工作原理的理解。简介过去我们接触到了密…

负载均衡策略_常见的负载均衡策略

轮询(Round Robin)&#xff1a; 这种方法就会将收到的请求循环分配到服务器集群中的每台机器&#xff0c;即有效服务器。如果使用这种方式&#xff0c;所有的标记进入虚拟服务的服务器应该有相近的资源容量以及敷在相同的应用程序。如果所有的服务有相同或者相近的性能那么选择…

白盒测试-修正条件判定覆盖

当程序中的判定语句包含多个条件时&#xff0c;运用多条件覆盖方法进行测试&#xff0c;其条件取值组合数目是非常大的。 修正条件判定覆盖要求在一个程序中每一种输入输出至少得出现一次&#xff0c;在程序中的每一个条件必须产生所有可能的输出结果至少一次&#xff0c;并且…

springboot整合shiro_Springboot整合Shiro:简洁的身份认证

简单的web应用进行身份认证的流程&#xff1a;1.对未认证的用户请求进行拦截&#xff0c;跳转到认证页面。2.用户通过用户名密码及其他凭证进行身份认证&#xff0c;认证成功跳转成功页面&#xff0c;认证失败提示相关失败信息。根据流程&#xff0c;采用shiro进行快速开发。1.…

2024年【安全生产监管人员】考试及安全生产监管人员模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【安全生产监管人员】考试及安全生产监管人员模拟考试题库&#xff0c;包含安全生产监管人员考试答案和解析及安全生产监管人员模拟考试题库练习。安全生产模拟考试一点通结合国家安全生产监管人员考试最新大纲…

PICT工具安装使用

1、安装PICT 通过下载安装包pict33.msi&#xff0c; 链接&#xff1a;https://pan.baidu.com/s/1YWIA5XLNI0MMFkiQ-EqZ9w 提取码&#xff1a;ho7g 解压安装&#xff0c;安装成功后验证&#xff1a;打开cmd命令终端&#xff0c;输入pict显示如下即证明安装成功。 2、新建Mod…

茜在人名可以读xi吗_甘肃中专学校:初中毕业可以读大专吗?

初中毕业到兰州中专学校可以读大专吗?许多学生因为成绩的关系可能没能上普通高中&#xff0c;但是他们现在还不具备任何的专业知识和能力进入社会。很多孩子都想通过读大专具备进入社会的能力&#xff0c;那么初中毕业的学生是否能够读大专呢?成人高考初中毕业之后是可以读大…

sql backup database备份d盘_SQL数据库备份概述

数据库备份方式概述为了防止意外删除&#xff0c;自然灾害等造成的损失&#xff0c;数据库备份是必须要的。数据库备份还可以用于mirror&#xff0c;replication等过程。了解数据库备份的原理对于处理数据库备份尤为重要。以下关于备份的概述只是前段时间兴起而写&#xff0c;由…

选择嵌套_如何优雅地在JavaScript中访问嵌套对象

在JavaScript中访问嵌套对象以超酷的方式安全地访问JavaScript中的嵌套对象JavaScript是惊人的&#xff0c;我们都知道。但是JavaScript中的一些东西真的很奇怪&#xff0c;它们让我们大开眼界。其中一个问题是当您尝试访问嵌套对象时与此错误的对抗&#xff0c;无法读取未定义…

迭代器 java_百战程序员:Java设计模式之迭代器模式

迭代器是针对集合对象而生的&#xff0c;对于集合对象而言&#xff0c;必然涉及到集合元素的添加删除操作&#xff0c;同时也肯定支持遍历集合元素的操作&#xff0c;我们此时可以把遍历操作也放在集合对象中&#xff0c;但这样的话&#xff0c;集合对象就承担太多的责任了&…

postman-常见问题解决方案记录

1、 Response body:Containing string为中文 Response body:Containing string:为中文时&#xff0c;转换为unicode编码&#xff0c;并添加转义符。 2、get方式与post请求使用环境变量 post方式请求&#xff0c;请求体中包含有环境变量&#xff0c;引用方法&#xff1a; JSON格…

批发电脑配件_2019年10月电脑配件表

当前电脑主要配件的批发价&#xff0c;不面向零售哦&#xff01;下面给大家介绍一下想获得详细报价&#xff0c;持续为您更新想了解电脑系统重装请回复&#xff1a;重装系统电脑由于windows10更新卡顿请回复&#xff1a;windows 10笔记本电脑购买常识请回复&#xff1a;笔记本电…

uniapp光标自动定义到文本框_word如何自动生成毕业论文目录!

一篇word文档&#xff0c;内容有大的章&#xff0c;小的节。如何把章节抽出来生成目录&#xff1f;WORD →点击需要插入的地方 → 插入菜单 → 索引和目录 → 目录 → 确定目录通常是长文档不可缺少的部分&#xff0c;有了目录&#xff0c;用户就能很容易地知道文档中有什么内容…

计算机基础word-常见问题

问题1&#xff1a;艺术字样式不一致&#xff0c;为&#xff1a; 不是原来的&#xff1a; 解决方案&#xff1a;将原来word 文件-另存为-保存类型为&#xff1a;Word97-2003文档&#xff0c;重新打开即可。 问题2&#xff1a;word分栏 第一栏没满&#xff0c;第二栏有内容。 解…