我来翻译“Effective Java”_第一谈

来源:互联网 发布:mac finder添加 编辑:程序博客网 时间:2024/05/16 01:58

申明:本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作

前言:

本人(和睦)甚为无聊,为了提高英语阅读能力与Java编程能力特此翻译《Effective Java Second Edition》。英文版权完全归Joshua Bloch所有,本人翻译版权暂时归我本人所有(lj5115714@126.com)。欢迎各位转载拍砖,不过转载前需标明是“和睦翻译”,有空的话通过邮件告知我一下,最重要的地方在于不要用于任何非法的活动(一旦发现任何违法行为与我个人无关)。感谢您的合作。

为了方便各位看官阅读并理解原文含义,大部分内容将尽量采用英文直译,部分汉语后会用中文括号标记出英文原文,例如 “有效的JavaEffective Java)”,而原文中的括号将依然保留为英文括号“(...)”。翻译过程中尽量不添加个人理解成分,和睦本人的理解将采用中括号标出,例如“有效的Java【可以理解为使得Java代码与程序获得更高的性能】”。这样就保证了不会误人子弟,也给予我个人进步的机会,更给予各位看官拍砖的地方。当然,如果您有怀疑翻译有问题,欢迎购买正版图书后查找原文,请支持正版图书哦!。(我不是打广告,只是相应国家号召)。

PS

1. 为了与一般英文所区别,代码采用斜体编写

导论

本书用于帮助您实现最大化利用Java程序语言和它的基本(fundamental)库,这些库包括java.lang,java.util,并较少地涉及了java.util.concurrent库和java.io库。本书多次会提及其他的库,但是并不涵盖图形用户界面接口编程(graphical user interface programming),企业级APIenterprise APIs)或则移动设备(mobile devices)。

【和睦:即不涉及J2EEJ2ME部分。】

本书包含78项内容【可理解为中文书籍中的“节”】,这其中的每项蕴含着一条【编程的】规则。这些规则是被那些最优秀的最有经验的程序员认为是有益的。这些内容(items)被松散地(loosely)组织成十章内容,每一项都关系到一个广泛的程序设计方向(one broad aspect of software design)。本书并不打算让读者一页接着一页地读下去:【这是因为】每项内容只是或多或少地根据于它本身(each item stands on its ownmore or less)。每项内容之间是有着重要的相互参考(cross reference)作用,所以你可以很容易通过这本书计划你自己的课程【估计这句话是对某些大学教师说的,毕竟在美国的作家很希望自己的书被选为教材,这点和中国是一样的】。

Java5(Java 1.5)中添加很多新的特性。本书中的大多数章节【翻译成“章节”可能各位更容易理解一点,反正英文原文为items】采用了一些方法来使用这些新特性。一下这张表能够指引你去寻找这些新特性。

特性(feature)【具体特性含义到相应章节再做翻译】

章节(Chapter or Item)【chapter是章Item是节,各位知道去哪里找就OK了。】

Generics

Chapter 5

Enums

Items 30-34

Annotations

Items 35-37

For-each loop

Item 46

Autoboxing

Item 40,49

Varargs

Item 42

Static import

Item 19

java.util.concurrent

Items 68,69

大多数章节都配上了程序实例以便于阐述。本书的关键特征是它具有很多代码示例能够用于阐述许多设计模式与设计风格(design patterns and idioms)。适合的地方,在这个领域中它们可以相互参考作为其涉及到的工作标准([Gamma95])

许多【章】节包含一个以上个解释程序实例。例如,有时被称为反模式(antipatterns),清晰地被一个例如“永远别这么做(Never do this)”的命令(comment)所标记。在每个事例中都将解释为什么这个示例是糟糕的并且提出一个可替代的(alternative)方法。【这段话翻译的很糟糕,我个人也不是很理解。】

本书不适用于初学者:它【面向的读者】是已经适应了Java程序语言。如果您还不是,可以认真学习一本比较好的【初级Java】介绍书籍([Arnold05Sestoft05])。然而本书是被设计让任何一个具有Java语言开发工作经验的人能够获益的,【即使是】高级程序员们(advanced programmers)也应该获得精神粮食(food for thought)。【说白了,这就是Java程序界的高级内功心法+自由搏击大全】

本书中的大多数规则来源于(derive from)一些基本原理(fundamental principles)。清晰简单(clarity and simplicity)是最重要的(paramount importance)。一个模块的用户应该永远不会被它的行为(behavior)吓到【或则可以说应该具有良好的用户体验】。各个模块应该尽可能的简单但不是越小越好(本书中所使用例子,这些模块组趋向于可重复使用的软件构件(software component),从一种个别方法到一种具有多个包的复杂系统)。代码相对拷贝更应该具有重用性(reused)。当犯下错误后应该尽可能地被检测,在预定时间内完善【程序】。

然而本书中的这些规则并不能半分百保证在任何时候都能够支持,它们依据大多数主要示例(in the great majority of cases)来描绘出最好的程序实践的主要特征。你不应该盲目跟随这些规则,但是只是偶尔地违背这些规则也应该具有足够的理由(good reason)。就像大多数其他学科那样【来】学习编程的艺术,首先学会这些规则然后再学习如何去违背这些原则。

