目录
一、顺序控制
二、块作用域
三、分支控制
3.1 单分支 if
3.2 双分支 if...else
3.3 多分支 if...else if ...else
3.4 嵌套分支
3.5 选择语句 switch
一、顺序控制
程序从上到下逐行执行,中间没有任何判断和跳转。
public class Test{
//正确形式
int a = 1;
int b = a;
// 错误形式
int c = d + 1;
int d = 2;
}
二、块作用域
块(即复合语句)是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。不能在嵌套的两个块中声明同名的变量。
public static void main(String[] args) {
int n;
...
{
int k;
// 这里就不能定义变量n了
} // k的作用域只到这里
}
三、分支控制
如果判断的具体数值不多,而且符合 byte、short、int、char、enum[枚举]、String 这6种类型,建议使用 swtich语句。
对于区间判断,结果为 boolean 类型判断,建议使用 if,if 的使用范围更广。
3.1 单分支 if
if(条件) {
语句体;
}
当条件表达式为ture时,会执行 { } 中的代码。如果为false,则不执行。如果 { } 中只有一条语句,则可以省略 { },建议写上。
执行流程:
- 首先判断条件是true还是false
- 如果是true就执行语句体
- 如果是false就不执行语句体
import java.util.Scanner;
public class If01 {
public static void main(String[] args) {
// 定义一个scanner对象
Scanner scanner = new Scanner(System.in);
System.out.print("请输入大小:");
// 把大小保存到一个int变量age中
int size = scanner.nextInt();
// 使用if判断,输出对应的信息
if (size >= 18) {
System.out.println("我的很大,你忍一下");
}
System.out.println("程序继续运行....");
scanner.close();
}
}
3.2 双分支 if...else
if(条件) {
语句体1;
}else {
语句体2;
}
当条件表达式成立,执行语句体1,否则执行语句体2。
执行流程:
- 首先判断条件是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
import java.util.Scanner;
public class If02 {
public static void main(String[] args) {
// 定义一个scanner对象
Scanner scanner = new Scanner(System.in);
System.out.print("请输入大小:");
// 把size保存到一个int变量size中
int size = scanner.nextInt();
// 使用if判断,输出对应的信息
if (size >= 18) {
System.out.println("我的很大,你忍一下");
} else {
System.out.println("吴签");
}
System.out.println("程序继续运行....");
scanner.close();
}
}
3.3 多分支 if...else if ...else
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
多分支可以没有else,如果所有的条件都不成立则不执行分支中的代码。如果有else,当所有的条件不成立时,则默认执行else代码块中的代码。
执行流程:
- 首先判断关系表达式1看其结果是true还是false
- 如果是true就执行语句体1
- 如果是false就继续判断关系表达式2看其结果是true还是false
- 如果是true就执行语句体2
- 如果是false就继续判断关系表达式…看其结果是true还是false
- …
- 如果没有任何关系表达式为true,就执行语句体n+1。
import java.util.Scanner;
public class If03 {
public static void main(String[] args) {
// 定义一个scanner对象
Scanner scanner = new Scanner(System.in);
System.out.print("请输入信用分数(1-100):");
// 把信用分保存到一个int变量grade中
int grade = scanner.nextInt();
if (grade >= 1 && grade <= 100) {
// 使用if判断,输出对应的信息
if (grade == 100) {
System.out.println("信用极好");
} else if (grade > 80 && grade <= 99) {
System.out.println("信用优秀");
} else if (grade > 60 && grade <= 80) {
System.out.println("信用一般");
} else {
System.out.println("信用不及格");
}
scanner.close();
} else {
System.out.println("信用分需要在1-100,请重新输入!");
}
}
}
3.4 嵌套分支
在一个分支结构中完整的嵌套了另一个完整的分支结构,里面的分支结构成为内层分支,外面的分支结构成为外层分支。建议不要超过3层,可读性不好。
if() {
if() {
// if - else ...
} else {
// if - else
}
}
3.5 选择语句 switch
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
- switch语句中,case后面的值不可以重复,必须是常量,并且类型保持一致或者可以自动转型。
- 表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符串。
- 如果case的后面不写break,将出现穿透现象,不会判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
- 如果都没有匹配上,则执行default中的语句,default也可以不写。
执行流程:
- 首先计算出表达式的值
- 和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
- 如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
import java.util.Scanner;
public class Switch01 {
public static void main(String[] args) {
// 请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
// a 表示星期一,b 表示星期二 …
// 根据用户的输入显示相应的信息.要求使用 switch 语句完成
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符(a-g):");
char c1 = scanner.next().charAt(0); // .charAt(0) 表示获取第一个字符
char c2 = 'e';
switch (c1) {
case 'a':
System.out.println("今天是星期一");
break;
case 'b':
System.out.println("今天是星期二");
break;
case 'c':
System.out.println("今天是星期三");
// break;
// 会出现穿透情况
case 'd':
System.out.println("今天是星期四");
break;
// case 后面不能加变量,必须是常量或者常量表达式
// case c2:
// System.out.println("今天是星期五");
// break;
case 'f':
System.out.println("今天是星期六");
break;
// case后的类型必须和switch表达式中结果的类型一致或者可以自动转成相互比较的类型
// case "g":
// System.out.println("今天是星期日");
// break;
// default 语句可以不写
// default:
// System.out.println("你输入的字符不对,没有匹配的");
}
System.out.println("switch退出了,继续执行程序");
}
}
执行流程:
- 首先计算出表达式的值
- 和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
- 如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。



