Effective Java3 一、介绍

Introduction

本书旨在帮助您有效地使用 Java 编程语言及其基础库:java.lang,java.util 和 java.io,以及 java.util.concurrent 和 java.util.function等子包。 也会涉及到其他的类库。

本书一共九十小节,每个小节讲述了一条规则。 这些规则实践通常会使那些最优秀和最富有经验的程序员从中受益。 所有的内容分为11章,每章都涉及软件设计的一个广泛方面。 本书不打算从头到尾阅读:每个小节都或多或少地独立存在。 这些小节有很多交叉引用,因此您可以通过本书轻松绘制自己的课程。

自本书上一版出版以来,该平台增加了许多新功能。 本书中的大多数项目都以某种方式使用这些功能。 此表显示了主要功能的主要覆盖范围:


Screen Shot 2018-09-30 at 9.38.24 PM.png

大多数项目都用程序示例说明。 本书的一个关键特性是它包含说明许多设计模式和习语的代码示例。 在适当的情况下,它们与该领域的标准参考工作[Gamma95]相互参照。

许多小节包含一个或多个程序示例,说明了要避免的一些实践。 这样的例子,有时被称为反模式,清楚地标有评论,例如 //never do this! 在每种情况下,该项目都解释了为什么示例不好并提出了另一种方法。

本书不适合初学者:它假设您已经熟悉Java。 如果不是,请考虑许多优秀的入门级书籍之一,例如Peter Sestoft的Java Precisely [Sestoft16]。 虽然Effective Java旨在让任何具有该语言工作知识的人都可以阅读,但它应该为高级程序员提供思考的空间。

本书中的大多数规则都源于一些基本原则。 清晰和简洁至关重要。 组件的用户不应该对其行为感到惊讶。 组件应尽可能小,但不能小。 (正如本书中所使用的,术语组件是指任何可重用的软件元素,从单个方法到由多个包组成的复杂框架。)代码应该被重用而不是被复制。 组件之间的依赖关系应保持最小。 错误应该在发生后尽快检测到,理想情况是在编译时。

虽然本书中的规则并非100%适用,但在绝大多数情况下,它们都是最佳编程实践的特征。你不应该盲目地遵守这些规则,而只是偶尔并且有充分的理由违反这些规则。像大多数其他学科一样,学习编程艺术包括首先学习规则,然后学习何时打破规则。

在大多数情况下,本书不涉及性能。它是关于编写清晰,正确,可用,健壮,灵活和可维护的程序。如果你能做到这一点,那么获得所需的性能通常是一件相对简单的事情(第67条)。有些项目确实讨论了性能问题,其中一些项目提供了性能数据。使用短语“在我的机器上”引入的这些数字应该被认为是最近的。

值得一提的是,我的机器是老旧的自制3.5GHz四核英特尔酷睿i7-4770K,配备16千兆位DDR3-1866 CL9内存,运行Azul的Zulu 9.0.0.15版本的OpenJDK,在Microsoft Windows 7 Professional SP1(64-位)。

在讨论Java编程语言及其库的功能时,有时需要参考特定版本。 为方便起见,本书使用昵称而不是正式版本名称。 此表显示版本名称和昵称之间的映射:


Screen Shot 2018-09-30 at 9.48.26 PM.png

这些例子相当完整,但有利于完整性的可读性。他们可以自由地使用java.util和java.io包中的类。为了编译示例,您可能必须添加一个或多个导入声明或其他此类样板。该书的网站http://joshbloch.com/effectivejava包含每个示例的扩展版本,您可以编译和运行它。

在大多数情况下,本书使用了Java语言规范Java SE 8 Edition [JLS]中定义的技术术语。一些术语值得特别提及。该语言支持四种类型:接口(包括注释),类(包括枚举),数组和基元。前三个被称为参考类型。类实例和数组是对象;原始值不是。类的成员由其字段,方法,成员类和成员接口组成。方法的签名由其名称和形式参数的类型组成;签名不包括方法的返回类型。

本书使用的几个术语与Java语言规范不同。与Java语言规范不同,本书使用继承 inheritance 作为子类 subclassing 的同义词。本书不是对接口使用术语继承,而是简单地声明一个类实现一个接口或一个接口扩展另一个接口。要描述在未指定时应用的访问级别,本书使用传统的package-private而不是技术上正确的包访问[JLS,6.6.1]。

本书使用了一些未在Java语言规范中定义的技术术语。术语“导出API”或简称“API”是指程序员访问类,接口或包时所使用的类,接口,构造函数,成员和序列化形式。 (API是应用程序编程接口的缩写,优先于其他优选的术语接口,以避免与该名称的语言结构混淆。)编写使用API​​的程序的程序员被称为作为API的用户。其实现使用API​​的类是API的客户端。

类,接口,构造函数,成员和序列化表单被统称为API元素。导出的API包含可在定义API的包之外访问的API元素。这些是任何客户端都可以使用的API元素,并且API的作者承诺支持。并非巧合的是,它们也是Javadoc实用程序以其默认操作模式生成文档的元素。简而言之,包的导出API由包中每个公共类或接口的公共成员和受保护成员以及构造函数组成。

在Java 9中,模块系统被添加到平台中。如果库使用模块系统,则其导出的API是库的模块声明导出的所有包的导出API的并集。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352