0%

ThinkingInJava-2

前言

《Thinking in Java(第四版)》的第三,四章主要介绍了Java中基本的操作符及控制执行流程的相关关键字。

操作符

本书的第三章-操作符,主要介绍了Java中使用到的各种操作符。

1. 算术运算符:+, -, *, /, %
2. 关系操作符:>, <, ==, >=, <=
3. 逻辑操作符:&&, ||, !
4. 直接常量的类型指定:l L, f F, d D, 0x[n](16进制), 0[n](8进制) 
5. 按位操作符:&, |, ~
6. 移位操作符:>>, <<, >>>
7. 条件操作符:? :

操作符比较好理解,需要注意的几点:

1. 操作符的顺序,如果不能确定建议使用()控制。这样也能提高代码的可读性
2. 逻辑操作符有短路的特性
3. 按位操作符,移位操作符都是针对二进制的操作,其中对char,byte,short类型的
   数据进行移位操作时会先转为int类型,结果也是int

关于按位操作符和移位操作符的具体信息可以参考<Java-位运算符>

直接常量

某些时候,编译器可能无法确定一些直接常量的类型,就需要用到一些字符辅助。
例如:Java中会将指数当作double处理,那么对于float f = 1e-10;,如果不使用f 作为后缀即1e-10f。就会报错,告诉我们需要将double转为float。

控制执行流程

本书的第四章,主要介绍判断,循环,跳转等流程控制的相关关键字。

foreach

加强型for循环,作为普通for循环的替代,因为不必创建int变量对访问项计数,提高了代码的可读性。
但也正是因为不用计数,所以在需要计数操作的场景下无法使用。
不过书中有提到这么一个办法:

1. 新建一个方法创建int数组 range(int i)
2. foreach直接调用这个方法 for(int i : range(10)){}

虽然这样可以让foreach适用更多场景,借此提高代码可读性。但是有些为了使用而使用的感觉。毕竟相对使用for,使用foreach需要先新建一个int数组,这个代价是否值得需要思量。

标签

一般我们使用break,continue都是用于跳出循环,break中断并跳出当前循环,continue中断并跳出当次循环。
不过书中提到了标签,这个用的很少,所以记录一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 标签是跟有冒号的标识符,如 a:,他作用的唯一地方是在一个迭代语句之前,作为break,continue的一个锚
a:
for (int x = 0; x < 5; x++) {
b:
for (int y = 0; y < 4; y++) {
c:
for (int z = 0; z < 3; z++) {
System.out.println("start:" + x + "," + y);
if (z == 0) {
System.out.println("if:" + z);
continue a;
// break a;
}
}
}
}

如上述示例代码,三层嵌套的for循环,每一个都加了一个标签。当break/continue后面跟上标签时,在中断循环后,他们会跳到标签所在的位置再继续后续操作。
例如这里的continue a,不加标签的话会跳出当次循环继续z的自增循环,加了标签后,效果变为中断当次循环,跳到标签所在也就是最外层循环然后继续。

  标签一般用于多层嵌套循环中控制break,continue的跳出位置。但是实际开发中是不建议使用多层嵌套循环
的,而且使用不善的话容易降低代码的可阅读性,需要谨慎使用。

小结

操作符与流程控制的关键字都是比较基础的知识点。所以只记录实际开发中较少使用或者没接触过的知识点。

下一章 <ThinkingInJava-3>