Files
OnJava8/book/00-Introduction.md
2018-12-20 23:45:07 +08:00

8.8 KiB
Raw Blame History

简介

“我的语言极限,即是我的世界的极限。” ——路德维希·维特根斯坦

这句话对于编程语言来说也一样。你所使用的编程语言会将你的思维模式固化并逐渐远离其他语言。Java 作为一门傲娇的派生语言尤其如此。最早的语言设计者为了不想在项目中使用 C ++,而创造了这种看起来很像 C ++,却比 C ++有了改进的新语言(他们的原始项目从未实现过)。虚拟机和垃圾回收机制是其最核心的变化,这两个概念本书后面的章节都会有详细描述。 不仅如此Java 还在其他方面推动行业了发展。例如,现在绝大多数编程语言都包含文档注释语法和 HTML 文档生成的工具。Java 最主要的概念之一“对象”来自SmallTalk语言。Java 定义了“对象”(在下一章中描述)为编程的基本单元。于是万物皆对象。

时间已经检验了这种信念,并发现它太过狂热。有些人甚至认为“对象”是完全错误的概念,应该被丢弃。就我个人而言,把一切都当成一个对象不仅是一个不必要的负担,而且还会招致许多设计朝着不好的方向发展。尽管如此,“对象”的概念依然有其闪光点。固执地要求所有东西都是一个对象(特别是一直到最底层级别)是一个设计错误。相反,完全逃避“对象”的概念似乎同样太过苛刻。

其他 Java 语言决策并没有像承诺的那样完成。在本书中,我会尝试解释这些。你不仅了解这些功能,还要了解为什么他们可能对你不太适用。这无关 Java 是一种好语言或者坏语言。一旦你了解了该语言的缺陷和局限性,你就能够:

  1. 当遇到似乎“已停用”的功能特性时,不会疑惑为什么.

  2. 通过了解界限的位置来更好地设计和编码。

编程有关管理复杂性问题的复杂性依赖于机器的复杂性。由于这种复杂性我们的大多数编程项目都失败了。许多语言设计决策时都考虑到了复杂性但在某些时候其他问题也势必不会少的程序员不可避免地“碰壁”。例如C ++必须向后兼容C允许C程序员轻松迁移并且效率很高。这些目标诚然很好并且也解释了为什么C ++在编程界取得了成功。为了保证兼容性的代价会造成语言额外的复杂性。当然,你可以责怪程序员和管理人员,但如果一种语言可以通过捕捉异常来提供有用的信息,为什么不呢?

