有效的Java –创建和销毁对象
创建和销毁对象(第2章)
这是Joshua Blochs的《 有效的Java》第2章的简短摘要。我仅包括与自己相关的项目。
静态工厂(项目1)
静态工厂与构造函数的一些优点:
- 工厂方法的名称为构造函数添加了描述
- 他们可以返回预先构造的对象,而不必总是返回new。
- 他们可以返回声明的返回类型的任何子类型,甚至是非公共类。
仅使用静态工厂(例如,使用私有构造函数)的主要缺点是无法对该类进行子类化。
用构造器代替具有许多参数的构造器(项目2)
调用具有许多参数的构造函数可能很麻烦,因为它需要查看方法声明以了解参数代表什么。 这使得读取和调用这样的构造函数都很困难。
一种替代方法是使用无参数构造函数构造一个对象,然后使用设置器设置所需的字段(JavaBean模式)。 这种方法的缺点是,在设置不变式时,对象可能处于不一致状态。 此外,由于您提供的是setter,因此对象是不可变的,因此很难保证线程安全。
建筑商是第二种选择,两全其美。 生成器首先以可读和紧凑的方式“收集”参数,然后通过首先验证不变量是正确的来实例化对象。
由于建造者对于小班制可能会显得过大,因此本书建议将其用于具有四个以上参数的班级。 请注意,对于构造函数和静态工厂而言,构造函数都是替代方法。
与Singelton的一些陷阱(项目3)
- 如果singelton未实现接口,则Singeltons使其难以测试其客户端,因为您无法模拟出singelton。
- 如果将singeltons设置为可序列化的 ,则它们不再是singeltons,除非在反序列化时特别注意。
- 实现单例的最佳方法是使用单元素枚举类型,这避免了序列化的问题。
避免创建不必要的对象(项目5)
创建对象时应小心。 重复使用昂贵的物品,但不要以防御性复制为代价(出于不变性–项目39)。 应优先于盒装基元使用基元,并且在执行自动装箱以消除不必要的对象创建时要格外小心。
消除过时的对象引用(项目6)
这些书显示了一个堆栈示例,其中弹出项目不会从内部数组中清空,从而使它们成为无法进行垃圾回收的过时引用。 内存泄漏和过时引用的公共来源:
- 每当类管理自己的内存时 ,程序员都应该对内存泄漏发出警报。
- 忘记缓存条目。 考虑将
WeakHashMap
用于缓存,该缓存仅在外部引用条目时才保存项目。 - 缺少注销的监听器和回调 。 同样在这里可以使用
WeakHashMap
。
翻译自: https://www.javacodegeeks.com/2017/05/effective-java-creating-destroying-objects.html
有效的Java –创建和销毁对象相关推荐
- java创建和销毁一个对象_有效的Java –创建和销毁对象
java创建和销毁一个对象 创建和销毁对象(第2章) 这是Joshua Blochs的< 有效的Java>第2章的简短摘要.我仅包括与自己相关的项目. 静态工厂(项目1) 静态工厂与构造函 ...
- Effective Java 创建和销毁对象 2.遇到多个构造器参数时要考虑用构建器
静态工厂跟构造器都有一个共同的局限性:不能很好的扩展到大量的参数. 例: package com.example.yancy.yancy; /** * Created by yancy on 201 ...
- 《Effect Java》学习笔记1———创建和销毁对象
第二章 创建和销毁对象 1.考虑用静态工厂方法代替构造器 四大优势: i. 有名称 ii. 不必在每次调用它们的时候都创建一个新的对象: iii. 可以返回原返回类型的任何子类型的对象: JDBC ...
- 《Effective Java》学习笔记 第二章 创建和销毁对象
第二章 创建和销毁对象 何时以及如何创建对象,何时以及如何避免创建对象,如何确保他们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作. 1 考虑用静态工厂方法代替构造器 一般在某处获取一 ...
- Effective Java:创建和销毁对象
前言: 读这本书第1条规则的时候就感觉到这是一本很好的书,可以把我们的Java功底提升一个档次,我还是比较推荐的.本博客是针对<Effective Java>这本书第2章所写的一篇读书笔记 ...
- Effective Java(1)-创建和销毁对象
Effective Java(1)-创建和销毁对象 转载于:https://www.cnblogs.com/Johar/p/10556218.html
- [Effective Java]第二章 创建和销毁对象
第一章 前言 略... 第二章 创建和销毁对象 1. 考虑用静态工厂方法代替构造器 创建对象方法:一是最常用的公有构造器,二是静态工厂方法.下面是一个Bool ...
- Effective Java (3rd Editin) 读书笔记:1 创建和销毁对象
1 创建和销毁对象 Item 1:考虑用静态工厂方法取代构造器 public static Boolean valueOf(boolean b) {return (b ? TRUE : FALSE); ...
- Effective Java读书笔记---二、创建和销毁对象
二.创建和销毁对象 何时以及如何创建对象, 何时以及如何避免创建对象, 如何确保它们能够适时地销毁, 如何管理对象销毁之前必须进行的各种清理动作 1.用静态工厂方法代替构造器 优势: 它们有名称 不必 ...
最新文章
- bat启动/停止oracle服务
- MMDetection V2.0发布!速度精度全面提升,现有检测框架最优
- KubeEdge — Overview
- Eclipse-配置workspace路径
- nyoj1306海拔
- SVM(一) 问题的提出
- LogBack 日志等级设置无效,原因竟然是因为这个?!
- 我的世界手机版javaui材质包_传奇世界有元神怀旧版下载-传奇世界有元神怀旧版手机下载v1.0...
- eas bos 常用代码
- matlab好看的字体,[转载]最合适写代码的字体
- Flash游戏开发必备书籍
- 就业、养老、住房、出行等领域稳步前行 这一年,民生改善实实在在
- 关于信号发生器的功能和参数介绍(二)
- 去除WordPress网站链接中“category”的四种方法
- Android,linux常用资源下载链接
- slam初学(一)——Kdevelop的安装及汉化
- 什么软件可以下载地形图?地形图下载软件推荐
- C/C++ bind函数应用详解
- oracle 中n次方函数,oracle中常用函数大全
- 网络抓包与流量在线分析系统的设计与实现-基于libpcap在MacOS上实现 记录这愉快(DT)的一周
热门文章
- 信息时代与人工智能时代的教育变革
- 最全三大框架整合(使用映射)——Dept.hbm.xml
- 动态网页开发基础【笔记】
- SpringCloudConfig整合Nacos
- 2016蓝桥杯省赛---java---B---1(煤球数目)
- android微信分享之视频、URL地址、表情分享
- discuz 版块导航function_forumlist.php,Discuz! X2“扩建”左侧版块导航 让社区层次一目了然...
- 《线性代数及其应用》
- FAT12中,如何定位大于一个扇区(512B)的文件内容
- 弱投影模型_通过投影增强数据模型