对于书中大部分内容并不涉及性能。这是关于如何清楚、正确、有用、健壮、灵活并且易于维护地书写程序。如果你能够做到这点,相对你所需要的性能而言它通常【更】简单重要((Item55))。有些章节讨论有关性能的事情(performance concerns),并且这些章节中的一些提供了性能参数。这些参数通常会随着这个短语“在我的机器上”(“On my machine”)被引入,这些参数应该以近似最优值所理解。

【这段是介绍作者的电脑配置,为了方便理解本人制图】。

类型

配置

CPU

AMD Opteron 170 dual-core

RAM

2G

JDK Version

1.6_05

OP

windows XP Professional SP2

【附加信息】该JDK版本具有两个虚拟机,【分别是】Java HotSpot ClientServer VMs【客户端与服务器】。性能参数是依据Server VMs来量化的。

当讨论Java编程语言与它的标准库的特性的时候,提及它的版本有时是必要的。为了简化本书相对官方发行版本名(release names)优先采用“工程版本序列号”(“engineering version numbers”)【以区分】。这个表罗列了工程版本号与发行版本号间的关系。

这些代码示例是完全正确的,但是它们相对完整性而已更具有可读性。它们经常性的使用来自java.utiljava.io两个包中的类。为了编辑这些类,你也许必须添加一个或更多的这些导入声明(statements):

其他样板文件几乎被省略掉。本书的Web站点,http://java.sun.com/docs/books/effective,包含每个代码示例的扩展版本,这些示例都可以编译运行。

本书中大部分【专业术语】内容采用在《The Java Language SpecificationThird Edition[JLS]》【此书的下载地址:http://download.csdn.net/detail/ljtt123/4377602】中推荐的【规范】。一些术语是值得特别提及的。这门语言【Java】支持四种类型(types):接口(interfaces(包括注释(annotations),类(classes(包括枚举(enums),数组(arrays),对象(Objects),基本数据数据类型(primitive values)。前三项可以理解为参考【或基准】类型(reference types)。类的实例和数组属于对象的一种,而基本数据类型不是对象。一个类的成员包括它的域(fields),方法(methods),成员类(member classes)和成员接口(member interfaces)。一个方法的识别标志【有人喜欢翻译为“签名”】(signature)包括它的名字和它的形式参数【中国人简称“形参”】(formal parameters);而返回类型部不属于方法的识别标志。

本书一些专业术语(terms)的阐述方式与《The Java Language Specification》【下载地址:http://download.csdn.net/detail/ljtt123/4377602】的不同。与《The Java Language Specification》不同的有如下这些,本书采用继承(inheritance)作为子类化(subclassing)的同义词(synonym)【中国大陆地区大多将二者翻译为“继承”】。为了替代针对接口(interfaces)的继承(inheritance)术语(terms),本书只是简单的陈述为一个类(class)继承(implements)一个接口(interface)或某个接口(interface)扩展了(extends)另外一个【和睦以为这样写书的好处在于能够与Java编程语言相统一】。当没有专门描述采用哪个访问级别时,本书采用这个描述关键词“package-private”【好吧,这个真不知道该怎么翻译,“私有包”?】来替代术语“默认访问”(default access)。

本书采用了一些没有在《The Java Language Specification》中界定的技术关键词。关键词“输出API”(exported API)或简称API,它是指类(classes),接口(interfaces),构造函数(constructors),成员(members)和系列化模板(serialized forms),其中系列化模板是指提供给程序员访问的类、接口或包的集合。(API,是应用程序接口(application programming interface)的缩写,为了避免与具有此类名称的语言基本结构产生认识混乱,它优先于其他专业术语专指接口(interface)【这段话比较难所以列出英文原文,看官自己看看】(The term API, which is short for application programming interface, is used in preference to the otherwise preferable term interface to avoid confusion with the language construct of that name.)程序员写程序的过程中使用的某个API被称为用户API。一个执行使用了某个API的类是这个API的客户程序(client)。

类(classes),接口(interfaces),构造函数(constructors),成员(members)和系列化模板(serialized forms)统称为API元素。一个输出APIexported API)所包含的API元素【是】相对API界定的包(package)的外部可访问的。这些API元素是由API的作者交付支持并且任何客户都可以使用的。凑巧的是,他们也都是针对由Javadoc工具以默认操作模式生成文档的元素。严格地说,一个包的输出API【有些书翻译为导出API】包含这个包中的公共(public)与保护(protected)属性成员和每一个公共类(class)或接口(interface)的构造函数。

附录1:部分专业词汇翻译对照表(按正文出现先后次序,主要翻译后跟主字标识)

英文

本人翻译

term

专业术语/术语(主)

class

interface

接口

enum

枚举

Extend

扩展

array

数组

constructor

构造函数/构造方法(主)/构造器

member

成员

serialized forms

系列化模板

API

API

inheritance

继承

subclassing

子类化/继承(主)


PS:本文全文下载地址  http://wenku.baidu.com/view/565e3e0f581b6bd97f19eabe.html?st=1