Java基础学习(三)
Java基础学习(三):流程控制
本文为个人学习记录,内容学习自 狂神说Java 和 黑马程序员
用户交互
输出
System.out.print(); // 最基本的输出语句
System.out.print("\n"); // 手动换行
System.out.println(); // 输出完自带换行的输出语句
System.out.printf(); // 带占位符的输出语句
小技巧:在 IntelliJ IDEA 中,直接输入 sout + Enter
即可快速生成 System.out.println();
输入
在 JDK5 引入了 java.utils.Scanner
,可以通过 Scanner 类获取用户的输入
-
Scanner 类的 next 方法:
-
使用 next() 方法获取输入的字符串
- 阻塞线程,若此时缓冲区中存在有效字符串,则直接取出,否则等待用户输入内容,此时输入的内容会被保存至缓冲区,直至键入回车时检查是否存在有效字符串,若存在则取出,否则继续等待用户输入,如此循环往复
- 此处的有效字符串是以空格、制表符、换行符等分隔符进行分隔的字符串
- 对于缓冲区中有效字符之前的空白字符,会自动将其从缓冲区中去除
- 只从缓冲区中取出第一个有效字符串
- 取出数据后,不会移除缓冲区中键入的换行符
- 无法得到带有空白(空格和制表符)的字符串
Scanner scanner = new Scanner(System.in); // 创建Scanner对象 System.out.println("请输入内容:"); String str = scanner.next(); // 使用next方法接收,该语句会阻塞线程直至输入有效字符并键入回车 System.out.println("输入的内容为:" + str); scanner.close(); // 凡是属于IO流的类,如果不关闭就会一直占用资源
-
使用 nextLine() 方法获取输入的字符串
- 阻塞线程,若此时缓冲区中存在字符串,则直接取出,否则等待用户输入内容,此时输入的内容会被保存至缓冲区,直至键入回车时从缓冲区中读取字符串
- 取出数据后,会移除缓冲区中键入的换行符,但返回的字符串中不包含换行符
- 可以获得带空白(空格和制表符)的字符串
Scanner scanner = new Scanner(System.in); // 创建Scanner对象 System.out.println("请输入内容:"); String str = scanner.nextLine(); // 使用nextLine方法接收,该语句会阻塞线程直至键入回车 System.out.println("输入的内容为:" + str); scanner.close(); // 凡是属于IO流的类,如果不关闭就会一直占用资源
-
其他的方法,如 nextInt()、nextFloat()、nextBoolean() 和 next() 同理,它们是“同一类”的方法
-
next()、nextInt()、nextFloat() 等方法尽量不要和 nextLine() 方法混用,因为前者在取出数据后不会将用户键入的换行符从缓冲区中移除,在这之后如果使用了后者,则会导致后者直接读取缓冲区中剩余的换行符进而直接输出了空字符串
-
再举个复杂点的栗子:
Scanner scanner = new Scanner(System.in); System.out.println("请输入数据:"); // 输入 " 12 345 ",中间的空白为空格 String i = scanner.next(); String j = scanner.nextLine(); System.out.println("输出i:"+i); // 输出为 "12" System.out.println("输出j:"+j); // 输出为 " 345 "
-
-
Scanner 类的 hasNext 方法:
-
使用 hasNext() 方法判断是否有字符串
- 阻塞线程,若此时缓冲区中存在有效字符串,则直接返回true,否则等待用户输入内容,此时输入的内容会被保存至缓冲区,直至键入回车时检查是否存在有效字符串,若存在则返回true,否则继续等待用户输入,如此循环往复
- 仅进行判断,不会从缓冲区中取出数据
-
使用 hasNextLine() 方法判断是否有字符串
- 阻塞线程,若此时缓冲区中存在字符串,则直接返回true,否则等待用户输入内容,此时输入的内容会被保存至缓冲区,直至键入回车时返回true
- 仅进行判断,不会从缓冲区中取出数据
-
其他的方法,如 hasNextInt()、hasNextFloat()、hasNextBoolean() 和 hasNext() 同理,只有当缓冲区中存在有效字符串时才进行判断,不同点在于会根据输入数据的类型判断返回值为true还是false
- 主要用于判断输入的数据类型
if (scanner.hasNextInt()){ // 判断接收到的是不是int类型 i = scanner.nextInt(); // 从缓冲区中取出数据 System.out.println("输入为整型"); }else { System.out.println("输入不为整型"); } scanner.close();
-
代码结构
Java 代码包含了三种基本结构:顺序结构、选择结构、循环结构
选择结构
-
if 单选择结构
if (布尔表达式) { // 如果布尔表达式为true执行的语句 }
-
if 双选择结构
if (布尔表达式) { // 如果布尔表达式为true执行的语句 } else { // 如果布尔表达式为false执行的语句 }
-
if 多选择结构
if (布尔表达式1) { // 如果布尔表达式1为true执行的语句 } else if (布尔表达式2) { // 如果布尔表达式2为true执行的语句 } else if (布尔表达式3) { // 如果布尔表达式3为true执行的语句 } else { // 如果以上布尔表达都不为true执行的语句 }
-
switch 多选择结构
switch语句中的变量类型可以是:
- byte、short、int 或者 char
- 从 JDK5 开始支持枚举,从 JDK7 开始支持 String
- case: 后面的值只能是字面量,不能是变量
switch (表达式) { case 值1 : // 语句1 break; // 可选 case 值2 : // 语句2 break; // 可选 default: // 可选 // 语句3 }
注意:1. break 用于退出 switch-case 语句,没有 break 的话会顺序执行后续语句直至 break 或者语句结束
2. 当不满足所有case时,执行default,default不一定要放在最后面,但习惯写在最后
循环结构
-
while 循环
while (布尔表达式) { // 循环语句 }
-
do-while 循环
do { // 循环语句 } while (布尔表达式);
-
for 循环
for (初始化; 布尔表达式; 更新) { // 循环语句 }
注意:for 循环中“初始化”、“布尔表达式”、“更新”三部分都可以省略,如果省略了布尔表达式将会变成死循环;“初始化部分”虽然只能有一句声明语句,但可以声明多个变量,如
int i = 0, j = 0
,“更新”部分可以存在多个式子,如i++, j++
-
JDK5 新增:增强型 for 循环(也称为 for-each 循环)
for (声明语句: 表达式) { // 循环语句 }
增强型 for 循环主要用于数组或集合,一个简单的遍历数组元素的应用如下:
int[] numbers = {10, 20, 30}; // 数组的定义 for (int x: numbers){ // 遍历数组元素 System.out.println(x); }
-
循环中的关键字:break continue goto
- break : 在循环中使用时,用于结束整个循环
- continue : 用于结束当次循环,直接进行下一次的循环
- goto : 尽管 goto 并没有在 Java 中得到正式应用,但仍然保留了这一关键字,不建议使用
补充事项
-
在语句块中的内容只有一行的情况下,可以省略大括号,但是不建议这么做,有以下两点原因:
- 降低了代码的可读性
- 有些单行语句实质上是两行语句,如果省略大括号会报错,例如声明语句
-
(JDK12 新增特性)switch-case 简化语句:
switch (number) { switch (number) { case 1: case 1: -> { System.out.println("a"); System.out.println("a"); break; } case 2: case 2: -> { System.out.println("b"); <====> System.out.println("b"); break; } default: default -> { System.out.println("c"); System.out.println("c"); break; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~