虽然Visual BASICVB绑定在BASIC上但BASIC实际上并不是一种可扩展的语言。在VB上堆积的所有扩展造成大量无法维护的语法。Perl 向后兼容 awksedgrep 以及其它要替换的 Unix 工具因此它经常被指责生成“只写代码”也就是说你看不懂自己的代码。另一方面C ++VBPerl 和其他语言(如 SmallTalk的一些设计工作集中在复杂性问题上因此在解决某些类型的问题方面非常成功。通信革命使我们所有人更容易地相互沟通一对一团体和行星。据说下一次革命会形成一种新全球性的思想这种思想源于足量的人之间的相互联系。Java 可能会也可能不会成为这场革命的工具之一,但至少这种可能性让我觉得我现在正在做的传道授业是一件有意义的事情。

先决条件

阅读本书需要读者对编程有基本的了解:

程序是由一系列代码块,子句或函数组成的控制语句的集合。比如 “if”“while”判断语句等等。

你可能已经在学校、网络或其他书本上了熟悉了这样。只要你对自己的编程基础有自信,你就可以完成本书的学习。

你可以通过在 On Java 8的网站上免费下载 Think in C 来补充学习 Java 所需要的前置知识。 本书介绍了 Java 语言的基本控制机制以及面对对象编程的概念。在本书中我引述了一些C/C ++ 语言中的一些特性来帮助读者更好的理解 Java。 毕竟 Java 是在它们的基础之上发明的。理解他们之间的区别有助于读者更好的学习Java。

JDK文档

甲骨文公司已经提供了标准免费的JDK文档。除非必要否则在本书中将不再赘述有关API使用的细节。使用浏览器来即时搜索最新最全的JDK文档要好过翻阅本书来查找。只有在需要补充特定的示例时我才会提供有关的额外描述。

C编程思想

《Think in C 》已经可以在www.OnJava8.com免费下载。Java的基础语法是基于C语言的。《Think in C 》中有更适合初学者的编程基础介绍。 我已经委托 Chuck Allison 将这本C基础的书籍作为独立产品附赠于本书的 CD 中。希望大家在阅读本书时,都已具备了学习 JAVA 的良好基础。

源码下载

本书中所有源代码的示例都在版权保护的前提下通过GITHUB免费提供。您可以将这些代码用于教育。任何人不得在未经正确引用代码来源的情况下随意重新发布此代码示例。在每个代码文件中您都可以找到以下版权声明文件作为参考

Copyright.txt

©2017 MindView LLC。版权所有。如果上述版权声明本段和以下内容特此授予免费使用复制修改和分发此计算机源代码源代码及其文档的许可且无需出于下述目的的书面协议所有副本中都有五个编号的段落。

  1. 允许编译源代码并将编译代码仅以可执行格式包含在个人和商业软件程序中。

  2. 允许在课堂情况下使用源代码而不修改源代码包括在演示材料中前提是“On Java 8”一书被引用为原点。

  3. 可以通过以下方式获得将源代码合并到印刷媒体中的许可MindView LLCPO Box 969Crested ButteCO 81224 MindViewInc@gmail.com

  4. 源代码和文档的版权归MindView LLC所有。提供的源代码没有任何明示或暗示的担保包括任何适销性适用于特定用途或不侵权的默示担保。MindView LLC不保证任何包含源代码的程序的运行不会中断或没有错误。MindView LLC不对任何目的的源代码或包含源代码的任何软件的适用性做出任何陈述。包含源代码的任何程序的质量和性能的全部风险来自源代码的用户。用户理解源代码是为研究和教学目的而开发的建议不要仅仅因任何原因依赖源代码或任何包含源代码的程序。如果源代码或任何产生的软件证明有缺陷则用户承担所有必要的维修修理或更正的费用。

  5. 在任何情况下MINDVIEW LLC或其出版商均不对任何一方根据任何法律理论对直接间接特殊偶发或后果性损害承担任何责任包括利润损失业务中断商业信息丢失或任何其他保险公司。由于MINDVIEW LLC或其出版商已被告知此类损害的可能性因此使用本源代码及其文档或因无法使用任何结果程序而导致的个人受伤或者个人受伤。MINDVIEW LLC特别声明不提供任何担保包括但不限于对适销性和特定用途适用性的暗示担保。此处提供的源代码和文档基于“原样”基础没有MINDVIEW LLC的任何随附服务MINDVIEW LLC没有义务提供维护支持更新增强或修改。

请注意MindView LLC 仅提供以下唯一网址发布更新书中的代码示例,https://github.com/BruceEckel/OnJava8-examples 。您可在上述条款范围内将示例免费使用于项目和课堂中。

如果您在源代码中发现错误,请在下面的网址提交更正:https://github.com/BruceEckel/OnJava8-examples/issues

编码规范

在本书的文本中标识符关键字方法变量和类名以粗体固定宽度代码字体设置。一些关键字例如类被大量使用以至于粗体可能变得乏味。足够独特的那些保留为普通字体。我对本书中的示例使用了特定的编码风格。本书的格式约束中尽可能地遵循Oracle本身在其站点上找到的几乎所有代码中使用的样式并且在大多数 Java 开发环境受支持。在本书中我使用了我自己喜欢的一种字体风格。Java 是一种自由的编程语言,您也可以使用 IDE集成开发环境工具如IntelliJ IDEAEclipse或NetBeans将格式更改为适合您的格式。

本书中的代码文件使用自动化工具进行测试,并在最新版本的 Java 编译通过(除了那些特别标记的错误之外)。本书重点介绍并使用 Java 8进行测试。如果您必须了解更早的语言版本可以在www.OnJava8.com z免费下载 Thinking in Java

BUG提交

邮箱订阅

Java图形接口