学习一种新的编程语言比学习新的口头语言要容易得多。然而,在这两种学 习过程中,都要付出额外的努力去学习不带口音地说新语言。如果您熟悉 C 或 C++,那么学习 Java 语言并不困难,这就像是会说瑞典语的人去学丹麦语一样 。语言虽有不同,但又彼此互通。但若不够谨慎,您的口音每次都会暴露出您并 非原生语言使用者这个秘密。
C++ 程序员往往会对 Java 代码做出一些变形,而这样的举动将他们与原生 Java 语言用户清晰地区分开来。他们的代码可以无错运行,但对于原生语言用 户来说,就是有一些地方不对劲。因而原生语言用户可能会轻视非原生用户。从 C 或 C++(或者 Basic、Fortran、Scheme 等)转到 Java 语言时,您需要根除 一些习惯用语,并纠正某些发音,以便流畅地使用新语言。
在本文中,我探讨了一些往往被忽视的 Java 编程细节,因为从语义上来说 ,它们并不重要,甚至是无关紧要的。它们纯粹是风格和惯例问题。其中有些细 节有着似是而非的理由,其他一些甚至连似是而非的理由也没有。但所有这些细 节都是当今编写的 Java 代码中真实存在的现象。
这是什么语言?
让我们首先来看一段代码,其作用是将华氏温度转换为摄氏度,如清单 1 所 示:
清单 1. 一段 C 代码?
float F, C;
float min_tmp, max_tmp, x;
min_tmp = 0;
max_tmp = 300;
x = 20;
F = min_tmp;
while (F <= max_tmp) {
C = 5 * (F-32) / 9;
printf("%f\t%f\n", F, C);
F = F + x;
}
清单 1 中使用的是什么语言?很显然是 C 语言 —请等一下,让我们来看看 完整的程序,如清单 2 所示:
清单 2. Java 程序
class Test {
public static void main(String argv[]) {
float F, C;
float min_tmp, max_tmp, x;
min_tmp = 0;
max_tmp = 300;
x = 20;
F = min_tmp;
while (F <= max_tmp) {
C = 5 * (F-32) / 9;
printf("%f\t%f\n", F, C);
F = F + x;
}
}
private static void printf(String format, Object... args) {
System.out.printf(format, args);
}
}
无论您是否相信,清单 1 和清单 2 都是使用 Java 语言编写的。它们只是 以 C 语言方言(老实说,清单 1 也确实可以是 C 代码)编写的 Java 代码。 这里的几个习语标志着:编写这段代码的人是以 C 语言思考的,只是单纯地将 其翻译为 Java 语言: