`
lt200819
  • 浏览: 186219 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

walter的《Effective JAVA》 读书笔记-第2章 创建和销毁对象

 
阅读更多

 

创建和销毁对象

转载请注明出处:http://lt200819.iteye.com/blog/1707699

1条:考虑用静态工厂方法代替构造器(静态工程方法不同于设计模式中的工厂方法)

静态工厂方法与构造器不同的优势在于:

1.它们有名称;

2.不必每次调用它们的时候都创建一个新的对象,类似单例模式。

3.可否返回原返回类型的任何子类型的对象。(服务提供者框架)

4.在创建泛型示例时,他们使代码变得更加简洁。(JDK1.6还没实现)

缺点:

1.类如果不含有公有的或者受保护的构造器,就不能被子类化(不能被继承,因为super()无法调用)

2.与其他的静态方法实际上没任何区别。

惯用名称:valueOf; of; getInstance; newInstance; getType;newType

第一反应用静态工厂

 

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

如果类的构造器或者静态工厂中具有多个参数,设计这种类时,Builder模式就是种不错的选择,特别是当大多数参数都是可选的时候。与使用传统的重叠构造器模式相比,使用Builder模式的客户端代码将更易于阅读和编写,构建器也比JavaBeans更加安全(JavaBeans需要考虑线程同步)。

 

3条:用私有构造器或者枚举类型强化“单例”属性

包含单个元素的枚举类型实现单例,在功能上与公有域方法相近,但是它更加简洁,无偿地提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候。虽然这种方法还没有广泛使用,但是单元素的枚举类型已经成为实现Singleton的最佳方法。

 

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

 

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

静态初始化块初始化常量,可以用延迟初始化优化

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

 

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

栈内存泄露:只要类时自己管理内存,程序员就应该警惕内存泄露问题

缓存内存泄露:当所要的缓存项的生命周期是又该键的外部对象引用而不是值决定时,可以使用WeakHashMap来缓存。

监听器和回调:如果你实现了一个API,客户端在这个API中注册回调,却没有显示地取消注册,那么除非你采取某些动作,否则它们就会积聚。最佳方法是使用弱引用。

 

7:避免使用终结方法

除非是作为安全网,或者是为了终止非法关键的本地资源,否则请不要使用终结方法。在这些很少见的情况下,既然使用了终结方法,就要记住调用 super.finalize。如果用终结方法作为安全网,要记得记录终极方法的非法用法。最后,如果需要把终结方法与公有的非final类关联起来,可以考虑使用终结方法守卫者,以确保即使子类的终结方法未能调用super.finalize,该终结方法也会被执行。

转载请注明出处:http://lt200819.iteye.com/blog/1707699

分享到:
评论

相关推荐

    java lecture note(Java学习笔记)

    #### 第二周:类与对象 - 引入类的概念,理解类与对象的关系。 - 学习如何创建类、实例化对象以及调用方法。 #### 第三周至第四周:面向对象编程(OOP)原理 - **继承**:理解类的继承机制,掌握super关键字的使用。 ...

    Walter-j2me-java.zip_open

    【标题】"Walter-j2me-java.zip_open" 指的是一个开源的Java J2ME游戏项目,名为"Walter"。J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于开发在移动设备、嵌入式系统上的应用程序。这个项目的源...

    c++面向对象程序设计(第6版)Walter Savitch 书中的 c++题库

    《C++面向对象程序设计(第6版)》是由Walter Savitch著,佟俐鹃改编的教材,这本书深入浅出地介绍了C++语言的面向对象编程思想。书中的"test bank"是配套的自测题库,包含了丰富的练习题和答案,旨在帮助读者巩固...

    C++面向对象程序设计第六版(Walter Savitch)

    《C++面向对象程序设计第六版》是由著名计算机科学家Walter Savitch编著的一本经典教材,这本书深入浅出地介绍了C++编程语言的核心概念,特别是面向对象编程(OOP)的思想和技术。作为第六版,它包含了最新的C++标准...

    C++面向对象程序设计(第6版)(美)Walter Savitch著,周靖译

    《C++面向对象程序设计(第6版)》是由美国著名计算机科学家Walter Savitch撰写,周靖翻译的一本经典教材。这本书深入浅出地介绍了C++编程语言,特别是其面向对象特性。面向对象编程(Object-Oriented Programming, ...

    ABSOLUTE JAVA™ 5 th Edition (2013)

    第2章“控制台输入与输出”讲解了如何在控制台上读取用户输入和显示程序输出,这是所有程序的基本交互方式。 第3章“流程控制”涉及条件语句(如if-else)和循环结构(如for、while),让程序能够根据条件执行不同...

    Absolute Java 6th 第6版 pdf 0分

    《绝对Java》第六版是一本全球发行的专业编程教材,由Walter Savitch教授撰写,并由肯尼思·莫克(Kenrick Mock)参与贡献。该书适用于初学者到中级水平的学习者,旨在通过实践案例帮助读者掌握Java编程的基础知识与...

    C++面向对象程序设计(第6版)Walter Savitch著 周靖译 课后习题答案

    《C++面向对象程序设计(第6版)》是由著名计算机科学家Walter Savitch撰写,中国计算机专家周靖翻译的一本经典教材。本书深入浅出地介绍了C++语言的面向对象编程思想,是学习C++的必备参考资料。课后习题答案部分则...

    Java编程培训

    - 《Servlet与JSP核心编程(第二版)》【美】Elizabeth Robson著 - 《JSP 2.0技术手册》 - 《JavaScript与HTML实用教程》 - 《JavaScript从入门到精通》 ##### 4. XML解析 - **目标**:了解并掌握XML的四种解析...

    word版本C++面向对象程序设计(第五版)walter Savitch part three

    《C++面向对象程序设计(第五版)》是由著名计算机科学家Walter Savitch撰写的一本经典教材,专门针对C++的面向对象编程进行深入讲解。这本书的第五版更新了部分内容,适应了现代C++的发展,使得学习者能够掌握最新的...

    Walter Koechner - Solid-state laser engineering-Springer(2006).pdf

    根据提供的文件信息,“Walter Koechner - Solid-state laser engineering-Springer(2006).pdf”这一资源主要涉及激光物理、固体激光器的基础与工程应用等方面的内容。接下来将详细解析并归纳出该文件中可能包含的...

    Absolute Java 5th Edition

    2. 面向对象编程:详述Java中类和对象的定义、方法的使用、继承、接口、抽象类、多态等面向对象的核心概念。 3. 异常处理:讲解Java中的异常处理机制,包括异常类型、捕获异常、自定义异常等。 4. 集合框架:介绍...

    word版本C++面向对象程序设计(第五版)walter Savitch part two

    这本书的第二部分,即"part two",通常会涵盖C++中更为高级和面向对象的主题,包括类、对象、继承、多态、模板以及异常处理等核心概念。 1. **类与对象**:在C++中,类是定义对象的蓝图,它包含了数据成员(变量)...

    Walter-Oney---Programming-the-Microsoft-Windows-D_驱动编程_Visual_C++_

    Walter Oney - Programming the Microsoft Windows Driver Model 1st booklang: eng

    Walter Rudin-Functional Analysis (泛函分析)

    Rudin的经典教材之一,比较难,建议有一定泛函分析基础时再来看 (其实这更像一本工具书,而不是入门教材)

    java问题解决与程序设计课件

    2. **第二章:面向对象编程** Java是一种面向对象的语言,这一章将深入探讨类、对象、封装、继承、多态等核心概念。还会讲解如何创建和使用类,以及如何通过接口实现多态性。 3. **第五章:数组与集合** 在这一章...

    java开发笔记,我的开始

    `JOptionPane`是Swing中的一个类,它简化了对话框的创建和使用。例如,`showInputDialog`方法可以用来显示一个输入对话框,用于获取用户的文本输入。在示例代码中,我们看到如何使用它来请求用户输入数字或变量`x`的...

    Walter.Rudin.-.Functional.analysis.djvu

    Functional.analysis Walter.Rudin的泛函分析,):

    Walter-20200315T073438Z-001_Somebody_judge3h2_API_源码

    【标题】"Walter-20200315T073438Z-001_Somebody_judge3h2_API_源码"所指示的内容似乎是一个与某个名为"Walter"的项目相关的源代码压缩包,时间戳为2020年3月15日的7:34:38。这个项目可能涉及到一个叫做"Somebody"的...

Global site tag (gtag.js) - Google Analytics