你不必重新改写应用程序也能利用Java 5的新功能。我们为你介绍不必改写大量代码就能实现更新的方法。

你曾经得到一段以Java 1。4或更早版本编写的代码,并希望改写它以进行开发吗?这段代码当然能够在Java SE 5上正常运行,但详细了解Java SE 5的新功能会使接下来的开发过程更加顺利。

下面我们来了解一些应用那些功能的简单实例,以及如何以最小的争论来介绍它们。

我们首先从StringBuffer类开始,你可以在任何代码中找到这个连接字符串的类。下面是它的一个典型应用:

StringBuffer sb=new StringBuffer();
sb。
append("Some strings")
…
sb。append(someMethod());
String result=sb。toString();

StringBuffer看起来没什么特别,但它有一个难解的语义;它是线程安全的,所以你每次调用它的一个方法,都必须为它本身获得一个同步锁。

现在,在大多数类型代码中,可能你不会有两个应用同样StringBuffer的线程,但StringBuffer仍然需要同步锁,这需要一小段时间。输入JavaSE 5的StringBuilder,它与StringBuffer相同,只有一点不同:它不是线程安全类,因此不需要获得同步锁。

这是一个细微的性能改进,但执行起来很简单。

StringBuilder sb=new StringBuilder();

所有的其它方法与StringBuffer一样。按惯例,对于新代码,你应该使用StringBuilder,除非字符串确实由多线程组成。

如果你的代码由一系列‘myString=myString+appendString;’类型的操作构成,那么你的确需要改变它。在Java中,‘+’运算符将字符串串联起来,因为Java字符串不可改变,Java编译器在后台重写它,建立一个StringBuffer,在缓冲器中进行串联并返回结果字符串。

如果你在进行实际的字符串处理,你就希望用StringBuilder来代替它,使其更加简洁。只有一种情况你不希望那样做:调试或日志代码:

System。out。println("Got "+someInteger+" and "+someString+" on "+someDate

你不必优化它,但是Java SE 5推出了一个你可能希望使用的方法printf,使打印与格式化输出更加方便。

下面的代码与printf等价:

System。out。printf("Get %d and %s on %tc%n",someInteger,someString,someDate

如果你熟悉C语言的printf,对上面的代码就不会陌生。

第一个自变量是一个格式化字符串,它使用%表示如何对下面的一个自变量进行格式化;因此%d意思是把第一个自变量打印为数字;%s指把第二个自变量打印为字符串,%c指把第三个自变量打印成格式化的日期。由于Java SE 5支持可变自变量,所以你可以向printf提交任何数量的自变量;而且它的格式化字符串指示也比C语言灵活。

例如,你可以通过引用自变量的目录来多次引用一个自变量:

System。out。printf("Get %d and %s on %tc, that's %1$d%n",someInteger

%1$d部分很重要。如果%后面是自变量的数字目录,以$结尾,接着是格式化指示,它就从那个特殊的自变量取值。

结尾处的%n生成一个换行符;如果你熟悉C语言,就知道用可插入一个新行,因为%n生成一个独立于平台的换行符,而不是。查看Sun的Java文件了解格式化指示的全部内容。它是在printf中唯一被调用的Formatter类,你也可以在自己的代码中使用。

可变自变量是Java 5的新功能,如果你发现代码中全是为提交自变量而建立的数组,就可以使用它。如:

process("print",new String[]);

这里的过程方法(process method)应该为:

private void process(String cmd,String[] args) {
if(cmd。
equals("print")) {
for(int i=0;I。

全部