快速业务通道

使用原汁原味的Java语言 - 非Java原生程序员的语言流畅性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
BM Elliotte Rusty Harol

连接字符串而非格式化字符串

多年以来,Java 语言一直没有 printf() 函数。最终,Java 5 中增加了这 个函数,有些时候能够发挥作用。具体来说,在您希望将数字格式化为特定宽度 或小数点后带有特定位数的形式时,在这种不常见的情况下,格式字符串是一种 便捷的字段特定语言。而 C 程序员往往在 Java 代码中过多地使用 printf()。 不应使用它取代简单的字符串连接。例如:

System.out.println("There were " + numErrors + " errors  reported.");

优于:

System.out.printf("There were %d errors reported.\n",  numErrors);

变体使用了字符串连接,更易于阅读,在简单的情况下更是如此,此外,由 于不存在格式字符串中的占位符和数字或变量参数的类型匹配不当的情况,出现 bug 的机会也更少。

首选后增量而非前增量

在某些位置,i++ 和 ++i 之间的差别十分显著。Java 程序员为这些位置定 义了一个具体的名称,那就是“bug”。

不应该编写依赖于前增量和后增量之间差异的代码(对于 C 语言来说也是如 此)。原因在于难以理解、易于出错。如果您发现,在您编写的代码中两者的差 别有重大影响,那么就应该重新将代码组织为独立的语句,使之不再能够影响大 局。

如果前增量和后增量之间的差别不显著 — 例如,for 循环的增量步数 — 80% 的 Java 程序员更倾向于使用后增量,只有 20% 的 Java 程序员会选择前 增量。i++ 比 ++i 更为常用。我无法评判孰是孰非,但事实就是这样。如果您 编写的代码中包含 ++i,那么任何阅读您的代码的人都要浪费时间去思考您为什 么要这样写。因而,除非有特殊的原因必须使用前增量(应该不存在必须使用前 增量的情况),否则请使用后增量。

错误处理

错误处理是 Java 编程中最令人困惑的问题之一,也是真正地将语言风格大 师与平凡开发者区分开来的一道门槛。实际上,仅仅错误处理就可以自成一篇文 章。简而言之,合理使用异常,切勿返回错误代码。

非原生语言使用者的第一类错误是返回一个表示错误的值,而不是抛出异常 。如果回溯到 Java 1.0 的年代,在 Sun 的所有程序员都充分理解了这种新语 言之前,在某些 Java 语言自己的 API 中也会看到这样的情况。例如,考虑 java.io.File 中的 delete()方法:

public boolean delete()

若文件或目录被成功删除,此方法将返回 true,否则返回 false。但最合理 的做法 应该是,在成功完成时不返回任何内容,若存在出于某些原因未能删除 的文件,则抛出异常:

public void delete() throws IOException

在方法返回错误值时,每一个方法调用都要包含错误处理代码。在大多数正 常情况下,这使得跟踪和理解方法的正常执行流变得困难。同时,如果由异常指 出错误条件,错误处理即可单独作为文件末尾处的一个代码块。如果存在更适合 处理问题的位置,甚至可将其移动到其他方法和其他类中。

这就带来了错误处理中的第二种反模式。具有 C++ 背景的程序员有时会竭力 在异常抛出后尽快处理异常。如果达到极限,可能会得到如清单 13 所示的代码 :

使用原汁原味的Java语言 - 非Java原生程序员的语言流畅性(10)

时间:2011-06-10 IBM Elliotte Rusty Harol

清单 13. 过早的异常处理

public void readNumberFromFile(String name) {    FileInputStream in;    try {      in = new FileInputStream(name);    } catch (FileNotFoundException e) {      System.err.println(e.getMessage());      return;    }    InputStreamReader reader;    try {      reader = new InputStreamReader(in

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号