From 49b99f0d8f447c5f3be76547c15c460d2945f07d Mon Sep 17 00:00:00 2001 From: LingCoder Date: Sun, 17 Mar 2019 12:22:00 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SUMMARY.md | 1 + book/{05-Control Flow.md => 05-Control-Flow.md} | 0 2 files changed, 1 insertion(+) rename book/{05-Control Flow.md => 05-Control-Flow.md} (100%) diff --git a/SUMMARY.md b/SUMMARY.md index 23312f6..03c7a51 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -52,5 +52,6 @@ * [编码风格](book/03-Objects-Everywhere.md#编码风格) * [本章小结](book/03-Objects-Everywhere.md#本章小结) * [第四章 运算符](book/04-Operators.md) +* [第五章 控制流](book/05-Control-Flow.md) * [词汇表](GLOSSARY.md) diff --git a/book/05-Control Flow.md b/book/05-Control-Flow.md similarity index 100% rename from book/05-Control Flow.md rename to book/05-Control-Flow.md From e125ea74a85eead23a69d80f25fca4e582ef7d1d Mon Sep 17 00:00:00 2001 From: LingCoder Date: Sun, 17 Mar 2019 12:42:09 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + book/05-Control-Flow.md | 137 ++++++++++++++++++++-------------------- 2 files changed, 71 insertions(+), 67 deletions(-) diff --git a/README.md b/README.md index 5f17f74..2535617 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ - [x] 第二章 安装Java和本书用例 - [x] 第三章 万物皆对象 - [ ] 第四章 运算符 +- [x] 第五章 控制流 - [ ] 待续······ - 最近公司项目赶着上线,等忙完继续! diff --git a/book/05-Control-Flow.md b/book/05-Control-Flow.md index d95f27c..ea20bd6 100644 --- a/book/05-Control-Flow.md +++ b/book/05-Control-Flow.md @@ -1,14 +1,14 @@ -# 第五章 控制执行流程 +# 第五章 控制流 > 程序操纵它的世界并做出选择。 在Java中,您可以使用执行控制语句进行选择。 -Java使用C的所有执行控制语句,因此如果您使用C或C ++进行编程,那么您所看到的大部分内容都是熟悉的。 大多数过程编程语言都有某种控制语句,并且语言之间经常存在重叠。在Java中,关键字包括**if-else,while,do-while,for,return,break**和名为**switch**的选择语句。 但是,Java并不支持备受诟病的**goto**(它仍然是解决某些类型问题的最有效方法)。 你仍然可以进行类似goto的跳转,但它比其他语言中的**goto**更受限制。 +Java 使用 C 的所有执行控制语句,因此如果您使用 C 或 C++ 进行编程,那么您所看到的大部分内容都是熟悉的。 大多数过程编程语言都有某种控制语句,并且语言之间经常存在重叠。在 Java 中,关键字包括 **if-else,while,do-while,for,return,break** 和名为 **switch** 的选择语句。 但是,Java并不支持备受诟病的**goto**(它仍然是解决某些类型问题的最有效方法)。 你仍然可以进行类似goto的跳转,但它比其他语言中的**goto**更受限制。 [TOC] ## true and flase -条件表达式的示例是**a == b**。这里有一个条件表达式示例,它使用条件操作符**“==”**来查看**a**的值是否等于**b**的值。 表达式返回**true**或**false**。 如果显示条件表达式的结果,则会生成表示布尔值的字符串**“true”**和**“false”**。 +条件表达式的示例是 **a == b**。这里有一个条件表达式示例,它使用条件操作符**“==”**来查看 **a**的值是否等于 **b** 的值。 表达式返回 **true** 或 **false**。 如果显示条件表达式的结果,则会生成表示布尔值的字符串 **“true”** 和 **“false”**。 ```java // control/TrueFalse.java @@ -22,11 +22,11 @@ public class TrueFalse { true false */ ``` -您在上一章中看到的任何关系运算符都可以生成条件语句。 请注意,Java不允许您使用数字作为布尔值,即使它在C和C ++中允许(在这些语言中,真"为非零,而”假“是零)。如果想在布尔测试中使用非布尔值,例如**if(a**),必须首先使用一个条件表达式将其转换为布尔值,例如**if(a!= 0)**。 +您在上一章中看到的任何关系运算符都可以生成条件语句。 请注意,Java 不允许您使用数字作为布尔值,即使它在 C 和 C++ 中允许(在这些语言中,真"为非零,而”假“是零)。如果想在布尔测试中使用非布尔值,例如**if(a**),必须首先使用一个条件表达式将其转换为布尔值,例如 **if(a!= 0)**。 ## if-else -**if-else**语句是控制程序流程的最基本的形式。 其中的**else**是可选的,因此您可以使用两种形式的**if**: +**if-else** 语句是控制程序流程的最基本的形式。 其中的 **else** 是可选的,因此您可以使用两种形式的 **if**: ```java if(Boolean-expression) @@ -42,9 +42,9 @@ else statement ``` -布尔表达式必须生成布尔结果,statement指用分号结尾的简单语句,或复合语句——封闭在花括号内的一组简单语句。 每当使用“statement”一词时,它总是暗示语句可以是简单的或复合的。 +布尔表达式必须生成布尔结果,statement 指用分号结尾的简单语句,或复合语句——封闭在花括号内的一组简单语句。 每当使用 “statement” 一词时,它总是暗示语句可以是简单的或复合的。 -作为**if-else**的一个例子,下面这个**test()**方法可以告诉您,您猜的数大于、小于还是等于目标数: +作为 **if-else** 的一个例子,下面这个 **test()** 方法可以告诉您,您猜的数大于、小于还是等于目标数: ```java // control/IfElse.java @@ -82,8 +82,11 @@ public class IfElse { ## 迭代语句 -循环由**while**,**do-while**和**for**控制,有时称为迭代语句。 语句会重复执行,直到起控制作用的**布尔表达式**(Boolean expression)计算为"假"。 +循环由 **while**,**do-while** 和 **for** 控制,有时称为迭代语句。 语句会重复执行,直到起控制作用的 **布尔表达式** (Boolean expression)计算为"假"。 + + ### while + while循环的形式是: ```java @@ -125,11 +128,11 @@ false, Exited 'while' */ ``` -**condition()**方法用到了**Math**库里的**static**(静态)方法**random()**,该方法的作用是产生0和1之间 (包括0,但不包括1) 的一个**double**值。**result**的值是通过比较操作符<而得到它的,这个操作符产生**boolean**类型的结果。在打印**boolean**类型的值时,将自动地得到适合的字符串**true**或**false**。while的条件表达式意思是说:"只要**condition()**返回**true**,就重复执行循环体中的语句"。 +**condition()** 方法用到了 **Math** 库里的 **static** (静态)方法 **random()**,该方法的作用是产生 0 和 1 之间 (包括 0,但不包括 1) 的一个**double**值。**result** 的值是通过比较操作符<而得到它的,这个操作符产生 **boolean** 类型的结果。在打印 **boolean** 类型的值时,将自动地得到适合的字符串 **true** 或 **false**。while 的条件表达式意思是说:"只要 **condition()**返回 **true**,就重复执行循环体中的语句"。 ### do-while -**do-while**的格式如下: +**do-while** 的格式如下: ```java do @@ -137,18 +140,18 @@ do while(Boolean-expression); ``` -**while**和**do-while**之间的唯一区别是**do-while**的语句总是至少执行一次,即使表达式第一次计算为false也是如此。 在**while**循环结构中,如果条件第一次就为**false**,那么其中的语句根本不会执行。在实际应用中,**while**比**do-while**更常用一点。 +**while** 和 **do-while** 之间的唯一区别是 **do-while** 的语句总是至少执行一次,即使表达式第一次计算为 false 也是如此。 在 **while** 循环结构中,如果条件第一次就为 **false**,那么其中的语句根本不会执行。在实际应用中,**while** 比 **do-while** 更常用一点。 ### for -**for**循环可能是最常用的迭代形式。 该循环在第一次迭代之前执行初始化。 随后,它会执行条件测试,并在每次迭代结束时,进行某种形式的“步进”。**for**循环的形式是: +**for** 循环可能是最常用的迭代形式。 该循环在第一次迭代之前执行初始化。 随后,它会执行条件测试,并在每次迭代结束时,进行某种形式的“步进”。**for** 循环的形式是: ```java for(initialization; Boolean-expression; step) statement ``` -初始化(initialization)表达式、布尔表达式(Boolean-expression),或者步进(step)运算,都可以为空。在每次迭代之前都会测试表达式,并且一旦计算结果为false,就会在for语句后面的行继续执行。 在每个循环结束时,执行一次步进。 +初始化 (initialization) 表达式、布尔表达式 (Boolean-expression) ,或者步进 (step) 运算,都可以为空。在每次迭代之前都会测试表达式,并且一旦计算结果为 false,就会在 for 语句后面的行继续执行。 在每个循环结束时,执行一次步进。 **for**循环通常用于“计数”任务: @@ -178,17 +181,17 @@ value: 106 character: j */ ``` -请注意,变量**c**在程序用到它的地方被定义的,也就是在for循环的控制表达式内,而不是在**main()**的开头。**c**的范围是由**for**控制的语句。 +请注意,变量 **c** 在程序用到它的地方被定义的,也就是在for循环的控制表达式内,而不是在 **main()** 的开头。**c** 的范围是由 **for** 控制的语句。 像C这样的传统过程语言要求在块的开头定义所有变量。 当编译器创建块时,它可以为这些变量分配空间。 在Java和C ++中,您可以在整个块中传播变量声明,并在需要时定义它们。 这允许更自然的编码风格并使代码更容易理解。[1] -这个程序也使用了**java.lang.Character**包装器类,这个类不但能把**char**基本类型的值包装进对象,还提供了一些别的有用的方法。这里用到了**static isLowerCase()**方法来检查问题中的字符是否为小写字母。 +这个程序也使用了 **java.lang.Character** 包装器类,这个类不但能把 **char** 基本类型的值包装进对象,还提供了一些别的有用的方法。这里用到了 **static isLowerCase()** 方法来检查问题中的字符是否为小写字母。 #### 逗号操作符 -逗号运算符(不是逗号分隔符,逗号作为分隔符用于分隔定义和方法参数)在Java中只有一个用法:在**for**循环的控制表达式中。 在控制表达式的初始化和步进控制中,您可以使用逗号分隔多个语句,并按顺序计算这些语句。使用逗号运算符,您可以在**for**语句中定义多个变量,但它们必须属于同一类型: +逗号运算符(不是逗号分隔符,逗号作为分隔符用于分隔定义和方法参数)在 Java 中只有一个用法:在**for** 循环的控制表达式中。 在控制表达式的初始化和步进控制中,您可以使用逗号分隔多个语句,并按顺序计算这些语句。使用逗号运算符,您可以在 **for** 语句中定义多个变量,但它们必须属于同一类型: ```java // control/CommaOperator.java @@ -208,15 +211,15 @@ i = 4 j = 8 */ ``` -**for**语句中的**int**定义覆盖了**i**和**j**,在初始化部分实际上可以拥有任意数量的具有相同类型的变量定义。在控制表达式中定义变量的能力仅限于**for**循环。 您不能将此方法与任何其他选择或迭代语句一起使用。 +**for** 语句中的 **int** 定义覆盖了 **i** 和 **j**,在初始化部分实际上可以拥有任意数量的具有相同类型的变量定义。在控制表达式中定义变量的能力仅限于 **for** 循环。 您不能将此方法与任何其他选择或迭代语句一起使用。 可以看到,无论在初始化还是在步进部分,语句都是顺序执行的。 ## for-in语法 -Java 5引入了更简洁的**for**语法,用于数组和集合(您将在“数组和集合”章节中了解更多有关这些内容的信息)。 这有时被称为**增强版for循环**,并且您将看到的大部分文档称为*for-each*语法,但Java 8添加了大量使用的**forEach()**。 这会混淆术语,所以我拿了一些许可证,而是称之为*for-in*(例如,在Python中,你实际上是**for x in sequence**,所以有合理的先例)。 请记住,您可能会在其他地方看到它的不同叫法。 +Java 5引入了更简洁的 **for** 语法,用于数组和集合(您将在“数组和集合”章节中了解更多有关这些内容的信息)。 这有时被称为 **增强版for循环**,并且您将看到的大部分文档称为 *for-each* 语法,但Java 8添加了大量使用的 **forEach()**。 这会混淆术语,所以我拿了一些许可证,而是称之为*for-in* (例如,在Python中,你实际上是 **for x in sequence**,所以有合理的先例)。 请记住,您可能会在其他地方看到它的不同叫法。 -**for-in**会自动为您生成每个项,因此你不必创建**int**变量去对由访问项构成的序列进行奇数。 例如,假设您有一个**float**数组,并且您想要选取该数组中的每个元素: +**for-in** 会自动为您生成每个项,因此你不必创建 **int** 变量去对由访问项构成的序列进行奇数。 例如,假设您有一个 **float** 数组,并且您想要选取该数组中的每个元素: ```java // control/ForInFloat.java @@ -253,9 +256,9 @@ public class ForInFloat { for(float x : f) { ``` -这条语句定义了一个**float**类型的变量**x**,继而将每一个**f**的元素赋值给**x**。 +这条语句定义了一个 **float** 类型的变量 **x**,继而将每一个 **f** 的元素赋值给 **x**。 -任何返回一个数组的方法都可以使用**for-in**。例如**String**类有一个方法**toCharArray()**,它返回一个**char**数组,因此可以很容易地下像下面这样迭代在字符串里面的所有字符: +任何返回一个数组的方法都可以使用 **for-in**。例如 **String** 类有一个方法 **toCharArray()**,它返回一个 **char** 数组,因此可以很容易地下像下面这样迭代在字符串里面的所有字符: ```java // control/ForInString.java @@ -271,17 +274,17 @@ A n A f r i c a n S w a l l o w */ ``` -就像在集合的章节所看到的,for-in还可以用于任何**iterable**对象。 +就像在集合的章节所看到的,for-in还可以用于任何 **iterable** 对象。 -许多**for**语句都会在一个整型值序列中步进,就像下面这样: +许多 **for** 语句都会在一个整型值序列中步进,就像下面这样: ```java for(int i = 0; i < 100; i++) ``` -对于这样的语句,for-in语法将不起作用,除非先创建一个**int**数组。为了简化这些任务,我会在**onjava.Range**包中创建一个名为**range()**的方法,它将自动生成恰当的数组。 +对于这样的语句,for-in语法将不起作用,除非先创建一个 **int** 数组。为了简化这些任务,我会在**onjava.Range** 包中创建一个名为 **range()** 的方法,它将自动生成恰当的数组。 -隐藏实施过程这一章节( Implementation Hiding )介绍了静态导入。 但是,您无需了解这些详细信息即可开始使用此库。 你可以在**import**语句中看到**static import**语法: +隐藏实施过程这一章节( Implementation Hiding )介绍了静态导入。 但是,您无需了解这些详细信息即可开始使用此库。 你可以在 **import** 语句中看到 **static import** 语法: ```java // control/ForInInt.java @@ -312,19 +315,19 @@ public class ForInInt { */ ``` -**range()**方法已经被重载,重载表示相同的方法名可以具有不同的参数列表(你将很快学习重载)。**range()**的第一个种重载形式是从0开始产生值,直到范围的上限,但不包括该上限。第二种重载形式是从第一个值开始产生值,直至比第二值小1的值为止。第三种形式有一个步进值,因此它每次的增量为该值。第四种**range()**表明还可以递减。**range()**是所谓生成器的一个非常简单的版本,有关生成器的内容将在本书稍后进行介绍。 +**range()** 方法已经被重载,重载表示相同的方法名可以具有不同的参数列表(你将很快学习重载)。**range()** 的第一个种重载形式是从0开始产生值,直到范围的上限,但不包括该上限。第二种重载形式是从第一个值开始产生值,直至比第二值小1的值为止。第三种形式有一个步进值,因此它每次的增量为该值。第四种 **range()** 表明还可以递减。**range()**是所谓生成器的一个非常简单的版本,有关生成器的内容将在本书稍后进行介绍。 -**range()**允许在更多地方使用for-in语法,因此可以说提高可读性。 +**range()** 允许在更多地方使用for-in语法,因此可以说提高可读性。 -请注意,**System.out.print()**不会输出换行符,因此您可以分段输出一行。 +请注意,**System.out.print()** 不会输出换行符,因此您可以分段输出一行。 -*for-in*语法不仅可以节省编写代码的时间。 更重要的是,它更容易阅读并说明你要做什么(获取数组的每个元素)而不是详细说明你是如何做到的(“我正在创建这个索引,所以我可以使用它来选择每个数组元素。“)。 本书只要有可能就会使用*for-in*语法。 +*for-in* 语法不仅可以节省编写代码的时间。 更重要的是,它更容易阅读并说明你要做什么(获取数组的每个元素)而不是详细说明你是如何做到的(“我正在创建这个索引,所以我可以使用它来选择每个数组元素。“)。 本书只要有可能就会使用 *for-in* 语法。 ## return -在Java中有几个关键字代表无条件分支,这意味着分支在没有任何测试的情况下发生。 这些包括**return**,**break**,**continue**和跳转到带标签语句的方法,类似于其他语言中的**goto**。 +在Java中有几个关键字代表无条件分支,这意味着分支在没有任何测试的情况下发生。 这些包括**return**,**break**,**continue** 和跳转到带标签语句的方法,类似于其他语言中的 **goto**。 -**return**关键字有两方面的用途:一方面指定一个方法返回什么值(假设它没有**void**返回值),另一方面它会导致当前的方法退出,并返回那个值。可据此改写上面的**IfElse.java**里的**test()**方法,使其利用这些特点: +**return**关键字有两方面的用途:一方面指定一个方法返回什么值(假设它没有 **void** 返回值),另一方面它会导致当前的方法退出,并返回那个值。可据此改写上面的 **IfElse.java** 里的 **test()** 方法,使其利用这些特点: ```java // control/TestWithReturn.java @@ -350,15 +353,15 @@ public class TestWithReturn { */ ``` -不需要**else**,因为该方法在执行返回后不会继续执行。 +不需要 **else**,因为该方法在执行返回后不会继续执行。 -如果在返回**void**的方法中没有**return**语句,则在该方法结束时会有一个隐式的**return**,因此一个方法中并不总是需要包含**return**语句。 但是,如果您的方法声明它将返回除**void**之外的任何返回类型,则必须确保每个代码路径都返回一个值。 +如果在返回 **void** 的方法中没有 **return** 语句,则在该方法结束时会有一个隐式的 **return**,因此一个方法中并不总是需要包含 **return** 语句。 但是,如果您的方法声明它将返回除 **void** 之外的任何返回类型,则必须确保每个代码路径都返回一个值。 ## break and continue -在任何迭代语句的主体部分,都可以使用**break**和**continue**来控制循环的流程。 其中,**break**退出循环而不执行循环中的其余语句。 而**continue**停止执行当前的迭代,然后退回循环起始处,以开始下一次迭代。 +在任何迭代语句的主体部分,都可以使用 **break** 和 **continue** 来控制循环的流程。 其中,**break** 退出循环而不执行循环中的其余语句。 而 **continue** 停止执行当前的迭代,然后退回循环起始处,以开始下一次迭代。 -下面这个程序向大家展示了**break**和**continue**在**for**和**while**循环中的例子: +下面这个程序向大家展示了 **break** 和 **continue** 在 **for** 和 **while** 循环中的例子: ```java // control/BreakAndContinue.java @@ -399,23 +402,23 @@ public class BreakAndContinue { */ ``` -**[1]**在这个**for**循环中,**i**的值永远不会达到100;因为一旦**i**达到74,**break**语句就会中断循环。通常,只有在不知道中断条件何时满足时,才需要这样使用**break**。因为**i**不能被9整除,**continue**语句就会使执行过程返回到循环的最开头(这使**i**递增)。如果能够整除,则将值显示出来。 +**[1]** 在这个 **for** 循环中,**i** 的值永远不会达到 100;因为一旦 **i** 达到 74,**break** 语句就会中断循环。通常,只有在不知道中断条件何时满足时,才需要这样使用 **break**。因为**i** 不能被 9 整除,**continue** 语句就会使执行过程返回到循环的最开头(这使 **i** 递增)。如果能够整除,则将值显示出来。 -**[2]**使用for-in语法将产生相同的结果。 +**[2]** 使用 for-in 语法将产生相同的结果。 -**[3]**最后,可以看到一个"无穷**while**循环"的情况。然而,循环内部有一个**break**语句,可中止循环。请注意,**continue**语句将控制权移回循环的顶部,而不会执行**continue**之后的任何操作。 因此,只有当i的值可被10整除时才会显示。在输出中,显示值0,因为0%9产生0。 +**[3]** 最后,可以看到一个"无穷 **while** 循环"的情况。然而,循环内部有一个 **break** 语句,可中止循环。请注意,**continue** 语句将控制权移回循环的顶部,而不会执行 **continue** 之后的任何操作。 因此,只有当 i 的值可被 10 整除时才会显示。在输出中,显示值 0,因为 0%9 产生0。 -无限循环的另一种形式是**for(;;)**。 编译器以同样的方式处理**while(true)**和**for(;;)**,因此使用哪种取决于编程品味。 +无限循环的另一种形式是 **for(;;)**。 编译器以同样的方式处理 **while(true)** 和 **for(;;)**,因此使用哪种取决于编程品味。 ## 臭名昭著的goto -goto关键字很早就在程序设计语言中出现。事实上,goto是汇编语言的程序控制结构的始 祖:“若条件A,则跳到这里;否则跳到那里”。若阅读由几乎所有编译器生成的汇编代码,就 会发现程序控制里包含了许多跳转。然而,goto是在源码的级别跳转的,所以招致了不好的 声誉。若程序总是从一个地方跳到另一个地方,还有什么办法能识别代码的流程呢?随着 Edsger Dijkstra著名的“Goto有害”论的问世,goto便从此失宠。 +goto 关键字很早就在程序设计语言中出现。事实上,goto 是汇编语言的程序控制结构的始 祖:“若条件A,则跳到这里;否则跳到那里”。若阅读由几乎所有编译器生成的汇编代码,就 会发现程序控制里包含了许多跳转。然而,goto是在源码的级别跳转的,所以招致了不好的 声誉。若程序总是从一个地方跳到另一个地方,还有什么办法能识别代码的流程呢?随着 Edsger Dijkstra 著名的 “Goto 有害”论的问世,goto 便从此失宠。 -事实上,真正的问题并不在于使用goto,而在于goto的滥用。而且在一些少见的情况下,goto 是组织控制流程的最佳手段。 +事实上,真正的问题并不在于使用 goto,而在于 goto 的滥用。而且在一些少见的情况下,goto 是组织控制流程的最佳手段。 -尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在 break和continue这两个关键字的身上,我们仍然能看出一些goto的影子。它并不属于一次跳 转,而是中断循环语句的一种方法。之所以把它们纳入goto问题中一起讨论,是由于它们使 用了相同的机制:标签。 +尽管 goto 仍是 Java 的一个保留字,但并未在语言中得到正式使用;Java 没有 goto。然而,在 break和 continue 这两个关键字的身上,我们仍然能看出一些goto的影子。它并不属于一次跳 转,而是中断循环语句的一种方法。之所以把它们纳入 goto 问题中一起讨论,是由于它们使 用了相同的机制:标签。 “标签”是后面跟一个冒号的标识符,就象下面这样: @@ -423,7 +426,7 @@ goto关键字很早就在程序设计语言中出现。事实上,goto是汇编 label1: ``` -对Java来说,唯一用到标签的地方是在循环语句之前。进一步说,它实际需要紧靠在循环语 句的前方——在标签和循环之间置入任何语句都是不明智的。而在循环之前设置标签的唯一 理由是:我们希望在其中嵌套另一个循环或者一个开关。这是由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。如下所示: +对 Java 来说,唯一用到标签的地方是在循环语句之前。进一步说,它实际需要紧靠在循环语 句的前方——在标签和循环之间置入任何语句都是不明智的。而在循环之前设置标签的唯一 理由是:我们希望在其中嵌套另一个循环或者一个开关。这是由于 break 和 continue 关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。如下所示: ```java label1: @@ -441,13 +444,13 @@ outer-iteration { } ``` -**[1]** **break**中断内部循环,并在外部循环结束。 +**[1]** **break** 中断内部循环,并在外部循环结束。 -**[2]**,**continue**移回内部循环的 起始处。但在条件3中,**continue label1**却同时中断内部循环以及外部循环,并移至**label1** 处。 +**[2]**,**continue** 移回内部循环的 起始处。但在条件3中,**continue label1** 却同时中断内部循环以及外部循环,并移至 **label1** 处。 **[3]**随后,它实际是继续循环,但却从外部循环开始。 -**[4]**,**break label1**也会中断所有循环,并回到**label1**处,但并不重新进入循环。也就是说,它实际是完全中止了两个循环。 +**[4]**,**break label1** 也会中断所有循环,并回到 **label1** 处,但并不重新进入循环。也就是说,它实际是完全中止了两个循环。 下面是for循环的一个例子: @@ -516,11 +519,11 @@ break outer */ ``` -注意**break**会中断**for**循环,而且在抵达**for**循环的末尾之前,递增表达式不会执行。由于**break** 跳过了递增表达式,所以递增会在**i==3**的情况下直接执行。在**i==7**的情况下,**continue outer** 语句也会到达循环顶部,而且也会跳过递增,所以它也是直接递增的。 +注意 **break** 会中断 **for** 循环,而且在抵达 **for** 循环的末尾之前,递增表达式不会执行。由于 **break** 跳过了递增表达式,所以递增会在 **i==3** 的情况下直接执行。在 **i==7** 的情况下,**continue outer** 语句也会到达循环顶部,而且也会跳过递增,所以它也是直接递增的。 -如果没有**break outer**语句,就没有办法在一个内部循环里找到出外部循环的路径。这是由于 **break**本身只能中断最内层的循环(对于**continue**同样如此)。 当然,若想在中断循环的同时退出方法,简单地用一个**return**即可。 +如果没有 **break outer** 语句,就没有办法在一个内部循环里找到出外部循环的路径。这是由于 **break** 本身只能中断最内层的循环(对于 **continue** 同样如此)。 当然,若想在中断循环的同时退出方法,简单地用一个 **return** 即可。 -下面这个例子向大家展示了带标签的**break**以及**continue**语句在**while**循环中的用法: +下面这个例子向大家展示了带标签的 **break** 以及 **continue** 语句在 **while** 循环中的用法: ```java // control/LabeledWhile.java @@ -573,25 +576,25 @@ break outer */ ``` -同样的规则亦适用于**while**: +同样的规则亦适用于 **while**: -(1) 简单的一个**continue**会退回最内层循环的开头(顶部),并继续执行。 +(1) 简单的一个 **continue** 会退回最内层循环的开头(顶部),并继续执行。 -(2) 带有标签的**continue**会到达标签的位置,并重新进入紧接在那个标签后面的循环。 +(2) 带有标签的 **continue** 会到达标签的位置,并重新进入紧接在那个标签后面的循环。 -(3) **break**会中断当前循环,并移离当前标签的末尾。 +(3) **break** 会中断当前循环,并移离当前标签的末尾。 (4) 带标签的**break**会中断当前循环,并移离由那个标签指示的循环的末尾。 -大家要记住的重点是:在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中**break**或**continue**。 +大家要记住的重点是:在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中 **break** 或 **continue**。 -**break**和**continue**标签已经成为相对少用的推测特征(在前面的语言中很少或没有先例),所以你很少在代码里看到它们。 +**break** 和 **continue** 标签已经成为相对少用的推测特征(在前面的语言中很少或没有先例),所以你很少在代码里看到它们。 -在**Dijkstra**的**“Goto有害”**论中,他最反对的就是标签,而非**goto**。随着标签在一个程序里数量 的增多,他发现产生错误的机会也越来越多。标签和**goto**使我们难于对程序作静态分析。但是,Java标签不会造成这方面的问题,因为它们的应用场合已经收到了限制,没有特别的方式用于概念程序的控制。由此也引出了一个有趣的问题:通过限制语句的能力,反而能使一项语言特性更加有用。 +在 **Dijkstra** 的 **“ goto 有害”** 论中,他最反对的就是标签,而非 **goto**。随着标签在一个程序里数量 的增多,他发现产生错误的机会也越来越多。标签和 **goto** 使我们难于对程序作静态分析。但是,Java 标签不会造成这方面的问题,因为它们的应用场合已经收到了限制,没有特别的方式用于概念程序的控制。由此也引出了一个有趣的问题:通过限制语句的能力,反而能使一项语言特性更加有用。 ## switch -**switch**有时也被划归为一种选择语句。根据整数表达式的值,**switch**语句可以从一系列代码中选出一段去执行。它的格式如下: +**switch** 有时也被划归为一种选择语句。根据整数表达式的值,**switch** 语句可以从一系列代码中选出一段去执行。它的格式如下: ```java switch(integral-selector) { @@ -605,11 +608,11 @@ switch(integral-selector) { } ``` -其中,integral-selector(整数选择因子)是一个能够产生整数值的表达式,**switch**能够将这个表达式的结果与每个integral-value(整数值)相比较。若发现相符的,就执行对应的语句(简单或复合语句,其中并不需要括号)。若没有发现相 符的,就执行default语句。 +其中,integral-selector (整数选择因子)是一个能够产生整数值的表达式,**switch** 能够将这个表达式的结果与每个 integral-value (整数值)相比较。若发现相符的,就执行对应的语句(简单或复合语句,其中并不需要括号)。若没有发现相 符的,就执行 default 语句。 -在上面的定义中,大家会注意到每个**case**均以一个**break**结尾。这样可使执行流程跳转至 switch主体的末尾。这是构建**switch**语句的一种传统方式,但**break**是可选的。若省略break, 会继续执行后面的**case**语句的代码,直到遇到一个**break**为止。尽管通常不想出现这种情况,但对有经验的程序员来说,也许能够善加利用。注意最后的**default**语句没有**break**,因为执行流程已到了break的跳转目的地。当然,如果考虑到编程风格方面的原因,完全可以在**default** 语句的末尾放置一个**break**,尽管它并没有任何实际的用处。 +在上面的定义中,大家会注意到每个 **case** 均以一个 **break** 结尾。这样可使执行流程跳转至 switch 主体的末尾。这是构建 **switch** 语句的一种传统方式,但 **break** 是可选的。若省略break, 会继续执行后面的 **case** 语句的代码,直到遇到一个 **break** 为止。尽管通常不想出现这种情况,但对有经验的程序员来说,也许能够善加利用。注意最后的 **default** 语句没有 **break**,因为执行流程已到了break的跳转目的地。当然,如果考虑到编程风格方面的原因,完全可以在**default** 语句的末尾放置一个 **break**,尽管它并没有任何实际的用处。 -switch语句是实现多路选择的一种干净利落的一种方式(比如从一系列执行路径中挑选一个)。但它要求使用一个选择因子,并且必须是int或char那样的整数值。例如,假若将一个字串或者浮点数 作为选择因子使用,那么它们在switch语句里是不会工作的。对于非整数类型,则必须使用一 系列if语句。 下面这个例子可随机生成字母,并判断它们是元音还是辅音字母: +switch 语句是实现多路选择的一种干净利落的一种方式(比如从一系列执行路径中挑选一个)。但它要求使用一个选择因子,并且必须是 int 或 char 那样的整数值。例如,假若将一个字串或者浮点数 作为选择因子使用,那么它们在 switch 语句里是不会工作的。对于非整数类型,则必须使用一 系列 if 语句。 下面这个例子可随机生成字母,并判断它们是元音还是辅音字母: ```java // control/VowelsAndConsonants.java @@ -656,9 +659,9 @@ z, 122: consonant */ ``` -由于**Random.nextInt(26)**会产生0到26之间的一个值,所以在其上加上一个偏移量"a",即可产生小写字母。在**case**语句中,使用单引号引起的字符也会产生用于比较的整数值。 +由于 **Random.nextInt(26)** 会产生0到26之间的一个值,所以在其上加上一个偏移量 "a",即可产生小写字母。在 **case** 语句中,使用单引号引起的字符也会产生用于比较的整数值。 -请注意**case**语句能够堆叠在一起,为一段代码形成多重匹配,即只要符合多种条件中的一种,就执行那段特别的代码。这时也应该注意将**break**语句置于特定**case**的末尾,否则控制流程会简单地下移,处理后面的**case**。 +请注意 **case** 语句能够堆叠在一起,为一段代码形成多重匹配,即只要符合多种条件中的一种,就执行那段特别的代码。这时也应该注意将 **break** 语句置于特定 **case** 的末尾,否则控制流程会简单地下移,处理后面的 **case**。 在下面的语句中: @@ -666,11 +669,11 @@ z, 122: consonant int c = rand.nextInt(26) + 'a'; ``` -**Random.nextInt()**将产生0~25之间的一个随机**int**值,它将被加到**"a"**上。这表示**"a"**将自动被转换为**int**以执行假发。为了把**c**当作字符打印,必须将其转型为**char**;否则,将产生整数输出。 +**Random.nextInt()**将产生0~25之间的一个随机 **int** 值,它将被加到 **"a"** 上。这表示 **"a"** 将自动被转换为 **int** 以执行假发。为了把 **c** 当作字符打印,必须将其转型为 **char**;否则,将产生整数输出。 ##Switching on Strings -Java 7增加了在字符串上**switch**的用法。 此示例展示了您从一组String可能性中选择的旧方法,以及使用switch的新方法: +Java 7增加了在字符串上 **switch** 的用法。 此示例展示了您从一组String可能性中选择的旧方法,以及使用switch的新方法: ```java // control/StringSwitch.java @@ -718,9 +721,9 @@ RED 一旦理解了switch,这种语法就是一个逻辑扩展。 结果更清晰,更易于理解和维护。 -作为**switch**字符串的第二个例子,我们重新访问Math.random()。 它是否产生从0到1的值,包括还是不包括值“1”? 在数学术语中,是(0,1),还是[0,1],还是(0,1)还是[0,1]? (方括号表示“包括”,而括号表示“不包括”。) +作为 **switch** 字符串的第二个例子,我们重新访问 Math.random()。 它是否产生从 0 到 1 的值,包括还是不包括值“1”? 在数学术语中,是(0,1),还是[0,1],还是(0,1)还是[0,1]? (方括号表示“包括”,而括号表示“不包括”。) -下面一个可能提供答案的测试程序。 所有命令行参数都作为**String**对象传递,因此我们可以**switch**参数来决定要做什么。 有一个问题:用户可能不提供任何参数,因此索引到args数组会导致程序失败。 要解决这个问题,我们检查数组的长度,如果它为零,我们使用一个空字符串,否则我们选择**args**数组中的第一个元素: +下面一个可能提供答案的测试程序。 所有命令行参数都作为 **String** 对象传递,因此我们可以 **switch** 参数来决定要做什么。 有一个问题:用户可能不提供任何参数,因此索引到args数组会导致程序失败。 要解决这个问题,我们检查数组的长度,如果它为零,我们使用一个空字符串,否则我们选择 **args** 数组中的第一个元素: ```java // control/RandomBounds.java @@ -761,7 +764,7 @@ or java RandomBounds upper ``` -使用onjava包中的TimedAbort类,程序在三秒后中止,因此看起来Math.random()从不生成0.0或1.0。 但这就是这样一个实验可以欺骗的地方。 如果考虑0到1之间所有不同**double**类型的分数(double fractions)的数量,实验中达到任何一个值的可能性可能超过一台计算机甚至一个实验者的寿命。 结果是0.0包含在**Math.random()**的输出中,而1.0则不包括在内。 在数学术语中,它是[0,1)。 您必须小心分析您的实验并了解它们的局限性。结果是0.0包含在**Math.random()**的输出中,而1.0则不包括在内。 在数学术语中,它是[0,1)。 您必须小心分析您的实验并了解它们的局限性。 +使用 onjava 包中的 TimedAbort 类,程序在三秒后中止,因此看起来 Math.random()从不生成 0.0或 1.0。 但这就是这样一个实验可以欺骗的地方。 如果考虑0到1之间所有不同 **double** 类型的分数(double fractions)的数量,实验中达到任何一个值的可能性可能超过一台计算机甚至一个实验者的寿命。 结果是0.0包含在 **Math.random()**的输出中,而 1.0 则不包括在内。 在数学术语中,它是[0,1)。 您必须小心分析您的实验并了解它们的局限性。结果是 0.0 包含在 **Math.random()**的输出中,而 1.0 则不包括在内。 在数学术语中,它是 [0,1)。 您必须小心分析您的实验并了解它们的局限性。 From 13c295b09eae7d7643d354bcb6768df738607ad3 Mon Sep 17 00:00:00 2001 From: LingCoder Date: Sun, 17 Mar 2019 12:53:42 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=8B=E9=93=BE=20ef?= =?UTF-8?q?fective=20java=203=E4=B8=AD=E6=96=87=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 2535617..470f502 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,11 @@ 如还有其它问题,欢迎发送 issue,谢谢~ +## 友情链接 + +[Effective.Java.3rd.Edition 中文版](https://sjsdfg.github.io/effctive-java-3rd-chinese/#/) + + ## 捐赠鼓励 **捐赠1毛,鼓励作者!** From a40360b8e922886b7df59c09287fb4fb7ed6b19b Mon Sep 17 00:00:00 2001 From: LingCoder Date: Sun, 17 Mar 2019 13:01:42 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E6=8D=90=E8=B5=A0=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 -------- images/alipay.PNG | Bin 34677 -> 0 bytes images/wechat.PNG | Bin 42189 -> 0 bytes 3 files changed, 8 deletions(-) delete mode 100644 images/alipay.PNG delete mode 100644 images/wechat.PNG diff --git a/README.md b/README.md index 470f502..d55187e 100644 --- a/README.md +++ b/README.md @@ -93,14 +93,6 @@ [Effective.Java.3rd.Edition 中文版](https://sjsdfg.github.io/effctive-java-3rd-chinese/#/) -## 捐赠鼓励 - -**捐赠1毛,鼓励作者!** - -
-微信捐赠 -支付宝捐赠 -
## 开源协议 diff --git a/images/alipay.PNG b/images/alipay.PNG deleted file mode 100644 index f345f910fc3730f63621e516ffead1ccb6f968b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34677 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 agX72E1at6|zaKmX|J_nlQ^=7s^7%i$$xlcC diff --git a/images/wechat.PNG b/images/wechat.PNG deleted file mode 100644 index 4f687a3945d0163414bbf1a976f6ea175252fcb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42189 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 Date: Sun, 17 Mar 2019 13:19:30 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E7=AC=AC=E4=BA=94=E7=AB=A0=E5=AD=90?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SUMMARY.md | 10 ++++++++++ book/05-Control-Flow.md | 15 ++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/SUMMARY.md b/SUMMARY.md index 03c7a51..0bd5def 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -53,5 +53,15 @@ * [本章小结](book/03-Objects-Everywhere.md#本章小结) * [第四章 运算符](book/04-Operators.md) * [第五章 控制流](book/05-Control-Flow.md) + * [本章小结](book/05-Control-Flow.md#true和flase) + * [本章小结](book/05-Control-Flow.md#if-else) + * [本章小结](book/05-Control-Flow.md#迭代语句) + * [本章小结](book/05-Control-Flow.md#for-in语法) + * [本章小结](book/05-Control-Flow.md#return) + * [本章小结](book/05-Control-Flow.md#break和continue) + * [本章小结](book/05-Control-Flow.md#臭名昭著的goto) + * [本章小结](book/05-Control-Flow.md#switch) + * [本章小结](book/05-Control-Flow.md#switch字符串) + * [本章小结](book/05-Control-Flow.md#本章小结) * [词汇表](GLOSSARY.md) diff --git a/book/05-Control-Flow.md b/book/05-Control-Flow.md index ea20bd6..4e21385 100644 --- a/book/05-Control-Flow.md +++ b/book/05-Control-Flow.md @@ -6,7 +6,7 @@ Java 使用 C 的所有执行控制语句,因此如果您使用 C 或 C++ 进 [TOC] -## true and flase +## true和flase 条件表达式的示例是 **a == b**。这里有一个条件表达式示例,它使用条件操作符**“==”**来查看 **a**的值是否等于 **b** 的值。 表达式返回 **true** 或 **false**。 如果显示条件表达式的结果,则会生成表示布尔值的字符串 **“true”** 和 **“false”**。 @@ -357,7 +357,7 @@ public class TestWithReturn { 如果在返回 **void** 的方法中没有 **return** 语句,则在该方法结束时会有一个隐式的 **return**,因此一个方法中并不总是需要包含 **return** 语句。 但是,如果您的方法声明它将返回除 **void** 之外的任何返回类型,则必须确保每个代码路径都返回一个值。 -## break and continue +## break和continue 在任何迭代语句的主体部分,都可以使用 **break** 和 **continue** 来控制循环的流程。 其中,**break** 退出循环而不执行循环中的其余语句。 而 **continue** 停止执行当前的迭代,然后退回循环起始处,以开始下一次迭代。 @@ -671,7 +671,9 @@ int c = rand.nextInt(26) + 'a'; **Random.nextInt()**将产生0~25之间的一个随机 **int** 值,它将被加到 **"a"** 上。这表示 **"a"** 将自动被转换为 **int** 以执行假发。为了把 **c** 当作字符打印,必须将其转型为 **char**;否则,将产生整数输出。 -##Switching on Strings + + +## switch字符串 Java 7增加了在字符串上 **switch** 的用法。 此示例展示了您从一组String可能性中选择的旧方法,以及使用switch的新方法: @@ -768,7 +770,7 @@ java RandomBounds upper -## Summary +## 本章小结 本章总结了我们对大多数编程语言中出现的基本特征的探索:计算,运算符优先级,类型转换,选择和迭代。 现在,您已准备好开始采取措施,使您更接近面向对象和函数式编程的世界。 下一章将介绍初始化和清理对象的重要问题,接下来的章节将介绍隐藏实现细节(implementation hiding)的这一核心概念。 @@ -776,4 +778,7 @@ java RandomBounds upper 1. 在早期的语言中,大量的决策都是基于使编译器编写者的生活更轻松。 你会发现,在现代语言中,大多数设计决策都会让语言用户的生活更轻松,尽管有时会有妥协 - 这通常会让语言设计师感到后悔。 -2. 请注意,这似乎是一个难以支持的主张,并且很可能是称为相关因果关系谬误的认知偏差的一个例子 \ No newline at end of file +2. 请注意,这似乎是一个难以支持的主张,并且很可能是称为相关因果关系谬误的认知偏差的一个例子。 + + +
\ No newline at end of file From c028a4cd98f9463f88c1da1a1c67e7c6742809e8 Mon Sep 17 00:00:00 2001 From: LingCoder Date: Sun, 17 Mar 2019 13:23:39 +0800 Subject: [PATCH 06/10] autocommit --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d55187e..c676703 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,8 @@ - 2019-03-14 第三章 万物皆对象翻译完成 +- 2019-03-17 第五章 控制流翻译完成 + ## 原书作者
@@ -61,7 +63,7 @@ ## 贡献者 * 主译: LingCoder -* 参译: +* 参译: LortSir * 校对:nickChenyx From b0ee793c4695c90396afe20ec81cdf8dfbb294a3 Mon Sep 17 00:00:00 2001 From: LingCoder Date: Sun, 17 Mar 2019 13:34:19 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=8D=90=E8=B5=A0?= =?UTF-8?q?=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- book.json | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/book.json b/book.json index 031275f..f99031f 100644 --- a/book.json +++ b/book.json @@ -21,7 +21,6 @@ "emphasize", "toggle-chapters", "katex", - "donate", "mermaid-gb3", "advanced-emoji", "include-codeblock" @@ -30,14 +29,6 @@ "edit-link": { "base": "https://github.com/lingcoder/OnJava8/edit/master", "label": "Edit This Page" - }, - "donate": { - "wechat": "https://github.com/LingCoder/OnJava8/raw/master/images/wechat.PNG", - "alipay": "https://github.com/LingCoder/OnJava8/raw/master/images/alipay.PNG", - "title": "", - "button": "赏", - "alipayText": "支付宝打赏", - "wechatText": "微信打赏" - } + } } } From cb22fe35c28d0aa090c4d917e46b4b7c5cd30f35 Mon Sep 17 00:00:00 2001 From: LingCoder Date: Wed, 20 Mar 2019 10:08:12 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E8=84=9A=E6=B3=A8=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- book/03-Objects-Everywhere.md | 115 ++++++++++++---------------------- 1 file changed, 40 insertions(+), 75 deletions(-) diff --git a/book/03-Objects-Everywhere.md b/book/03-Objects-Everywhere.md index a74aeb8..fb18f13 100644 --- a/book/03-Objects-Everywhere.md +++ b/book/03-Objects-Everywhere.md @@ -116,9 +116,7 @@ Java 的设计主要目标之一是安全性,因此许多困扰 C 和 C++ 程 我们还可创建基本类型的数组。编译器通过将该数组的内存归零来保证初始化。本书稍后将详细介绍数组,特别是在数组章节中。 - [^1]: 脚注预留 - [^2]: 脚注预留 - [^3]: 脚注预留 + ## 代码注释 @@ -300,7 +298,7 @@ class DataOnly { 方法的返回类型表明了当你调用它时会返回的结果类型。参数列表则显示了可被传递到方法内部的参数类型及名称。方法的名称和参数列表被统称为**方法签名**(**signature of the method**)。签名作为方法的唯一性标识。 -Java 中的方法只能作为类的一部分创建。它只能被对象所调用,并且该对象必须有权限来执行调用。若对象调用错误的方法,则程序将在编译时报错。 +Java 中的方法只能作为类的一部分创建。它只能被对象所调用 [^4],并且该对象必须有权限来执行调用。若对象调用错误的方法,则程序将在编译时报错。 我们可以通过在对象名的后面跟上 `.` 符号+方法名及其参数来调用一个方法。代码示例: @@ -319,7 +317,7 @@ int x = a.f(); #### 参数列表 -方法参数列表指定传递给方法的信息。正如你可能猜到的,这些信息 —— 就像 Java 中的其他所有信息 —— 采用对象的形式。参数列表必须指定对象类型和每个对象的名称。同样,我们并没有直接处理对象,而是在传递对象引用。但是引用的类型必须是正确的。如果方法需要 String 参数,则必须传入 String,否则编译器将报错。 +方法参数列表指定传递给方法的信息。正如你可能猜到的,这些信息 —— 就像 Java 中的其他所有信息 —— 采用对象的形式。参数列表必须指定对象类型和每个对象的名称。同样,我们并没有直接处理对象,而是在传递对象引用 [^5] 。但是引用的类型必须是正确的。如果方法需要 String 参数,则必须传入 String,否则编译器将报错。 ```JAVA int storage(String s) { @@ -405,11 +403,13 @@ import java.util.*; #### static关键字 -类是对象的外观及行为方式的描述。通常只有在使用 `new` 关键字之后程序才能被分配存储空间以及使用其方法。 +类是对象的外观及行为方式的描述。通常只有在使用 `new` 关键字之后程序才能被分配存储空间以及使用其方法。这种方式在两种情况下是不足的。 -这种方式在两种情况下是不足的。1. 有时你只需要为特定字段分配一个共享存储空间,无论该类创建了多少个对象,或者即使没有创建任何对象;第二种情况是,创建一个与此类本身任何对象无关的方法。也就是说,即使没有创建对象,也能调用该方法。 +1. 有时你只需要为特定字段分配一个共享存储空间,无论该类创建了多少个对象,或者即使没有创建任何对象; -**static** 关键字(从 C++ 采用)就符合我们的要求。当我们说某些东西是静态的时,它意味着该字段或方法不依赖于任何特定的对象实例。即使我们从未创建过该类的对象,也可以调用其静态方法或访问静态字段。相反,对于普通的非静态字段和方法,我们必须要先创建一个对象并使用该对象来访问该字段或方法,因为非静态字段和方法必须与替对象关联. +2. 创建一个与此类本身任何对象无关的方法。也就是说,即使没有创建对象,也能调用该方法。 + +**static** 关键字(从 C++ 采用)就符合我们的要求。当我们说某些东西是静态的时,它意味着该字段或方法不依赖于任何特定的对象实例 。 即使我们从未创建过该类的对象,也可以调用其静态方法或访问静态字段。相反,对于普通的非静态字段和方法,我们必须要先创建一个对象并使用该对象来访问该字段或方法,因为非静态字段和方法必须与替对象关联 [^6] 。 一些面向对象的语言使用类数据(**class data**)和类方法(**class method**)这样的术语来表述静态。静态的数据意味着该数据和方法仅存在于类中,而非类的任何实例对象中。有时 Java 文献也使用这些术语。我们可以通过在类的属性或方法前添加 `static` 修饰来表示这是一个静态属性或静态方法。 @@ -429,7 +429,7 @@ StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); ``` -st1.i和st2.i的值都是47,因为它们属于同一段内存。引用静态变量有两种方法。在前面的示例中,我们可以通过一个对象来命名它;例如,st2.i。同时,你也可以通过它的类名直接调用它(这是非静态成员不能执行的操作): +st1.i 和 st2.i 的值都是47,因为它们属于同一段内存。引用静态变量有两种方法。在前面的示例中,我们可以通过一个对象来命名它;例如,st2.i。同时,你也可以通过它的类名直接调用它(这是非静态成员不能执行的操作): ```JAVA StaticTest.i ++; @@ -437,7 +437,7 @@ StaticTest.i ++; `++` 运算符将会使变量结果 + 1。此时 st1.i 和 st2.i 的值就变成了48了。 -使用类名直接引用静态变量的首选方法,因为它强调了变量的静态属性。类似的逻辑也适用于静态方法。我们可以通过对象引用静态方法,就像使用任何方法一样,也可以使用特殊的附加语法 classname.method()来直接调用静态属性或方法。 +使用类名直接引用静态变量的首选方法,因为它强调了变量的静态属性。类似的逻辑也适用于静态方法。我们可以通过对象引用静态方法,就像使用任何方法一样,也可以使用特殊的附加语法 classname.method()来直接调用静态属性或方法 [^7]。 代码示例: @@ -448,6 +448,7 @@ class Incrementable { } } ``` + 上例中 Incrementable 类调用静态方法 increment()。后者再使用 `++` 运算符递增静态变量 int i。我们依然可以先实例化对象再调用该方法。 代码示例: @@ -471,9 +472,6 @@ Incrementable.increment(); ## 小试牛刀 最后,我们来开始编写第一个完整的程序。我们使用 Java 标准库来展示一个字符串和日期。 -Finally, here’s the first complete program. It starts by displaying a -String, followed by the date, using the Date class from the Java -standard library. ```JAVA @@ -493,9 +491,9 @@ import java.util.*; 如果你想在代码中使用到一些额外的库,那么你需要在程序文件的开始处使用 **import** 关键字来导入它们。之所以说是额外的,因为有一些库已经默认自动包含到每个文件里了。例如:**java.lang** 包。 -现在打开你的浏览器在 [Oracle](https://www.oracle.com/) 上查看文档。如果你还没有在 [Oracle](https://www.oracle.com/) 网站上下载 JDK 文档,那就趁现在 ^[4] 。查看包列表,你会看到 Java 附带的所有不同的类库。 +现在打开你的浏览器在 [Oracle](https://www.oracle.com/) 上查看文档。如果你还没有在 [Oracle](https://www.oracle.com/) 网站上下载 JDK 文档,那就趁现在 [^8] 。查看包列表,你会看到 Java 附带的所有不同的类库。 + -[^4]: 脚注预留 选择 **java.lang**。这里显示的是该库中所有类的列表。由于 **java.lang** 隐式包含在每个 Java代码文件中,因此这些类是自动可用的。**java.lang** 中没有列出 **Date** 类,所以我们必须将其导入库才能使用它。如果你不清楚某个类名或者想查看所有的类,可以在 Java 文档中选择“Tree”。 @@ -579,7 +577,7 @@ java.io.tmpdir=C:\Users\Bruce\AppData\Local\Temp\ ### 编译和运行 -要编译和运行本书中的代码示例,首先必须具有Java编程环境。 第二章的示例中描述了安装过程。如果你遵循这些说明,那么你将会在不受 Oracle 的限制的条件下用到 Java 开发人员工具包(JDK)。如果你使用其他开发系统,请查看该系统的文档以确定如何编译和运行程序。 第二章还介绍了如何安装本书的示例。 +要编译和运行本书中的代码示例,首先必须具有 Java 编程环境。 第二章的示例中描述了安装过程。如果你遵循这些说明,那么你将会在不受 Oracle 的限制的条件下用到 Java 开发人员工具包(JDK)。如果你使用其他开发系统,请查看该系统的文档以确定如何编译和运行程序。 第二章还介绍了如何安装本书的示例。 移动到 objects 子目录下并键入: @@ -594,13 +592,13 @@ javac HelloDate.java ```JAVA java HelloDate ``` -我们将会获得信息反馈,日期输出。这是我们编译和运行本书中每个程序(包含main())的过程^[9]。但是,本书的源代码在根目录中也有一个名为 **build.gradle** 的文件,其中包含用于自动构建,测试和运行本书文件的 **Gradle** 配置。当您第一次运行 `gradlew` 命令时,**Gradle** 将自动安装(前提已安装Java)。 +我们将会获得信息反馈,日期输出。这是我们编译和运行本书中每个程序(包含main())的过程 [^9]。但是,本书的源代码在根目录中也有一个名为 **build.gradle** 的文件,其中包含用于自动构建,测试和运行本书文件的 **Gradle** 配置。当您第一次运行 `gradlew` 命令时,**Gradle** 将自动安装(前提已安装Java)。 ## 编码风格 -Java 的代码约定规范(*Code Conventions for the Java Programming Language*)要求类名的首字母大写。 如果类名是由多个单词构成的,则每个单词的首字母都应大写(不采用下划线来分隔)例如: +Java 的代码约定规范(*Code Conventions for the Java Programming Language*)[^10] 要求类名的首字母大写。 如果类名是由多个单词构成的,则每个单词的首字母都应大写(不采用下划线来分隔)例如: ```JAVA class AllTheColorsOfTheRainbow { @@ -626,61 +624,28 @@ class AllTheColorsOfTheRainbow { ## 本章小结 -This chapter shows you just enough Java so you understand how to -write a simple program. You’ve also seen an overview of the language -and some of its basic ideas. However, the examples so far have all been -of the form “Do this, then do that, then do something else.” The next -two chapters will introduce the basic operators used in Java -programming, and show you how to control the flow of your program. -1. This can be a flashpoint. There are those who say, “Clearly, it’s a -pointer,” but this presumes an underlying implementation. Also, -the syntax of Java references is much more akin to C++ references -than to pointers. In the 1st edition of Thinking in Java, I chose to -invent a new term, “handle,” because C++ references and Java -references have some important differences. I was coming out of -C++ and did not want to confuse the C++ programmers whom I -assumed would be the largest audience for Java. In the 2nd -edition of Thinking in Java, I decided that “reference” was the -more commonly used term, and that anyone changing from C++ -would have a lot more to cope with than the terminology of -references, so they might as well jump in with both feet. However, -there are people who disagree even with the term “reference.” In -one book I read that it was “completely wrong to say that Java -supports pass by reference,” because Java object identifiers -(according to that author) are actually “object references.” And -(he goes on) everything is actually pass by value. So you’re not -passing by reference, you’re “passing an object reference by -value.” One could argue for the precision of such convoluted -explanations, but I think my approach simplifies the -understanding of the concept without hurting anything (well, -language lawyers may claim I’m lying to you, but I’ll say that I’m -providing an appropriate abstraction).↩ -2. Most microprocessor chips do have additional cache memory but -this is organized as traditional memory and not as registers↩ -3. An example of this is the String pool. All literal Strings and -String-valued constant expressions are interned automatically -and put into special static storage. ↩ -4. static methods, which you’ll learn about soon, can be called for -the class, without an object.↩ -5. With the usual exception of the aforementioned “special” data -types boolean, char, byte, short, int, long, float, and double. In general, -though, you pass objects, which really means -you pass references to objects. ↩ -6. static methods don’t require objects to be created before they -are used, so they cannot directly access non-static members or -methods by calling those other members without referring to a -named object (since non-static members and methods must be -tied to a particular object).↩ -7. In some cases it also gives the compiler better opportunities for -optimization↩ -8. Note this documentation doesn’t come packed with the JDK; you -must do a separate download to get it. ↩ -9. For every program in this book to compile and run through the -command line, you might also need to set your CLASSPATH. ↩ -10. (Search the Internet; also look for “Google Java Style”). To keep -code listings narrow for this book, not all these guidelines could -be followed, but you’ll see that the style I use here matches the -Java standard as much as possible.↩ - -
+本章向您展示了简单的 Java 程序编写以及该语言相关的基本概念。到目前为止,我们的示例都只是些简单的顺序执行。在接下来的两章里,我们将会接触到 Java 的一些基本操作符,以及如何去控制程序执行的流程。 + + + [^1]: 这里可能有争议。有人说这是一个指针,但这假定了一个潜在的实现。此外,Java 引用的语法更类似于 C++ 引用而非指针。在 *Thinking in Java* 的第 1 版中,我发明了一个新术语叫“句柄”(*handle*),因为 C++ 引用和Java 引用有一些重要的区别。作为一个从 C++ 的过来人,我不想混淆 Java 可能的最大受众 —— C++ 程序员。在*Thinking in Java* 的第 2 版中,我认为“引用”(*reference*)是更常用的术语,从 C++ 转过来的人除了引用的术语之外,还有很多东西需要处理,所以他们不妨双脚都跳进去。但是,也有些人甚至不同意“引用”。在某书中我读到一个观点:Java 支持引用传递的说法是完全错误的,因为 Java 对象标识符(根据该作者)实际上是“对象引用”(*object references*),并且一切都是值传递。所以你不是通过引用传递,而是“通过值传递对象引用。人们可以质疑我的这种解释的准确性,但我认为我的方法简化了对概念的理解而又没对语言造成伤害(嗯,语言专家可能会说我骗你,但我会说我只是对此进行了适当的抽象。) + + [^2]: 大多数微处理器芯片都有额外的高速缓冲存储器,但这是按照传统存储器而不是寄存器。 + + [^3]: 一个例子是字符串常量池。所有文字字符串和字符串值常量表达式都会自动放入特殊的静态存储中。 + + [^4]: 静态方法,我们很快就能接触到,它可以在没有对象的情况下直接被类调用。 + + [^5]: 通常除了前面提到的“特殊”数据类型 boolean,char,byte,short,int,long,float 和 double。通常来说,传递对象就意味者传递对象的引用。 + + [^6]: 静态方法在使用之前不需要创建对象,因此它们不能直接调用非静态的成员或方法(因为非静态成员和方法必须要先实例化为对象才可以被使用)。 + + [^7]: 在某些情况下,它还为编译器提供了更好的优化可能。 + + [^8]: 请注意,此文档未包含在 JDK 中;你必须单独下载才能获得它。 + + [^9]: 对于本书中编译和运行命令行的每个程序,你可能还需要设置 CLASSPATH 。 + + [^10]: 为了保持本书的代码排版紧凑,我并没完全遵守规范,但我尽量会做到符合 Java 标准。 + +
\ No newline at end of file From b1dd7665b3fc0d8a0c59dd094a7d1aa8d2b4bb9a Mon Sep 17 00:00:00 2001 From: LingCoder Date: Wed, 20 Mar 2019 10:12:09 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- book/03-Objects-Everywhere.md | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/book/03-Objects-Everywhere.md b/book/03-Objects-Everywhere.md index fb18f13..5f0a8db 100644 --- a/book/03-Objects-Everywhere.md +++ b/book/03-Objects-Everywhere.md @@ -331,9 +331,7 @@ int storage(String s) { ```JAVA s.length() * 2 ``` -产生的。在方法中,我们可以返回任意的数据。如果我们不想方法返回什么数据,则可以通过给方法标识 `void` 来表明这是一个无需返回值的方法。 - -代码示例: +产生的。在方法中,我们可以返回任意的数据。如果我们不想方法返回什么数据,则可以通过给方法标识 `void` 来表明这是一个无需返回值的方法。 代码示例: ```JAVA boolean flag() { @@ -411,9 +409,7 @@ import java.util.*; **static** 关键字(从 C++ 采用)就符合我们的要求。当我们说某些东西是静态的时,它意味着该字段或方法不依赖于任何特定的对象实例 。 即使我们从未创建过该类的对象,也可以调用其静态方法或访问静态字段。相反,对于普通的非静态字段和方法,我们必须要先创建一个对象并使用该对象来访问该字段或方法,因为非静态字段和方法必须与替对象关联 [^6] 。 -一些面向对象的语言使用类数据(**class data**)和类方法(**class method**)这样的术语来表述静态。静态的数据意味着该数据和方法仅存在于类中,而非类的任何实例对象中。有时 Java 文献也使用这些术语。我们可以通过在类的属性或方法前添加 `static` 修饰来表示这是一个静态属性或静态方法。 - -代码示例: +一些面向对象的语言使用类数据(**class data**)和类方法(**class method**)这样的术语来表述静态。静态的数据意味着该数据和方法仅存在于类中,而非类的任何实例对象中。有时 Java 文献也使用这些术语。我们可以通过在类的属性或方法前添加 `static` 修饰来表示这是一个静态属性或静态方法。 代码示例: ```JAVA class StaticTest { @@ -421,8 +417,7 @@ class StaticTest { } ``` -现在,即使你创建了两个 StaticTest 对象,但是静态变量 i 仍只占一份存储空间。两个对象都会共享相同的变量 i。 -代码示例: +现在,即使你创建了两个 StaticTest 对象,但是静态变量 i 仍只占一份存储空间。两个对象都会共享相同的变量 i。 代码示例: ```JAVA StaticTest st1 = new StaticTest(); @@ -437,9 +432,7 @@ StaticTest.i ++; `++` 运算符将会使变量结果 + 1。此时 st1.i 和 st2.i 的值就变成了48了。 -使用类名直接引用静态变量的首选方法,因为它强调了变量的静态属性。类似的逻辑也适用于静态方法。我们可以通过对象引用静态方法,就像使用任何方法一样,也可以使用特殊的附加语法 classname.method()来直接调用静态属性或方法 [^7]。 - -代码示例: +使用类名直接引用静态变量的首选方法,因为它强调了变量的静态属性。类似的逻辑也适用于静态方法。我们可以通过对象引用静态方法,就像使用任何方法一样,也可以使用特殊的附加语法 classname.method()来直接调用静态属性或方法 [^7]。 代码示例: ```JAVA class Incrementable { @@ -449,9 +442,7 @@ class Incrementable { } ``` -上例中 Incrementable 类调用静态方法 increment()。后者再使用 `++` 运算符递增静态变量 int i。我们依然可以先实例化对象再调用该方法。 - -代码示例: +上例中 Incrementable 类调用静态方法 increment()。后者再使用 `++` 运算符递增静态变量 int i。我们依然可以先实例化对象再调用该方法。 代码示例: ```JAVA Incrementable sf = new Incrementable(); @@ -493,25 +484,18 @@ import java.util.*; 现在打开你的浏览器在 [Oracle](https://www.oracle.com/) 上查看文档。如果你还没有在 [Oracle](https://www.oracle.com/) 网站上下载 JDK 文档,那就趁现在 [^8] 。查看包列表,你会看到 Java 附带的所有不同的类库。 - - - 选择 **java.lang**。这里显示的是该库中所有类的列表。由于 **java.lang** 隐式包含在每个 Java代码文件中,因此这些类是自动可用的。**java.lang** 中没有列出 **Date** 类,所以我们必须将其导入库才能使用它。如果你不清楚某个类名或者想查看所有的类,可以在 Java 文档中选择“Tree”。 现在,我们可以找到 Java 附带的每个类。使用浏览器的“查找”功能查找 “Date”。搜索结果中将会列出 java.util.Date,显而易见,它在 util 库中,所以我们必须导入 java.util.* 才能使用 Date。 -如果你在文档中选择 java.lang,然后选择 System,你会看到 System 类中有几个字段,如果你选择 `out`,你会发现它是一个静态的 PrintStream 对象。 所以,即使我们没有使用 new 创建, `out` 对象就已经存在并可以使用。 `out` 对象可以执行的操作取决于 PrintStream 。 其在文档中的描述中显示为超链接,如果单击该链接,我们将可以看到 PrintStream 所对应的方法列表。(更多详情,将在本书后面介绍。) 现在我们重点说的是 println()这个方法。 它的作用是“j将信息输出到控制台,并以换行符结束。” 既然如此,我们可以这样编码来输出信息到控制带。 - -代码示例: +如果你在文档中选择 java.lang,然后选择 System,你会看到 System 类中有几个字段,如果你选择 `out`,你会发现它是一个静态的 PrintStream 对象。 所以,即使我们没有使用 new 创建, `out` 对象就已经存在并可以使用。 `out` 对象可以执行的操作取决于 PrintStream 。 其在文档中的描述中显示为超链接,如果单击该链接,我们将可以看到 PrintStream 所对应的方法列表。(更多详情,将在本书后面介绍。) 现在我们重点说的是 println()这个方法。 它的作用是“j将信息输出到控制台,并以换行符结束。” 既然如此,我们可以这样编码来输出信息到控制带。 代码示例: ```JAVA System.out.println("A String of things"); ``` -每个 java 源文件中允许有多个类。与此同时,源文件的名称必须要和其中一个类名相同,否则编译器将会报错。每个独立的程序应该包含一个 mian 方法作为程序运行的入口。其方法签名和返回类型如下 - -代码示例: +每个 java 源文件中允许有多个类。与此同时,源文件的名称必须要和其中一个类名相同,否则编译器将会报错。每个独立的程序应该包含一个 mian 方法作为程序运行的入口。其方法签名和返回类型如下。代码示例: ```JAVA public static void main(String[] args) { From 7a6ca7efd1754cf2a7e5b5715d8fdd0f9863db39 Mon Sep 17 00:00:00 2001 From: Joe <736777445@qq.com> Date: Thu, 21 Mar 2019 15:00:05 +0800 Subject: [PATCH 10/10] Update README.md fix wrong link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c676703..2fa7410 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ ## 友情链接 -[Effective.Java.3rd.Edition 中文版](https://sjsdfg.github.io/effctive-java-3rd-chinese/#/) +[Effective.Java.3rd.Edition 中文版](https://sjsdfg.github.io/effective-java-3rd-chinese/#/)