Java
Java
目录
结构化编程
Java的控制流程结构与C和C++的控制流程结构一样,只有很少的例外情况。
没有goto语句,但break语句可以带标签,可以利用它实现从内层循环跳出的目的(这种情况C语言采用goto语句实现)。
另外,还有一种变形的for循环,在C或C++中没有这类循环(C++11有)。它有点类似于C#中的foreach循环。
块(block)作用域
(有时称为复合语句)
{}
与C/C++、js不同:嵌套块重定义变量
- C/C++、js:可以在嵌套的块中重定义一个变量。在内层定义的变量会覆盖在外层定义的变量。
- Java:认为这样有可能会导致程序设计错误,因此在Java中不允许这样做。
条件语句
if、else if、else
if (condition) statement; // statement可为语句块 {}
if (condition1) statement1;
else if(condition2) statement2;
else statement3;
switch语句(多重选择)
Java有一个与C/C++完全一样的switch语句
注意项
有可能触发多个case分支。如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支语句。这种情况相当危险,常常会引发错误。为此,我们在程序中从不使用switch语句。
若一定要用,可以在编译时加上
-Xlint: fallthrough
选项,如javac -Xlint:fallthrough Test.java
这样的话,如果某分支末尾缺少break语句,编译器会给出警告消息当在switch语句中使用枚举常量时,不必在每个标签中指明枚举名,可以由switch的表达式值确定。例如
Size sz = ...; switch(sz) { case SMALL: // no need to use Size.SMALL //... break; }
Break 中断控制流程语句
循环
while、do while 循环
while (condition) statement; // 首先检测循环条件
do statement while (condition); // 首先执行,再检测循环条件
for循环
for (int i=1; i<=10; i++) statement; // 先初始化 > 判断 > 执行 > 判断(循环)
注意项:
- 不成文的规则:for语句的3个部分应该对同一个计数器变量进行初始化、检测和更新。否则编写的循环常常晦涩难懂。
- 特别指出,如果在for语句内部定义一个变量(int i),这个变量就不能在循环体之外使用(java不能在块中重定义变量) 当然可以在各自独立的不同for循环中定义同名的变量 如果希望在for循环体之外使用循环计数器的最终值,就要确保这个变量在循环语句的前面且在外部声明
Break 中断控制流程语句
[省略],与用于退出switch语句的break语句一样
注意项:对于任何使用break语句的代码都需要检测循环是正常结束,还是由break跳出
跳出多重嵌套
与C/C++不同:跳出多重嵌套
Java还提供了一种带标签的break语句,用于跳出多重嵌套的循环语句。有时候,在嵌套很深的循环语句中会发生一些不可预料的事情。
标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号
事实上,可以将标签应用到任何语句中,甚至可以应用到if语句或者块语句中。(可能可以用来模拟goto语句,但不建议那样做)
read_data: while(...) { for(...){ break read_data; // break out of read_data loop } }
continue 中断控制流程语句
continue语句越过了当前循环体的剩余部分,立刻跳到循环首部
for each循环(通用for循环)
与C/C++不同:高级循环
Java(Java SE 5.0新增)
for (variable:collection) statement; for (int element : a) System.out.println(element);
三目运算符
- C、Java、Js:
条件 ? true_exp : false_exp
- Python:
true_exp if 条件 else false_exp