创建和销毁对象(第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 –创建和销毁对象相关推荐

  1. java创建和销毁一个对象_有效的Java –创建和销毁对象

    java创建和销毁一个对象 创建和销毁对象(第2章) 这是Joshua Blochs的< 有效的Java>第2章的简短摘要.我仅包括与自己相关的项目. 静态工厂(项目1) 静态工厂与构造函 ...

  2. Effective Java 创建和销毁对象 2.遇到多个构造器参数时要考虑用构建器

    静态工厂跟构造器都有一个共同的局限性:不能很好的扩展到大量的参数. 例: package com.example.yancy.yancy; /**  * Created by yancy on 201 ...

  3. 《Effect Java》学习笔记1———创建和销毁对象

    第二章 创建和销毁对象 1.考虑用静态工厂方法代替构造器 四大优势: i. 有名称 ii. 不必在每次调用它们的时候都创建一个新的对象:   iii. 可以返回原返回类型的任何子类型的对象: JDBC ...

  4. 《Effective Java》学习笔记 第二章 创建和销毁对象

    第二章 创建和销毁对象 何时以及如何创建对象,何时以及如何避免创建对象,如何确保他们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作. 1 考虑用静态工厂方法代替构造器 一般在某处获取一 ...

  5. Effective Java:创建和销毁对象

    前言: 读这本书第1条规则的时候就感觉到这是一本很好的书,可以把我们的Java功底提升一个档次,我还是比较推荐的.本博客是针对<Effective Java>这本书第2章所写的一篇读书笔记 ...

  6. Effective Java(1)-创建和销毁对象

    Effective Java(1)-创建和销毁对象 转载于:https://www.cnblogs.com/Johar/p/10556218.html

  7. [Effective Java]第二章 创建和销毁对象

    第一章      前言 略... 第二章      创建和销毁对象 1.            考虑用静态工厂方法代替构造器 创建对象方法:一是最常用的公有构造器,二是静态工厂方法.下面是一个Bool ...

  8. Effective Java (3rd Editin) 读书笔记:1 创建和销毁对象

    1 创建和销毁对象 Item 1:考虑用静态工厂方法取代构造器 public static Boolean valueOf(boolean b) {return (b ? TRUE : FALSE); ...

  9. Effective Java读书笔记---二、创建和销毁对象

    二.创建和销毁对象 何时以及如何创建对象, 何时以及如何避免创建对象, 如何确保它们能够适时地销毁, 如何管理对象销毁之前必须进行的各种清理动作 1.用静态工厂方法代替构造器 优势: 它们有名称 不必 ...

最新文章

  1. bat启动/停止oracle服务
  2. MMDetection V2.0发布!速度精度全面提升,现有检测框架最优
  3. KubeEdge — Overview
  4. Eclipse-配置workspace路径
  5. nyoj1306海拔
  6. SVM(一) 问题的提出
  7. LogBack 日志等级设置无效,原因竟然是因为这个?!
  8. 我的世界手机版javaui材质包_传奇世界有元神怀旧版下载-传奇世界有元神怀旧版手机下载v1.0...
  9. eas bos 常用代码
  10. matlab好看的字体,[转载]最合适写代码的字体
  11. Flash游戏开发必备书籍
  12. 就业、养老、住房、出行等领域稳步前行 这一年,民生改善实实在在
  13. 关于信号发生器的功能和参数介绍(二)
  14. 去除WordPress网站链接中“category”的四种方法
  15. Android,linux常用资源下载链接
  16. slam初学(一)——Kdevelop的安装及汉化
  17. 什么软件可以下载地形图?地形图下载软件推荐
  18. C/C++ bind函数应用详解
  19. oracle 中n次方函数,oracle中常用函数大全
  20. 网络抓包与流量在线分析系统的设计与实现-基于libpcap在MacOS上实现 记录这愉快(DT)的一周

热门文章

  1. 信息时代与人工智能时代的教育变革
  2. 最全三大框架整合(使用映射)——Dept.hbm.xml
  3. 动态网页开发基础【笔记】
  4. SpringCloudConfig整合Nacos
  5. 2016蓝桥杯省赛---java---B---1(煤球数目)
  6. android微信分享之视频、URL地址、表情分享
  7. discuz 版块导航function_forumlist.php,Discuz! X2“扩建”左侧版块导航 让社区层次一目了然...
  8. 《线性代数及其应用》
  9. FAT12中,如何定位大于一个扇区(512B)的文件内容
  10. 弱投影模型_通过投影增强数据模型