点击上方"Java软件编程之家"可以关注我哦,文末也有公众号二维码可以直接扫码关注!
关注后回复"Java"关键字可以获取正在更新中的Java系统性学习教程,回复"资源"可以免费获取电子书!
流程控制
流程控制语句对于任何一门高级语言来说都是很普遍的,一般分为条件流程控制和循环流程控制两种。
条件流程控制(在什么情况下做点不同的事情):条件流程控制的作用是根据布尔(boolean)值或布尔表达式(true、false)来控制逻辑的执行。就拿考驾照来说,当分数达到90分时提示合格否则提示不合格,这种就是典型的条件流程控制场景。
循环流程控制)(在什么情况下不停地做同一件事情):循环流程控制的作用也是根据布尔(boolean)值或布尔表达式来控制循环执行某段程序代码,当布尔(boolean)值或布尔表达式为false时将终止循环。就拿商城商品列表来说,如果有1W个商品要展示,假定一行代码可以显示一个商品的话,如果没有循环的话,岂不是要写1W行代码来实现。
if语句
if 语句是条件控制流程语句,对单种情况判断控制时使用,例如:如果未满16岁则不能入职(否则就算童工)。它的代码语法格式如下:
if (boolean){
//当boolean为true时,进入这里的流程
}
下面是代码例子:
package com.java.base.chapter7;
public class IfExample {
public static void main(String[] args) {
// 定义int类型年龄变量
int age = 15;
//下面是流程控制语句
if (age <= 16) {
System.out.println("你是童工,不能入职");
}
}
}
控制台输出:
你是童工,不能入职
if..else语句
if...else语句也是条件控制流程语句,对多种情况连续判读控制时使用,应该是所有高级开发语言中最常用的一种条件流程控制语句,它的代码语法格式如下:
if (boolean){
//当boolean为true时,进入这里的流程
} else {
//当boolean为false时,进入这里的流程
}
下面是代码例子:
package com.java.base.chapter7;
public class IfElseExample {
public static void main(String[] args) {
// 定义分数变量
int score = 90;
// 下面是流程控制
if (score >= 90) {
System.out.println("合格");
} else {
System.out.println("不合格");
}
}
}
控制台输出:
合格
if..else...else if 语句
if..else..else if语句是if ..else语句的增强版,下面是代码例子:
package com.java.base.chapter7;
public class IfElseIfExample {
public static void main(String[] args) {
// 定义红路灯颜色变量, 1:红灯 2:路灯 3:黄灯
int color = 1;
if (color == 1) {
System.out.println("红灯停");
} else if (color == 2) {
System.out.println("绿灯行");
} else if (color == 3) {
System.out.println("黄灯等");
} else {
System.out.println("红路灯已坏");
}
}
}
控制台输出:
红灯停
其中else if可以有很多个,最后else语句可要可不要,但一般都需要处理else无法预知的情况。
switch语句
switch分支语句也是条件流程控制语句,也是对多种情况连续判断控制时使用,下面是代码例子:
package com.java.base.chapter7;
public class SwitchExample {
public static void main(String[] args) {
// 定义红路灯颜色变量, 1:红灯 2:路灯 3:黄灯
int color = 1;
// 下面是switch流程控制语句
switch (color) {
case 1:
System.out.println("红灯停");
// break跳出当前作用域,继续执行上一个作用域程序
// 每一个case处理完必须通过break来跳出,否则所有case都会被执行
break;
case 2:
System.out.println("绿灯行");
break;
case 3:
System.out.println("黄灯等");
break;
default:
System.out.println("红路灯已坏");
break;
}
}
}
控制台输出:
红灯停
while循环语句
while循环语句是循环流程控制语句,它的语法相对简单,代码语法格式如下:
while(boolean){
//这里处理循环执行的程序代码
}
下面是代码例子:
package com.java.base.chapter7;
public class WhileExample {
public static void main(String[] args) {
// 定义需要显示的商品条数
int count = 100;
// 判断条数是否大于0,只要大于0就继续显示
while (count > 0) {
// 显示
System.out.println("显示商品: " + count);
// 每显示一条,count减去1
count--;
}
}
}
控制台输出:
显示商品: 100
显示商品: 99
显示商品: 98
显示商品: 97
显示商品: 96
显示商品: 95
显示商品: 94
显示商品: 93
显示商品: 92
显示商品: 91
显示商品: 90
显示商品: 89
显示商品: 88
...
for循环语句
for循环语句也是循环流程控制语句,但是它的语法相对while语句比较复杂些,下面是for语句的代码语法格式:
for (初始化变量;boolean;操作表达式){
//循环执行程序代码
}
下面是代码例子:
package com.java.base.chapter7;
public class ForExample {
public static void main(String[] args) {
// 初始化变量 ; int count = 100; 可选
// boolean; count > 0; 可选,默认为true
// 操作表达式 count-- 可选
// 所有为空时语法为for (;;) {} 等同while(true){}
for (int count = 100; count > 0; count--) {
System.out.println("显示商品:" + count);
}
}
}
控制台输出:
显示商品: 100
显示商品: 99
显示商品: 98
显示商品: 97
显示商品: 96
显示商品: 95
显示商品: 94
显示商品: 93
显示商品: 92
显示商品: 91
显示商品: 90
显示商品: 89
显示商品: 88
...
嵌套
前面讲的条件流程控制语句以及循环流程控制语句可以互相嵌套使用,下面是嵌套代码例子一:
package com.java.base.chapter7;
public class NestingExample {
public static void main(String[] args) {
// 定义需要显示的商品条数
int count = 100;
// 判断条数是否大于0,只要大于0就继续显示
while (true) {
//通过嵌套if语句,判断商品数量是否显示完毕,如果显示完毕则跳出当前循环
if (count <= 0) {
break;
}
// 显示
System.out.println("显示商品: " + count);
// 每显示一条,count减去1
count--;
}
}
}
嵌套代码例子二:
package com.java.base.chapter7;
public class NestingExample2 {
public static void main(String[] args) {
// 定义需要显示的商品条数
int count = 100;
// 这里不考虑逻辑合理性,纯粹为了演示嵌套
if (count > 0) {
for (; count > 0; count--) {
// 这里不考虑逻辑合理性,纯粹为了演示嵌套
if (count > 0) {
// 这里不考虑逻辑合理性,纯粹为了演示嵌套
while (count > 0) {
// 这里不考虑逻辑合理性,纯粹为了演示嵌套
if (count > 0) {
// 显示
System.out.println("显示商品: " + count);
}
count--;
}
}
}
} else {
// 显示完毕
System.out.println("没有更多" + count);
}
}
}
break、continue、return语句
break、continue、return语句经常跟流程控制语句配合使用,而且配合度非常高,下面分别介绍:
break语句:break语句可以跳出第一个外层循环体,例如当商品列表页只需要显示10条商品时,就可以在循环体中嵌套一个if语句判断是否达到10条,如果达到则跳出当前循环。下面是代码例子:
package com.java.base.chapter7;
public class BreakExample {
public static void main(String[] args) {
// 定义需要显示的商品条数
int count = 1;
// 固定true表示永远循环下去
while (true) {
// 如果显示商品数超过10条,则跳出当前循环
if (count > 10) {
break;
}
// 显示
System.out.println("显示商品: " + count);
// 每显示一条,count加1
count++;
}
}
}
控制台输出:
显示商品: 1
显示商品: 2
显示商品: 3
显示商品: 4
显示商品: 5
显示商品: 6
显示商品: 7
显示商品: 8
显示商品: 9
显示商品: 10
continue语句:continue语句可以跳过循环中的某一条数据,例如当商品列表页只需要显示能被2整除的商品,跳过任何不能被2整除的商品,代码例子如下:
package com.java.base.chapter7;
public class ContinueExample {
public static void main(String[] args) {
// 定义需要显示的商品条数
int count = 1;
// 固定true表示永远循环下去
while (count <= 10) {
// 如果不能被2整除则跳过,继续处理下一条
if (count % 2 != 0) {
// 每处理一条,count加1,保证程序准确性
count++;
continue;
}
// 显示
System.out.println("显示商品: " + count);
// 每显示一条,count加1
count++;
}
}
}
控制台输出:
显示商品: 2
显示商品: 4
显示商品: 6
显示商品: 8
显示商品: 10
return语句:return语句是方法准备返回结束的标记,方法内部一旦遇到return关键字,就意味着这个方法准备返回并结束了。下面是代码例子:
package com.java.base.chapter7;
public class ReturnExample {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
break;
}
//这里会被执行,因为break跳出的是第一层外层循环
System.out.println("i: " + i);
}
System.out.println("========= 这是分割线 =============");
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
return;
}
//这里不会被执行,因为return返回结束了当前方法当前方法
System.out.println("i: " + i);
}
System.out.println("这里也不会被执行");
}
}
控制台输出:
i: 0
i: 1
i: 2
i: 3
i: 4
========= 这是分割线 =============
作用域
作用域是基于块,编译后(考虑到java语法糖问题)被花括号所定义的就是一个块,通常有类块、方法块、流程控制块等。一个块一个作用域,作用域主要作用是控制不同作用域之间变量的访问权限和命名以及存在时间,控制力度又跟作用域之间是否存在父子层级关系有关,下面通过一个矩形表格来描述这几种情况:
是否存在父子关系 | 变量访问权限 | 变量命名 | 存在时间 |
是 | 1、父级无法直接访问子级已经定义的变量。 2、子级可以直接访问父级已经定义的变量。
| 1、子级定义变量不能跟父级已经存在的变量重名。 | 1、当前作用域结束符号(})和return语句之前。 |
否 | 1、不同作用域之间无法直接访问变量。 2、但可以通过其它间接的方式访问。 | 1、完全独立,可以重名。 |
作用域对于任何一门高级开发语言都是非常重要和普遍的,如果没有作用域的控制,那么所有程序定义的变量将会在同一个作用域命名空间中,重名的概率将会非常大,这种情况定义变量将会非常麻烦,甚至会导致程序运行过程产生大量的赋值结果错误。下面是代码例子:
package com.java.base.chapter7;
public class ScopeExample {
public static void main(String[] args) {
// 这是main方法块作用域
int count = 0;
if (count < 1) {
// 因为子级可以直接访问父级已经定义的变量,所以这里可以访问并修改父级count变量
count = 10;
/**
* 这行代码会报错,根据表格说明if作用域是main方法作用域的子级, 属于存在父子关系,子级定义变量不能跟父级已经存在的变量重名
*/
// int count = 20;
int maxCount = 100;
}
// 这行代码会报错,父级无法直接访问子级已经定义的变量maxCount
// int count = maxCount;
if (count > 0) {
// 因为这里if作用域跟上面if作用域是平级关系,属于完全独立的作用域,不存在父子关系
// 所以这里可以定义一个名字跟上面一样的变量maxCount,它们互不影响
int maxCount = 10;
}
}
}
上面简单演示只有一层父子关系的代码例子,如果嵌套多层父子关系也是遵循表格的定义规则。
小结
本章小结如下:
1、介绍条件流程控制和循环流程控制的概念和作用。
2、介绍if条件流程控制语句。
3、介绍switch条件流程控制语句。
4、介绍while循环流程控制语句。
5、介绍流程控制语句的各种组合嵌套。
6、介绍break、continue、return语句。
7、介绍作用域的概念和作用。
---------------------- 正文结束 ------------------------
长按扫码关注微信公众号
Java软件编程之家