1. 流程控制语句的种类
顺序语句 判断语句 选择语句 循环语句
1.1 顺序语句
流程在日常生活中是必不可少的一部分。比如我们刷牙、吃饭、出门坐车、上班,都是有一定顺序的。在程序中,系统默认是自上而下地执行的,我们称为顺序结构。
1.2 判断语句
判断语句可以让程序在不同情况下,执行不同的代码。
语法如下(形象讲述,伪代码):
假设现在我是吴亦凡;
if(我是蔡徐坤){
我现在要去打篮球
...
}else if(我是吴亦凡){
我可能现在正在rap
...
}else{
上面那些明星我都不是,洗洗睡吧
}
程序代码:
// if(表达式){
// 代码块
// }
int a=5;
if(a==5){//如果a是5,执行此处代码块内容
...
}else if(a==1){//如果a是1,执行此处代码块内容
...
}else{//否则,执行此处代码块内容
...
}
在程序走到判断语句某个条件时,会判断该表达式是否为true:
如果为true,执行里面的内容。
如果为false,判断下一个表达式。
如果都为false,会执行else代码块里的内容。
1.3 选择语句
switch语句就是选择语句,和判断判断语句类似。但是有区别。if语句用于解决区间判断,switch更好地解决等值判断。
举个例子:
我参加一场比赛,
如果获得第一名,老爸请我吃顿小烧烤。
如果获得第二名,啥也没有。
如果获得第三名,赏大嘴巴子一枚。
否则,咳咳。
使用判断语句完全可以解决,如下:
int mingCi=3; //我第三名
if(mingCi==1){
System.out.println("老爸请我吃顿小烧烤。");
}else if(mingCi==2){
System.out.println("啥也没有。");
}else if(mingCi==3){
System.out.println("赏大嘴巴子一枚。");
}else{
System.out.println("嗯?");
}
使用选择语句如下:
switch (mingCi) {
case 1:
System.out.println("老爸请我吃顿小烧烤。");
break;
case 2:
System.out.println("啥也没有。");
break;
case 3:
System.out.println("赏大嘴巴子一枚。");
break;
default: //表示默认,
System.out.println("嗯?");
break;
}
switch语句用到了四个关键字
- switch:表示开关。这个开关就是switch关键字后面小括号里地表达式的值,可以是int、short、byte、char、枚举类型、String类型表达式。
- case:表示情况。case后可以是int、short、byte、char、枚举、String类型,通常是一个固定的值。case块可以有多个,顺序可以改变,但是每个case后常量的值必须各不相同。
- default:表示默认。也就是其他情况都不满足。default后要紧跟冒号。default块和case块的先后顺序可以变动,不会影响程序执行的结果。通常default块放到末尾处,也可以省略。
- break :表示停止。也就是跳出当前结构。
如果需要每个case执行完后跳出当前结构,不要忘记加break。
1.4 循环语句
在满足一定条件下,重复进行相同地或类似的一系列操作,称为循环操作。
java的循环语句有3种实现形式
- while循环操作
当一开始循环条件就不满足的时候,while循环一次也不会执行。//语法 while (循环条件){ //循环操作 } //举例 int i = 1; while (i <= 10) { System.out.println("还来?"); i = i + 1; }
- do-while循环操作
无论如何都先执行一次,再判断循环条件,决定是否继续执行。//语法 do { //循环操作 } while (循环条件); //举例 int i = 1; do { System.out.println("嗯?"); i = i + 1; } while (i <= 10);
- for循环操作
for循环和while循环区别。
如果想循环结束后,继续使用控制条件的那个变量,用while。
否则用for循环,for循环结束后,在for循环里初始化部分声明的变量会被回收,for循环外无法继续使用。//语法 1 2 4 执行顺序按照 1 2 3 4 for(初始部分;条件判断;改变循环变量值){ // 3 循环操作 } //举例 for(int i=0; i<100;i++){ System.out.println("当前i为"+i); }
执行顺序:
- 执行初始部分(int i=0)
- 进行循环条件判断(i<100)
- 循环条件判断结果为true,执行循环体;如果为false,退出循环,i变量回收。步骤4,5不执行
- 执行迭代部分,改变循环变量值(i++)
- 依次重复步骤2~4,直到退出for循环结构。在for循环中,初始部分仅被执行了一次
面试题
1.在判断语句中,什么类型的表达式可以用作条件?
java只支持布尔表达式作为条件。(布尔表达式是返回布尔值true或false的表达式)
2.switch子句中可以使用哪些对象类型?
byte、short、int、char、枚举、String
3. switch子句中忘记写break会发生什么?
继续向下执行。执行完一个case标签,没有发现break,继续执行下一个case标签,直到发现break,即使你的case关键字后面的值和switch关键字后面的值不匹配。
4. 什么时候用判断语句if,什么时候用选择语句switch?
区间判断推荐if,等值判断推荐switch。
5. java支持哪些类型的循环?
三种类型。while循环,do-while循环,for循环。
事先知道任务将重复多少次,用for
for (int i = 0; i < 10; i++) {
// ...
}
特定条件为真,用while
while (iterator.hasNext()) {
// ...
}
至少执行一次,用do-while
do {
// ...
}
6. 增强for循环和普通for循环的区别?
增强for:
int array[] = {1, 1, 1, 1, 1};
for (int item : array) {
System.out.println("数组中当前值为" + item);
}
普通for:
int array[] = {1, 1, 1, 1, 1};
for (int i = 0; i < array.length; i++) {
System.out.println("数组中当前值为" + array[i]);
}
- 增强for需要有被遍历的目标(如集合或数组),普通for只需要目标的长度。
- 增强for不能获取下标,直接操作集合或数组中元素,普通for需要获取下标,对于数组这种下标明确的,建议普通for。
- 增强for比普通for简洁。
- 增强for类似迭代器,用于遍历,获取集合元素,不能操作集合。否则会出现并发修改异常。(迭代器依赖于集合而存在,在集合中新增了新的元素,迭代器却不知道,所以报错,迭代器可以对元素进行remove操作)
普通for可以遍历,可以修改元素。
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Iterator i = list.iterator();//迭代器
while (i.hasNext()) { // 此处判断成功
String str = (String) i.next();//向下转型拿到对应的元素
if (str == "b") {
list.add("d"); //新增新元素
}
}
想要迭代器增删改查,使用ListIterator。
7. 如何退出循环?
break退出当前for循环。如果双重for循环,break在最里层,只退出最里层for循环。
continue跳出当前循环(如循环2次,第一次循环时continue,跳出第一次,开始下一次循环判断)。