Effective Java读书笔试之创建和销毁对象
1.考虑用静态工厂方法代替构造函数
静态工厂方法的第一个好处是,与构造函数不同,静态工厂方法有名字,接口有更好的类型表达能力。
静态工厂方法的第二个好处是,与构造函数不同,它每次被调用的时候,不要求非得创建一个新的对象,特别是对于不变对象而言,可以在被调用时返回同一个对象的引用,重用对象.
public static Boolean valueOf(boolean b){
return (b?Boolean.TRUE:Boolean.FALSE);
}
静态工厂方法的第三个好处是,与构造函数不同,它们可以返回一个子类型的对象(接口)。
2.使用私有构造函数强化singleton属性
实现singleton有两种方法,这两种方法都要把构造函数保持为private,并且提供一个公有静态成员,对外提供访问路径。
一种方法是使用公有final静态成员
public class Elvis{
public static final Elvis INSTANCE = new Elvis();
private Elvis(){
}
}
二种方法是提供一个静态工厂方法,而不是final static域。
public class Elvis{
private static final Elvis INSTANCE = new Elvis();
public static Elvis getInstance(){
return INSTANCE;
}
}
3.私有构造函数强化不可实例化的能力
有些工具类(utility class,内部成员大部是静态方法,静态属性)不希望被实例化,进行实例化也没有任何意义,可以通过让这个类定义一个显式的私有构造函数确定它不被实例化。
这种作法的一个副作用是一个类不能被继承,因为没有构造函数可以被子类调用。
4.避免创建重复的对象
对一个非可变的对象,它总是可以被重用的。
在循环中String str = new String("silly");每次循环总是会创建一个新的但是又不变的对象,很浪费;而使用String str = "silly";
则每次循环中不会创建新的对象,会重用字符串池中的"silly".
对于非可变对象可以提供静态工厂方法来重用同一个非可变对象。
5.消除过期的对象引用
如果一个对象引用被无意识地保留起来,那么垃圾回收机制不仅不会处理这个对象,而且也不会处理这个对象引用的所有其他对象。
一个例子是Stack中使用Object elements[]数组来存储元素,在pop操作时,只是return elements[--size];此时elements[--size]还是存储着对返回对象的引用,这个对象被无意识的引用在elements[--size]位置上,导致垃圾回收机制没有办法回收此元素。
修复这类问题很简单:如果对象引用过期,只需清空这些引用就可以了。
应该修改pop代码:
Object result = elements[--size];
elements[size] = null;
return result;
6.避免使用终结函数
Java虚拟机不保证终结函数会被及时地执行,而且也根据不保证它们会被执行,所以如果资源的释放依赖于终结函数执行的时间点,将是不可靠的。避免使用finalize()方法.
如果一个类的封装资源需要回收,一个方法是提供一个显式的终止方法,并要求此类的客户端在每个实例不再有用的时候调用这个方法。实例必须要记录下自己是否已经被终止,如果这个对象已终被终止之后,还被调用的话,就应该抛出IllegalStateException异常。
一个典型的实例:
InputStream和OutputStream的close()方法
显式的终止方法通常与try-finally结合起来使用,以确保及时终止,也就是说不论什么情况下,资源释放的终止函数都会被调用执行.
Foo foo = new Foo();
try{
//DO what must be done with foo
}finally{
foo.terminate();
}
分享到:
相关推荐
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
在 Java 中,创建和销毁对象是非常重要的。静态工厂方法可以代替构造器,提供了更多的灵活性和性能优势。静态工厂方法可以返回原类型的任何子类型,且可以将构建好的实例缓存起来,方便重复利用,不用每次调用都创建...
《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...
### 第二章 创建和销毁对象 这一章深入探讨了对象的生命周期管理,包括: 1. **静态工厂方法**:相比构造器,静态工厂方法有优点如可以不返回新实例、允许返回同一实例(单例)、可以有更具选择性的访问控制,并且...
总结来说,静态工厂方法在Java中提供了一种比构造方法更加灵活和高效的方式来创建对象实例,特别是在需要实例控制、性能优化或API设计简洁时。文档《effective-java.pdf》详细地探讨了静态工厂方法在设计和实现上的...
在编程领域,特别是Java开发中,"Effective Java"是一本非常经典的书籍,由Joshua Bloch撰写,书中提出了一系列最佳实践和设计原则,以帮助开发者编写出更高效、更安全的代码。根据提供的标题和描述,我们将探讨三个...
Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...
1. **第2章 创建和销毁对象** - 单例模式:讲解了如何正确实现单例类,避免多线程环境下的并发问题。 - 构造函数:强调构造函数应简洁,避免在构造过程中执行复杂操作。 - 工厂方法:介绍工厂方法模式,作为创建...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
本学习记录主要介绍了 Effective Java 3 中的静态工厂方法和 Builder 模式两部分内容。 一、静态工厂方法 静态工厂方法是指返回类实例的命名规则,例如:from、of、valueOf、instance 或 getinstance、create 或 ...
java逻辑思维笔试题Effective Java - 第三版笔记 章节索引 02 - 创建和销毁对象 03 - 所有对象通用的方法 04 - 类和接口 05 - 泛型 06 - 枚举和注释 07 - Lambda 和流 08 - 方法 09 - 通用编程 10 - 例外 11 - 并发 ...
对于这些基础知识,你需要深入理解并能够灵活运用,例如如何创建和初始化对象,何时使用抽象类和接口,以及如何利用多态提高代码的可扩展性。 其次,深入理解Java集合框架至关重要。List、Set、Queue、Map等各种...
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
《Effective Enterprise Java》是Java开发领域的一本经典著作,由著名技术专家Bill Venners编著,被广大Java开发者誉为“四大名著”之一。这本书深入探讨了在企业级Java开发中如何写出高效、可维护和易于理解的代码...
4. **可变与不可变对象(Mutable vs Immutable Objects)**: 通过示例代码展示了如何创建不可变对象,以及不可变对象的益处和实现策略。 5. **泛型(Generics)**: 书中深入讲解了Java泛型的用法,包括类型擦除、...
《Effective Enterprise Java》是一本由James Gosling、Bill Venners和Cay S. Horstmann合著的经典著作,旨在帮助Java开发者深入理解和利用企业级Java技术。这本书提供了78条具体的建议,涵盖了从设计模式到并发编程...
整体而言,Finix的精版《Effective STL》读书笔记覆盖了STL的关键知识点,包括各种容器的特性、迭代器的使用、以及如何高效地操作和管理容器。这对于任何想要深入了解并有效应用STL的C++程序员来说,都是宝贵的资源...