摘要:
第7条 避免使用终结方法 终结方法(finalizer)通常是不可预测的,也是很危险地,一般情况下是不必要的。 终结方法的缺点在于不能保证会被及时地执行。 Java语言规范不仅不保证终结方法会被及时地执行,而且根本就不会保证它们会被执行。 使用终结方法有一个非常严重的(server)性能损失。 显示的终止方法通常与try-finally结构结合起来使用,以确保及时终止。 总之,除非是作为安全网,或者是为了终止非关键得本地资源,否则请不要终结方法。 阅读全文
摘要:
第6条 消除过期的引用对象 所谓过期引用是指永远也不会再被解除的引用。 一旦对象引用已经过期,只需清空这些引用即可。 public Object pop() { if (size == 0) { throw new EmptyStackException(); } Object result = elements[--size]; elements[size] = null; return result; } 对于每一个对象引用,一旦程序不需要它,就把它清空。其实没必要这么做。清空对象引用应该是一种例外,而不是一种规范行为。 消除过期引用的最... 阅读全文
摘要:
第5条 避免创建不必要的对象 一般来说,最好能重用对象而不是在每次需要的时候就创建一个相同功能的对象。 反面例子: String s = new String("stringette"); // DON'T DO THIS! 对于同时提供了静态工厂方法和构造器都不可变类,通常可以使用静态工厂方法而不是构造器。例如,静态工厂方法Boolean.valueOf(String)几乎总是优先于构造器Boolean(String)。 除了重用不可变对象之外,也可以重用那些已知不会被修改的可变对象。 适配器是指这样一个对象:它把功能委托给一个后备对象,从而为后备对象提供一个可以 阅读全文
摘要:
第4条 通过私有构造器强化不可实例化的能力 只包含静态方法和静态域的工具类。 企图通过将类做成抽象类来强制该类不可被实例化是行不通的。该类可以被子类化,并且该子类也可以被实例化。 // Noninstantiable utility class public class UtilityClass { // Suppress default constructor for noninstantiability private UtilityClass() { throw new AssertionError(); } ... // Remainer om... 阅读全文
摘要:
第3条 用私有构造器或者枚举类型强化Singleton属性 Singleton指仅仅被实例化一次的类。Singleton通常被用来代表那些本质上唯一的系统组件,比如窗口管理器或者文件系统。 方法一: // Singleton with public final field public class Elvis{ public static final Elvis INSTANCE = new Elvis(); pirvate Elvis() {} public void leaveTheBuilding() {....} } 一旦Elvis类被实例化,只会存在一个... 阅读全文
摘要:
第2条 遇到多个构造器参数时要考虑用构建器 静态工厂和构造器有个共同的局限性: 它们都不能很好的扩展到大量的可选参数。 JavaBeans 模式自身有着严重的缺点: 构造过程被分解到了几个调用中,在构造过程中JavaBean可能处于不一致的状态。 JavaBeans模式阻止了把类做成不可变得可能。 Builder模式:不直接生产想要的对象,而是让客户端利用所有必要的参数调用构造器(或者静态工厂),得到一个builder对象。然后客户端再builder对象上调用类似于setter方法,来设置每个相关的可选参数。最后,客户端调用无参的build方法来生产不可变对象。 示例: // Bu... 阅读全文
摘要:
第1条 考虑用静态工厂方法代替构造器 对于类而言,为了让客户端获取自身都一个实例,最常用的方法是提供一个公有地构造器。还有一个方法:提供一个公有的静态工厂方法(static factory method)。 示例1: 将boolean基本类型值转换成一个Boolean对象引用。 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 静态工厂方法都优势: 一。 静态方法都有名称。例如:构造器BigInteger(int, int, Random)返回的Big... 阅读全文
摘要:
5 Standard I/O Library (标准I/O库) 5.1 Introduction (介绍) The standard I/O library handles such details as buffer allocation and performing I/O in optional-sized chunks, obviating our need to worry about using the correct block size. (标准I/O库处理像缓存分配,在可选的块间执行等细节,省却我们需要选择使用正确的块大小的担心。) 5.2 Streams and FI... 阅读全文
摘要:
4.18 File Times (文件时间) Field Description Example s(1) option st_atime last-access time of file data read -u st_mtime last-modification time of file data write default st_ctime last-change time of i-node status chmod, chown -c Note that the system does not ma... 阅读全文
摘要:
4.10 Sticky Bit (sticky位) If the bit is set for a directory, a file in the directory can be removed or renamed only if the user has write permission for the directory and one of the following: Owns the file; Owns the directory; Is the superuser. (如果一个目录设置拉sticky位,只有拥有目录的写权限和文件的所有者,目录的所有者或者超级管理员可以移出. 阅读全文