《Think in java·第 3 章控制程序流程》
这一章应该不会涉及“思想”,《编程导论(Java)·0.2.2 操作符和操作数》后,将相关内容压缩成一节《第3章功能抽象·3.2实现》。
3.1 使用Java 运算符
副作用(side effect):【p98:副作用一般是针对操作(表达式)而言的,一个操作/表达式有“副作用”是指在对该表达式求值时,会改变程序的一个或多个数据,以致再次对该表达式求值时,可能会得出不同的结果。事实上,Java的4种表达式语句如赋值、自增自减、方法调用、对象创建都可能带来副作用。这里讨论方法的副作用。……】
3.1.1 优先级 非常简洁
3.1.2 赋值 【由于这并非一个简单的话题,所以留待第12 章详细论述,那一章是专门讨论别名的。】“别名”似乎是一个非常简单的问题,拭目以待吧。
3.1.3 算术运算符 这里面插入正则表达式?
3.1.4 自动递增和递减 【p105 当x++,++x作为更大的表达式的一部分时,假定x为2,则x++表达式的值为2,++x表达式的值为3。】很容易理解的。
3.1.5 关系运算符 【The relational operators == and != also work with all objects, but their meaning often confuses the first-time Java programmer. 】本来很简单的,被作者自己搞得找不到北。== and != 不管对基本类型还是引用类型的变量,判断其值是否相等。【两个引用相等说明它们指向同一个对象。一般地,(new
A() == new A())总等于false,因为创建的两个对象分别有自己的引用。】使用没有改写的Object.equals()方法?
3.1.6 逻辑运算符
3.1.7 按位运算符 我把位运算单独地放在《第12章 位运算》,位运算在汇编语言中被广泛使用,说什么C语言。【The boolean type istreated as a one-bit value, so it is somewhat different. 】Java语言从来不这样看boolean。&,|和^是重载的操作符。Java “logical” operators有6个,baby。
3.1.8 移位运算符 移位运算的例子中,最好使用0x8000_0000这种Java7添加的表达方式。
3.1.9 三元if-else 运算符 我把它放在《3.2.3 if语句》中。
3.1.10 逗号运算符 在Java 里需要用到逗号的唯一场所就是for 循环
3.1.11 字串运算符+ Although operator overloading would have been much simpler to implement in Java than it was in C++, this feature was still considered too complex
3.1.12 运算符常规操作规则 Common pitfalls when using operators:为什么提括号?
3.1.13 造型运算符
Literals 为什么在这里讲文字?‘e’ refers to the base of natural logarithms,为什么e不能够是exp的缩写?
3.1.14 Java 没有“sizeof” 多余
3.1.15 复习计算顺序 用一句话来帮助记忆,可以考虑一下
3.1.16 运算符总结 一个烂例程用了8页!
3.2 执行控制
if-else, while, do-while, switch.我有个疑问,为什么清华大学出版社要把if-else改成if…else,难道我的小学语言是体育老师教的?,我好不习惯if…else if…else。
3.2.1 真和假
3.2.2 if-else
3.2.3 反复/Iteration 翻译肯定不是搞计算机的。迭代
3.2.4 do-while 【Traditional procedural languages like C require that all variables be defined at the beginning of a block so that ...】C11也不需要在块开头定义所有变量了。1. 逗号运算符,说成分隔符,问题不大。Java中完全可以把它视为“;”的替代品。
3.2.6 中断和继续
1. 臭名昭著的“goto” 【对Java 来说,唯一用到标签的地方是在循环语句之前。】语法上,标签可以为任何一个语句(除了声明语句)添加标识。
Case:if(level==10){ pln("极好"); break Case; } Case:if(level==9) { pln("极好"); break Case; } Case:if(level==8){ pln("好"); break Case; } Case:if(level==7){ pln("好"); break Case; } Case:if(level==6){ pln("及格"); break Case; } if(level<6){ pln("不及格"); }
你可以将上面的代码执行,或者改成标准的switch语句(注意:代码中Case不是case)。
3.2.7 switch
没有意思的一章。
读TIJ -3 控制程序流程