background image

Java 语言详解:Java 技能优化集锦

通用篇 
     “

通用篇 讨论的问题适合于大多数 Java 应用。

  不用 new 关键词创建类的实例
  用 new 关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如
果一个对象实现了 Cloneable 接口,我们可以调用它的 clone()方法。clone()方法不会调用任
何类构造函数。
  在使用设计模式 (Design Pattern)的场合,如果用 Factory 模式创建对象,则改用
clone()方法创建新的对象实例非常简单。例如,下面是 Factory 模式的一个典型实现:
public static Credit getNewCredit() {

  return new Credit();

  }

  改进后的代码使用 clone()方法,如下所示:

  private static Credit BaseCredit = new Credit();

  public static Credit getNewCredit() {

  return (Credit) BaseCredit.clone();

  }

  上面的思路对于数组处理同样很有用。
  使用非阻塞 I/O
  版本较低的 JDK 不支持非阻塞 I/O API。为避免 I/O 阻塞,一些应用采用了创建大量
线程的办法(在较好的情况下,会使用一个缓冲池)。这种技术可以在许多必须支持并发
I/O 流的应用中见到,如 Web 服务器、报价和拍卖应用等。然而,创建 Java 线程需要相当
可观的开销。
  JDK 1.4 引入了非阻塞的 I/O 库(java.nio)。如果应用要求使用版本较早的 JDK,在这里
有一个支持非阻塞 I/O 的软件包。
  请参见 Sun 中国网站的《调整 Java 的 I/O 性能》。

   

  慎用异常
  异常对性能不利。抛出异常首先要创建一个新的对象。Throwable 接口的构造函数调用
名为 fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪
信息。只要有异常被抛出,VM 就必须调整调用堆栈,因为在处理过程中创建了一个新的
对象。
  异常只能用于错误处理,不应该用来控制程序流程。