Skip to content
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
## 书籍简介

- 本书原作者为 [美] Bruce Eckel,即《Java 编程思想》的作者。
- 本书是事实上的 《Java 编程思想》第五版。
- 《Java 编程思想》第四版基于 JAVA **5** 版本;《On Java 8》 基于 JAVA **8** 版本。


## 传送门

Expand Down Expand Up @@ -99,7 +98,7 @@
1. 本书排版布局和翻译风格上参考**阮一峰**老师的 [中文技术文档的写作规范](https://github.com/ruanyf/document-style-guide)
2. 采用第一人称叙述。
3. 由于中英行文差异,完全的逐字逐句翻译会很冗余啰嗦。所以本人在翻译过程中,去除了部分主题无关内容、重复描写。
4. 译者在翻译中同时参考了谷歌、百度、有道翻译的译文以及《Java 编程思想》第四版中文版的部分内容(对其翻译死板,生造名词,语言精炼度差问题进行规避和改正)。最后结合译者自己的理解进行本地化,尽量做到专业和言简意赅,方便大家更好的理解学习。
4. 译者在翻译中同时参考了谷歌、百度、有道翻译的译文。最后结合译者自己的理解进行本地化,尽量做到专业和言简意赅,方便大家更好的理解学习。
5. 由于译者个人能力、时间有限,如有翻译错误和笔误的地方,还请大家批评指正!

## 如何参与
Expand Down
2 changes: 1 addition & 1 deletion book.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"title": "《On Java 8》中文版",
"author": "LingCoder",
"description": "根据 Bruce Eckel 大神的新书 On Java 8 翻译,可以说是事实上的 Thinking in Java 5th",
"description": "",
"language": "zh-hans",
"gitbook": "3.2.3",
"styles": {
Expand Down
4 changes: 1 addition & 3 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,14 @@
## 书籍简介

* 本书原作者为 [美] Bruce Eckel,即《Java 编程思想》的作者。
* 本书是事实上的 《Java 编程思想》第五版。
* 《Java 编程思想》第四版基于 JAVA **5** 版本;《On Java 8》 基于 JAVA **8** 版本。


## 翻译说明

1. 本书排版布局和翻译风格上参考了**阮一峰**老师的 [中文技术文档的写作规范](https://github.com/ruanyf/document-style-guide)
2. 采用第一人称叙述。
3. 由于中英行文差异,完全的逐字逐句翻译会很冗余啰嗦。所以本人在翻译过程中,去除了部分主题无关内容、重复描写。
4. 译者在翻译中同时参考了谷歌、百度、有道翻译的译文以及《Java编程思想》第四版中文版的部分内容(对其翻译死板,生造名词,语言精炼度差问题进行规避和改正)。最后结合译者自己的理解进行本地化,尽量做到专业和言简意赅,方便大家更好的理解学习。
4. 译者在翻译中同时参考了谷歌、百度、有道翻译的译文。最后结合译者自己的理解进行本地化,尽量做到专业和言简意赅,方便大家更好的理解学习。
5. 由于译者个人能力、时间有限,如有翻译错误和笔误的地方,还请大家批评指正!

## 如何参与
Expand Down
2 changes: 1 addition & 1 deletion docs/_coverpage.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# On Java 8

- 《On Java 8》中文版,是事实上的《Java 编程思想》第5版
- 《On Java 8》中文版。


[![stars](https://badgen.net/github/stars/lingcoder/OnJava8?icon=github&color=4ab8a1)](https://github.com/lingcoder/OnJava8) [![forks](https://badgen.net/github/forks/lingcoder/OnJava8?icon=github&color=4ab8a1)](https://github.com/lingcoder/OnJava8)
Expand Down
2 changes: 1 addition & 1 deletion docs/book/00-Introduction.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

# 简介

> “我的语言极限,即是我的世界的极限。” ——路德维希·维特根斯坦(*Wittgenstein*)
> “语言观决定世界观。” ——路德维希·维特根斯坦(*Wittgenstein*)

这句话无论对于自然语言还是编程语言来说都是一样的。你所使用的编程语言会将你的思维模式固化并逐渐远离其他语言,而且往往发生在潜移默化中。Java 作为一门傲娇的语言尤其如此。

Expand Down
2 changes: 1 addition & 1 deletion docs/book/02-Installing-Java-and-the-Book-Examples.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ Mac 系统自带的 Java 版本太老,为了确保本书的代码示例能被
2. 在命令行下执行下面的命令来安装 Java。

```bash
brew cask install java
brew install java --cask
```

当以上安装都完成后,如果你有需要,可以使用游客账户来运行本书中的代码示例。
Expand Down
2 changes: 1 addition & 1 deletion docs/book/04-Operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -1436,7 +1436,7 @@ public class AllOps {

```java
// operators/Overflow.java
// 厉害了!内存溢出
// 厉害了!数据溢出了!
public class Overflow {
public static void main(String[] args) {
int big = Integer.MAX_VALUE;
Expand Down
4 changes: 2 additions & 2 deletions docs/book/06-Housekeeping.md
Original file line number Diff line number Diff line change
Expand Up @@ -1130,7 +1130,7 @@ public class ExplicitStatic {
输出:

```
Inside main
Inside main()
Cup(1)
Cup(2)
f(99)
Expand Down Expand Up @@ -1182,7 +1182,7 @@ public class Mugs {
输出:

```
Inside main
Inside main()
Mug(1)
Mug(2)
mug1 & mug2 initialized
Expand Down
6 changes: 3 additions & 3 deletions docs/book/07-Implementation-Hiding.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ import java.util.*

### 代码组织

当编译一个 **.java** 文件时,**.java** 文件的每个类都会有一个输出文件。每个输出的文件名和 **.java** 文件中每个类的类名相同,只是后缀名是 **.class**。因此,在编译少量的 **.java** 文件后,会得到大量的 **.class** 文件。如果你使用过编译型语言,那么你可能习惯编译后产生一个中间文件(通常称为“obj”文件),然后与使用链接器(创建可执行文件)或类库生成器(创建类库)产生的其他同类文件打包到一起的情况。这不是 Java 工作的方式。在 Java 中,可运行程序是一组 **.class** 文件,它们可以打包压缩成一个 Java 文档文件(JAR,使用 **jar** 文档生成器)。Java 解释器负责查找、加载和解释这些文件。
当编译一个 **.java** 文件时, **.java** 文件的每个类都会有一个输出文件。每个输出的文件名和 **.java** 文件中每个类的类名相同,只是后缀名是 **.class**。因此,在编译少量的 **.java** 文件后,会得到大量的 **.class** 文件。如果你使用过编译型语言,那么你可能习惯编译后产生一个中间文件(通常称为“obj”文件),然后与使用链接器(创建可执行文件)或类库生成器(创建类库)产生的其他同类文件打包到一起的情况。这不是 Java 工作的方式。在 Java 中,可运行程序是一组 **.class** 文件,它们可以打包压缩成一个 Java 文档文件(JAR,使用 **jar** 文档生成器)。Java 解释器负责查找、加载和解释这些文件。

类库是一组类文件。每个源文件通常都含有一个 **public** 类和任意数量的非 **public** 类,因此每个文件都有一个 **public** 组件。如果把这些组件集中在一起,就需要使用关键字 **package**。

Expand Down Expand Up @@ -327,7 +327,7 @@ public class Cookie {
}
```

记住,**Cookie.java** 文件产生的类文件必须位于名为 **dessert** 的子目录中,该子目录在 **hiding** (表明本书的"封装"章节)下,它必须在 CLASSPATH 的几个目录之下。不要错误地认为 Java 总是会将当前目录视作查找行为的起点之一。如果你的 CLASSPATH 中没有 **.**,Java 就不会查找当前目录。
记住,**Cookie.java** 文件产生的类文件必须位于名为 **dessert** 的子目录中,该子目录在 **hiding** (表明本书的"封装"章节)下,它必须在 CLASSPATH 的几个目录之下。不要错误地认为 Java 总是会将当前目录视作查找行为的起点之一。如果你的 CLASSPATH 中没有 **.** ,Java 就不会查找当前目录。

现在,使用 **Cookie** 创建一个程序:
```java
Expand Down Expand Up @@ -384,7 +384,7 @@ class Pie {
}
```

最初看上去这两个文件毫不相关,但在 **Cake** 中可以创建一个 **Pie** 对象并调用它的 `f()` 方法。(注意,你的 CLASSPATH 中一定得有 **.**,这样文件才能编译)通常会认为 **Pie** 和 `f()` 具有包访问权限,因此不能被 **Cake** 访问。它们的确具有包访问权限,这是部分正确。**Cake.java** 可以访问它们是因为它们在相同的目录中且没有给自己设定明确的包名。Java 把这样的文件看作是隶属于该目录的默认包中,因此它们为该目录中所有的其他文件都提供了包访问权限。
最初看上去这两个文件毫不相关,但在 **Cake** 中可以创建一个 **Pie** 对象并调用它的 `f()` 方法。(注意,你的 CLASSPATH 中一定得有 **.** ,这样文件才能编译)通常会认为 **Pie** 和 `f()` 具有包访问权限,因此不能被 **Cake** 访问。它们的确具有包访问权限,这是部分正确。**Cake.java** 可以访问它们是因为它们在相同的目录中且没有给自己设定明确的包名。Java 把这样的文件看作是隶属于该目录的默认包中,因此它们为该目录中所有的其他文件都提供了包访问权限。

### private: 你无法访问

Expand Down
2 changes: 1 addition & 1 deletion docs/book/20-Generics.md
Original file line number Diff line number Diff line change
Expand Up @@ -2666,7 +2666,7 @@ public class GenericsAndCovariance {
}
```

**flist** 的类型现在是 `List<? extends Fruit>`,你可以读作“一个具有任何从 **Fruit** 继承的类型的列表”。然而,这实际上并不意味着这个 **List** 将持有任何类型的 **Fruit**。通配符引用的是明确的类型,因此它意味着“某种 **flist** 引用没有指定的具体类型”。因此这个被赋值的 **List** 必须持有诸如 **Fruit** 或 **Apple** 这样的指定类型,但是为了向上转型为 **Fruit**,这个类型是什么没人在意。
**flist** 的类型现在是 `List<? extends Fruit>`,你可以读作“一个具有任何从 **Fruit** 继承的类型的列表”。然而,这实际上并不意味着这个 **List** 将持有任何类型的 **Fruit**。通配符引用的是明确的类型,因此它意味着“某种 **flist** 引用没有指定的具体类型”。因此这个被赋值的 **List** 必须持有诸如 **Fruit** 或 **Apple** 这样的指定类型,但是为了向上转型为 **flist**,这个类型是什么没人在意。

**List** 必须持有一种具体的 **Fruit** 或 **Fruit** 的子类型,但是如果你不关心具体的类型是什么,那么你能对这样的 **List** 做什么呢?如果不知道 **List** 中持有的对象是什么类型,你怎能保证安全地向其中添加对象呢?就像在 **CovariantArrays.java** 中向上转型一样,你不能,除非编译器而不是运行时系统可以阻止这种操作的发生。你很快就会发现这个问题。

Expand Down
Loading