Java基础之流程控制

简介: Java基础的流程控制包括顺序、选择和循环控制。顺序控制是默认的逐行执行;选择控制(if/else, if...else if...else, switch)根据条件执行不同代码块;循环控制(for, while, do-while)用于重复执行代码。for循环适合已知循环次数,while适合未知次数但有明确终止条件,do-while至少执行一次。知识点包括if与switch的区别、for-each循环的工作原理、嵌套循环、避免死锁的方法以及尾递归在优化递归调用中的作用。

Java基础之流程控制
我们执行java命令后,jvm虚拟机启动main方法,执行main方法中的代码,此时main方法是从上到下逐行执行的。
但是业务逻辑一般是动态的,需要在代码执行的时候,根据不同的入参及执行结果来决定哪些代码执行,什么代码跳过,这里我们就用到流程控制语句!
流程控制是编程的核心部分,它允许我们根据不同的条件执行不同的代码。
在Java中,流程控制主要分为三大类:顺序控制、选择控制和循环控制。
一、顺序控制
顺序是核心语句,默认就是逐行执行,顺序控制是最常见的控制流程。
public class Control {
public static void main(String[] args) {
System.out.println("这是第一条语句。");
System.out.println("这是第二条语句。");
System.out.println("这是第三条语句。");
}
}
二、选择控制
选择控制就是根据条件的真假来选择执行不同的代码,前面我们写过的if语句:
int max;
if(a>b){
max = a;
}else{
max = b;
}
这句就是如果条件 a>b 为真,那么就走 max=a 这一句代码,否则就走max=b 这一行。
根据if后面条件的执行结果来执行不同的分支语句,这就是选择控制。
if语句有三种:
1.只有if(){}
int max = 0;
if(ab 为真,max就被赋值为a,否则就跳过了赋值,还是保持原有的 0。
2.第二种就是上面的示例,if(){}else{}
不再赘述。
3.第三种是多个条件时的写法:
if(xxx){
}else if(xxx){
}else{
}
这种就适用于多个条件的判断,比如判断一个人,小于3岁是宝宝,3~6岁是儿童,6~18岁是少年,否则就是成年人。
// 根据xh的年龄,判断处于什么阶段。
int age = 2;
if(age < 3){
System.out.println("age < 3岁,xh还是个宝宝");
}else if(age >= 3 && age < 6){
System.out.println("age < 6岁,xh还是个儿童");
}else if(age >= 6 && age < 18){
System.out.println("age < 18岁,xh还是个少年");
}else{
System.out.println("age > 18岁,xh成年了");
}
除了这三种之外,Java还提供了一种和第三种写法效果差不多的选择控制写法,那就是 switch 语句。
比如说我直说三个年龄,3、6、18,如果输入3就是宝宝,输入6就是儿童,输入18就是少年,否则就是成年人。
int number = 3;
switch (number) {
case 3:
System.out.println("数字是3,是个宝宝");
break;
case 6:
System.out.println("数字是6,是个儿童");
break;
case 18:
System.out.println("数字是18,是个少年。");
break;
default:
System.out.println("数字不是3、6、18,默认他是成年人啦!");
break;
}
三、循环控制
Java中提供了循环语句,可以让我们重复的执行代码块来做一些事情。
Java 提供了 for、while 和 do-while 三种循环。
1.for循环是Java 中最常用的循环结构之一。它允许您在循环开始前初始化变量,定义循环的终止条件,以及每次迭代后更新循环变量。
语法:
for (初始化语句; 循环条件; 步进语句) {
// 循环体,这里可以写我们要重复的事情
}
比如现在我们要从0数到10,那么我们就可以使用循环来实现。
for(int i=0; i<=10; i++){
System.out.println("现在数:"+i);
}
如果不给他设定条件,那么就是一个无线循环,直接就内存溢出了
for (;;) {
// 无限循环体
}
当然可以在循环中使用break关键字来退出循环。
for(int i=0; i<=10; i++){
if(i==5){
System.out.println("现在数到5了,结束循环");
break;
}
}
如果是跳出当前的循环,比如数到5的时候不数5,直接跳过5,用continue关键字:
for(int i=0; i<=10; i++){
System.out.println("现在数到"+i+"了");
// 这个不会数5,数完4直接数6
if(i==5){
System.out.println("现在数到5了,结束循环");
continue;
}
}
Java5对for循环做了扩展,也称为for-each循环。
这种循环用于遍历数组或集合中的每个元素,无需使用索引(索引就是下标,用来显示在列表中的第几个值,以后数组集合我们会学)。
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
这种在业务需求开发中还是比较常用的。
2.while 循环,
while 循环在每次迭代之前检查循环条件。如果条件为真,则执行循环体;如果条件为假,则退出循环。
语法:
while (循环条件) {
// 循环体
}
while会先判断循环的条件,如果条件为真true,那么就执行,否则就一次也不执行。
用这个我们就需要在循环体内设置能满足跳出的条件,要不然循环条件一直是true,也会无限循环,内存溢出。
int i = 0;
while (i < 5) {
System.out.println("这是第 " + (i + 1) + " 次循环。");
i++;
}
这里的i++,就会让i自增到5的时候,停止循环。
3.do-while 循环
do-while 循环与 while 循环类似,但它在每次迭代之后检查循环条件。这意味着循环体至少会执行一次。
do {
// 循环体
} while (循环条件);
也就是说它是先执行一次循环体,然后再判断循环条件是不是真true。
int i = 0;
do {
System.out.println("这是第 " + (i + 1) + " 次循环。");
i++;
} while (i < 5);

  总而言之,三种循环都有各自的使用条件:
  for 循环适用于已知循环次数的情况。
  while 循环适用于循环次数不确定,但有一个明确的终止条件的情况。
  do-while 循环适用于至少需要执行一次循环体的情况。
想想啊,一般会问啥问题:
1.if和switch的区别?
if 语句用于根据一个或多个条件执行不同的代码块,而 switch 语句用于根据变量的值选择执行不同的代码块。switch 适用于多个明确值的情况,而 if 适用于范围或复杂条件。
2.解释 for-each 循环(扩展 for 循环)的工作原理。
for-each 循环简化了数组和集合的遍历,它依次取出集合中的每个元素进行处理,无需使用索引。
3.还有一些编程题,比如打个99乘法表?
public class MultiplicationTable {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) { // 外层循环控制行
            for (int j = 1; j <= i; j++) { // 内层循环控制列
                System.out.print(j + "x" + i + "=" + (i * j) + "\t"); // 打印乘法表的一项
            }
            System.out.println(); // 每打印完一行后换行
        }
    }
}
4.嵌套循环的概念?
嵌套循环是指在另一个循环内部有一个或多个循环。例如,上面说的用于打印乘法表的两个嵌套 for 循环。
5.如何避免死锁?
避免死锁的方法包括:按固定顺序获取锁、避免持有多个锁、使用超时尝试获取锁、设计锁层次结构等。
6.解释尾递归的概念,以及它如何优化递归调用?
尾递归是指递归调用是函数的最后一个操作,这样可以优化递归调用,避免过多的栈使用。
7.在设计一个需要大量迭代和条件判断的程序时,你会考虑哪些性能优化策略?
在设计程序时,我会考虑避免不必要的循环迭代,使用高效的数据结构,以及优化条件判断的顺序。
目录
相关文章
|
3月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
1177 1
|
3月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
234 7
|
3月前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
656 0
|
5月前
|
自然语言处理 前端开发 Java
JBoltAI 框架完整实操案例 在 Java 生态中快速构建大模型应用全流程实战指南
本案例基于JBoltAI框架,展示如何快速构建Java生态中的大模型应用——智能客服系统。系统面向电商平台,具备自动回答常见问题、意图识别、多轮对话理解及复杂问题转接人工等功能。采用Spring Boot+JBoltAI架构,集成向量数据库与大模型(如文心一言或通义千问)。内容涵盖需求分析、环境搭建、代码实现(知识库管理、核心服务、REST API)、前端界面开发及部署测试全流程,助你高效掌握大模型应用开发。
601 5
|
3月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
483 64
|
8月前
|
安全 Java 程序员
《从头开始学java,一天一个知识点》之:控制流程:if-else条件语句实战
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《for与while循环的使用场景》。 ---
181 19
|
3月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
223 3
|
4月前
|
人工智能 Cloud Native Java
Java 技术栈企业级应用开发全流程
本指南通过构建企业级电商系统,全面解析现代化Java技术栈实战应用。涵盖Spring Boot 3、微服务架构、云原生部署、服务治理、监控可观测性及AI集成,助开发者掌握全流程开发技能,打造高效可扩展的企业级应用。
310 0
Java 技术栈企业级应用开发全流程
|
4月前
|
安全 Java 数据库
使用Java实现用户的注册和登录流程
以上提供了用户注册和登录的基本框架和必要的说明。在具体的应用场景中,可能还需结合框架特性如Spring Security等提供的高级特性来实现更为完备和安全的用户认证机制。在开发期间,务必注重代码的安全性、清晰性和可维护性,为用户资料保驾护航。
347 13
|
3月前
|
Java 编译器
Java 17 Switch表达式:更简洁、更强大的流程控制
Java 17 Switch表达式:更简洁、更强大的流程控制
下一篇
oss云网关配置