一、表达式和语句

  • 表达式类型

    • a. 计算表达式,由变量或常量和运算符构成
    • b. new 表达式,结果是一个数组或类的对象
    • c. 方法调用表达式,结果是方法返回值或void(无返回值)
  • 语句分为单语句和复合语句

    • 单语句分为
      • a. 空语句,什么功能都没有,就是单独的一个分号
      • b. 表达式语句,就是表达式后面加分号
        • new表达式
        • 方法调用表达式
        • 计算表达式中的赋值表达式、自增自减表达式
    • 复合语句分为
      • a. 分支语句:if...elseswitch...case
      • b. 循环语句:for,while,do...while
      • c. 跳转语句:break,continue,return,throw
      • d. try语句:try...catch...finally
      • e. 同步语句:synchronized

二、Scanner输入语句

1、各种类型的数据输入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Scanner;
//如果在.java源文件上面没有这句import语句,
//那么在代码中每次使用Scanner就要用java.util.Scanner的全名称,比较麻烦

/*
键盘输入代码的四个步骤:
1、申请资源,创建Scanner类型的对象
2、提示输入xx
3、接收输入内容
4、全部输入完成之后,释放资源,归还资源

如果你在键盘输入过程中,遇到java.util.InputMismatchException异常,
说明你输入的数据,其类型与接收数据的变量的类型不匹配。
*/
public class Test05Input {
public static void main(String[] args) {
//1、准备Scanner类型的对象
//Scanner是一个引用数据类型,它的全名称是java.util.Scanner
//input就是一个引用数据类型的变量了,赋给它的值是一个对象
//new Scanner(System.in)是一个new表达式,该表达式的结果是一个对象
//引用数据类型 变量 = 对象;
//这个等式的意思可以理解为用一个引用数据类型的变量代表一个对象,所以这个变量的名称又称为对象名
//我们也把input变量叫做input对象
Scanner input = new Scanner(System.in);//System.in默认代表键盘输入
//这里变量名是input,下面就用input

//2、提示输入xx
System.out.print("请输入一个整数:");

//3、接收输入内容
int num = input.nextInt();
System.out.println("num = " + num);

//列出其他常用数据类型的输入
/*
long bigNum = input.nextLong();
double d = input.nextDouble();
boolean b = input.nextBoolean();
String s = input.next();
char c = input.next().charAt(0);//先按照字符串接收,然后再取字符串的第一个字符(下标为0)
*/

//释放资源
input.close();
}
}

2、next()与nextLine()

  • next()方法:遇到空格等空白符,就认为输入结束
  • nextLine()方法:遇到回车换行,才认为输入结束
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Scanner;

public class Test08NextAndNextLine {
public static void main(String[] args) {
//申请资源
Scanner input = new Scanner(System.in);

System.out.print("请输入姓名:");
//String name = input.next();//张 三 只能接收张,后面的空格和三无法接收,被下面的输入接收
String name = input.nextLine();
System.out.println("name = " + name);

System.out.print("请输入年龄:");
int age = input.nextInt(); //23回车换行 这里只接收23,回车换行被下面的输入接收
input.nextLine();//读取23后面的回车换行,只有下一个输入是nextLine()的情况下才需要
System.out.println("age = " + age);

System.out.print("请输入电话号码:");
String tel = input.nextLine();
System.out.println("tel = " + tel);

//释放资源
input.close();
}
}

三、分支语句

1、单分支条件判断:if

1
2
3
if(条件表达式){
语句体;

2、双分支条件判断:if…else

1
2
3
4
5
if(关系表达式) { 
语句体1;
}else {
语句体2;
}

3、多分支条件判断:if…else if

1
2
3
4
5
6
7
8
9
10
11
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}

4、多分支选择结构:switch…case

1
2
3
4
5
6
7
8
9
10
11
12
13
switch(表达式){
case 常量值1:
语句块1;
break;】
case 常量值2:
语句块2;
break;】
...
default:
语句块n+1;
break;】

}

(1)switch表达式的值的类型

  • 4种基本数据类型(byte,short,int,char)
  • 两种引用数据类型(JDK1.5之后枚举、JDK1.7之后String)

(2)case后面必须是常量值,而且不能重复

(3)执行过程

  • a. 入口

    • ①当switch表达式的值与case后面的某个常量值匹配,就从这个case进入
    • ②当switch表达式的值与case后面的所有常量值都不匹配,寻找default分支进入
  • b. 一旦从“入口”进入switch,就会顺序往下执行,直到遇到“出口”,即可能发生贯穿

  • c. 出口

    • ①自然出口:遇到了switch的结束}
    • ②中断出口:遇到了break

Java12之后switch新特性:作为预览语言功能的第一个语言改动被引入Java12 中,开始支持如下写法

1
2
3
4
5
6
7
switch(month) {
case 3,4,5 -> System.out.println("春季");
case 6,7,8 -> System.out.println("夏季");
case 9,10,11 -> System.out.println("秋季");
case 12,1,2 -> System.out.println("冬季");
default->System.out.println("月份输入有误!");
};

5、if语句与switch语句比较

条件 穿透性
if语句 布尔类型值,可以用于范围的判断,也可以用于等值的判断,使用范围更广
swith语句 常量值,使用场景较狭窄 有,可以同时执行多个分支

四、循环语句

1、while循环

  • 循环条件必须是boolean类型
1
2
3
while (循环条件语句①) {
循环体语句②;
}

2、do…while循环

  • 循环条件必须是boolean类型
  • 最后有一个分号;
  • 至少会执行一次
1
2
3
do {
循环体语句①;
} while (循环条件语句②);

3、for循环

  • 循环条件必须是boolean类型
  • for()中的两个;不能多也不能少
1
2
3
for(初始化语句①; 循环条件语句②; 迭代语句④){
循环体语句③
}
  • 增强for循环:数组或集合每次循环拿出一个给左侧的变量或者对象
1
2
3
for(变量or对象:数组or集合){
循环体语句
}

4、关键字break

使用场景

  • switch…case语句中终止switch
  • 循环语句中终止当前循环

5、关键字continue

使用场景

  • 循环语句中提前结束本次循环,继续下一次的循环
  • 提高效率

6、循环语句的区别

  • 三种循环结构都具有的四要素

    • 循环变量的初始化表达式
    • 循环条件
    • 修改循环变量的迭代表达式
    • 循环体语句块
  • 三种循环结构的区别

    • forwhile循环先循环条件语句是否成立,然后决定是否执行循环体,至少执行零次循环体语句
    • do...while循环至少执行一次循环体语句
  • 选择循环结构

    • for循环:遍历有明显的循环次数(范围)的需求
    • while循环:遍历没有明显的循环次数(范围)的需求
    • do...while循环:循环条件依赖循环操作时的需求

7、循环嵌套

执行特点:外循环执行一次,内循环执行一轮

1
2
3
4
5
for(初始化语句①; 循环条件语句②; 迭代语句⑦) {
for(初始化语句③; 循环条件语句④; 迭代语句⑥) {
循环体语句⑤;
}
}