首页 > 编程语言 >Java 流程控制语句

Java 流程控制语句

时间:2024-04-09 10:29:17浏览次数:25  
标签:语句 Java 流程 else switch 循环 println 代码

在Java中,流程控制语句用于控制程序的执行顺序。这些语句允许程序根据不同的条件执行不同的代码块,或者重复执行某些操作。以下是Java中常见的流程控制语句:

条件控制语句

条件语句在编程中用于根据特定条件执行不同的代码分支。在Java中,主要的条件语句包括ifif...elseif...else if...else以及switch

if语句

if语句最基本的形式是测试一个布尔表达式,如果表达式为true,则执行if块内的代码。格式如下:

if (condition) {// condition 是一个布尔表达式
    // 条件为真时执行的代码
}

代码示例:

int num = 10;
// if判断 num,如果是正数,输出
if(num > 0){
    System.out.println("num 是正数");
}

if...else语句

if...else语句扩展了if语句,提供了一个备选的执行路径。如果if条件为false,则执行else块内的代码。格式如下:

if (condition) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}

代码示例:

int number = 10;
// if-else语句示例
if (number % 2 == 0) {
    System.out.println("number 是偶数");
} else {
    System.out.println("number 是奇数");
}

if...else if...else语句

if...else if...else语句允许测试多个条件,并根据第一个为true的条件执行相应的代码块。如果所有条件都不满足,则执行else块内的代码。格式如下:

if (condition1) {
    // 条件1为真时执行的代码
} else if (condition2) {
    // 条件2为真时执行的代码
} else {
    // 所有条件都为假时执行的代码
}

代码示例:

int number = 10;
// if-else if-else语句示例
if (number < 0) {
    System.out.println("数字是负数");
} else if (number == 0) {
    System.out.println("数字是零");
} else {
  System.out.println("数字是正数");
}

switch语句

switch语句是一种多分支选择结构,允许基于变量的值选择执行不同的代码段。switch语句中的变量值被称为case,每个case后面跟着一个或多个可能的值和对应的代码块。格式如下:

switch (variable) {// variable是一个变量或表达式
    case value1:
        // 变量等于value1时执行的代码
        break;
    case value2:
        // 变量等于value2时执行的代码
        break;
    // ...
    default:
        // 变量值与所有case都不匹配时执行的代码
}

注意事项:

switch语句中,break关键字用于退出switch结构,防止执行后续的case代码(称为“case穿透”)。如果省略break,则程序会继续执行下一个case的代码,直到遇到breakswitch语句结束,这种现象称为“fall through”。

代码示例:

int day = 3; // 变量,其值将用于switch语句中

switch (day) {
    case 1:
        System.out.println("今天是星期一");
        break;
    case 2:
        System.out.println("今天是星期二");
        break;
    case 3:
        System.out.println("今天是星期三");
        break;
    default:
        System.out.println("这不是工作日");
}

ifswitch的优缺点

if语句

优点:

  • 灵活:if语句可以测试复杂的条件,包括多个条件的组合(使用&&||!)。
  • 可读性:对于简单的条件判断,if语句通常更直观和易于理解。
  • 适用性广:可以用于任何类型的条件判断,包括对象、字符串等。

缺点:

  • 代码冗余:对于多个条件,可能需要重复编写相似的代码结构。
  • 维护性:当条件较多时,代码可能会变得难以维护和阅读。
switch语句

优点:

  • 简洁性:对于多个固定值的比较,switch语句可以使代码更加简洁。
  • 可读性:当变量的可能值是一组有限的常量时,switch语句提供了一种清晰的结构。
  • 性能:在某些情况下,编译器可以优化switch语句,使其执行效率更高。

缺点:

  • 有限性:switch语句只能用于比较整数、枚举类型或字符串。不能用于浮点数、布尔值等其他类型。
  • 无默认分支:如果所有case都不匹配,且没有default分支,程序可能会抛出异常。
  • 维护性:添加或删除case分支可能需要修改整个switch结构。

ifswitch 使用选择的注意事项

选择if语句还是switch语句取决于具体的应用场景和条件的复杂性。在实际编程中,合理地使用这两种结构可以提高代码的效率和可读性。

  • 条件的清晰性:确保条件表达式清晰易懂,避免复杂的逻辑嵌套。
  • 避免代码重复:尽量使用if-else结构来处理条件逻辑,而不是在多个地方重复相同的代码。
  • 使用default分支:在switch语句中,始终提供一个default分支来处理未预见的情况。
  • 考虑性能:对于简单的条件判断,if语句通常更快。但对于固定值的集合,switch语句可能更优。
  • 避免fall through:如果switch语句中的case分支不需要执行后续分支的代码,确保在每个分支的末尾使用break语句。
  • 适当的使用枚举:如果switch语句中的变量是枚举类型,可以提高代码的可读性和可维护性。
  • 注意变量类型:确保switch语句中的变量类型是支持的类型,如整数、枚举或字符串。
  • 考虑可扩展性:如果预期将来可能会添加更多的条件分支,使用if-else结构可能更易于扩展。

循环控制语句

循环控制语句允许程序重复执行一段代码,直到满足某个条件为止。在Java中,主要的循环控制语句有for循环、while循环和do-while循环。

for循环

for循环是一种先定义循环条件,然后执行循环体的循环结构。它通常用于在已知循环次数的情况下进行循环。格式如下:

for (初始化表达式; 循环条件; 更新表达式) {
    // 循环体
}

  • 初始化表达式:在循环开始前执行一次,通常用于初始化循环计数器。
  • 循环条件:在每次循环迭代前评估,如果为true,则执行循环体。
  • 更新表达式:在每次循环迭代后执行,通常用于更新循环计数器。

代码示例:

for (int i = 0; i < 5; i++) {
    System.out.println("这是第 " + i + " 次循环");
}

while循环

while循环是一种在循环条件为真时重复执行循环体的循环结构。它适用于循环次数未知或基于某个条件进行循环的情况。格式如下:

while (循环条件) {
    // 循环体
}

代码示例:

int count = 5;
while (count <= 10) {
    System.out.println("这是第 " + count + " 次循环");
    count++;
}

do...while循环

do-while循环与while循环类似,但它至少会执行一次循环体,即使循环条件一开始就为假。这种循环适用于至少需要执行一次循环体的情况。格式如下:

do {
    // 循环体
} while (循环条件);

代码示例:

int count = 5;
do {
    System.out.println("这是第 " + count + " 次循环");
    count--;
} while (count >= 0);

注意事项

对于所有循环语句:

  • 确保循环有明确的退出条件,以避免无限循环。
  • 循环内部的变量更新应该逻辑清晰,避免引入难以发现的错误。
  • 当循环体为空时,可以使用break语句退出循环。
  • 在循环中使用continue语句可以跳过当前迭代的剩余部分,并继续下一次迭代。

对于for循环:

  • 确保初始化表达式正确地设置了循环计数器。
  • 更新表达式应该在每次迭代结束时改变循环计数器的值,以确保循环能够按预期结束。

对于while循环:

  • 循环条件应该在循环执行过程中能够最终变为false,否则可能会导致无限循环。
  • 循环条件的检查是在每次迭代开始之前,因此至少会执行一次循环体。

对于do-while循环:

  • 由于循环体至少执行一次,即使循环条件一开始就不满足,因此要确保循环条件最终会变为false
  • 循环条件应该在循环体内部有可能改变,否则也可能导致无限循环。

三种循环的应用场景

for循环:

  • 优点:适合已知循环次数的情况,结构紧凑,易于理解和维护。
  • 缺点:对于循环次数未知的情况不够灵活,循环条件、初始化和更新可能需要额外的代码。

while循环:

  • 优点:适合循环次数未知的情况,可以基于复杂的逻辑来控制循环。
  • 缺点:至少执行一次循环体,即使循环条件一开始就为假,有时可能需要额外的检查来避免这种情况。

do-while循环:

  • 优点:至少执行一次循环体,适合需要保证循环至少执行一次的场景。

跳转语句

跳转语句,也称为控制流语句,允许程序跳过当前执行点的后续代码,直接转到程序的其他部分执行。在Java中,主要的跳转语句包括breakcontinuereturngoto(虽然Java中没有goto语句)。

break语句

break语句用于立即退出最内层的循环或switch语句。

// break 语句代码示例
for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break; // 当i等于5时退出循环
    }
    System.out.println("这是第 " + i + " 次循环");
}
System.out.println("循环结束~~~");

continue语句

continue语句用于跳过当前迭代的剩余部分,并立即开始下一次迭代。

// continue语句-代码示例
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue; // 跳过偶数,只打印奇数
    }
    System.out.println("i: " + i);
}

return语句

return语句用于从方法中返回一个值,并立即退出方法。

// return语句-代码示例
public static void main(String[] args) {
    int result = square(5);
    System.out.println("5的平方是: " + result);
}
// 定义一个名为 square 的方法
static int square(int number) {
    return number * number; // 返回number的平方
}

goto语句

Java中没有内置的goto语句。goto语句在其他一些语言中用于无条件地跳转到程序的另一部分,但它通常被认为是不好的编程实践,因为它可以导致代码难以理解和维护。Java的设计者选择不支持goto,以鼓励更清晰和更有结构的代码设计。

注意事项

  • 谨慎使用breakcontinue语句,以避免破坏循环的逻辑。
  • return语句应该用于从方法返回,而不是用作跳转语句。
  • 避免使用goto语句,而是通过更好的代码结构和函数分解来实现相同的功能。
  • 在使用跳转语句时,保持代码的可读性和逻辑清晰性。

异常处理语句

异常处理是Java中的一个重要特性,它允许程序在遇到错误或异常情况时优雅地恢复。Java的异常处理语句主要包括trycatchfinallythrowthrows

try...catch()...finally语句

try语句用于包裹可能抛出异常的代码块。如果代码块中的任何语句抛出异常,try块将立即结束,控制流将转移到匹配的catch块。

catch语句用于捕获try块中抛出的异常,并为这些异常提供特定的异常处理代码。

finally语句用于定义无论是否捕获到异常,都会执行的代码块。这通常用于执行清理工作,如关闭文件流或释放资源。

throw语句

throw语句用于手动抛出一个异常。这可以是因为检测到一个错误条件,或者为了将捕获的异常重新抛出。

throws声明

throws声明用于在方法签名中声明该方法可能抛出的异常。这允许调用者知道在调用该方法时可能需要处理的异常。

public static void main(String[] args) {
	try {
       int result = divide(10, 0); // 尝试执行除法操作
       System.out.println("结果是: " + result);
   } catch (ArithmeticException e) { // 捕获算术异常
       System.out.println("不能除以0!");
   } finally { // 无论是否发生异常,都执行清理工作
       System.out.println("这是一个清理操作。");
   }
}

public static int divide(int a, int b) throws ArithmeticException {
   if (b == 0) {
      throw new ArithmeticException("除数不能为0。"); // 手动抛出异常
   }
   return a / b; // 正常返回结果
}

示例中,我们定义了一个divide方法,它执行除法操作并检查除数是否为0。如果除数为0,方法将抛出一个ArithmeticException

main方法中,我们调用divide方法,并将其结果存储在result变量中。如果divide方法抛出异常,catch块将捕获它并打印一条消息。无论是否捕获到异常,finally块都会执行,打印一条清理消息。

断言语句

断言语句,即assert语句,在Java中用于调试目的。它允许开发者在代码中插入一个断言,当程序运行时,如果断言条件为false,则会抛出AssertionError异常。这有助于检查程序中的逻辑错误和不一致状态。基本语法如下:

assert condition : message;

  • condition:一个布尔表达式,如果为false,则会抛出异常。
  • message:一个可选的字符串,用于提供关于断言失败的详细信息。如果省略,则不会提供额外的信息。

代码示例:

int a = 10;
int b = 20;

// 断言a小于b
assert a < b : "a 不应大于或等于 b";

// 另一个断言示例,由于a现在等于20,这个断言将失败
assert b < 15 : "b 应该小于 15";

System.out.println("断言检查完成。");

注意事项:

  • 断言语句在生产环境中通常被禁用,因为它们主要用于调试。在Java中,可以通过JVM选项-ea-enableassertions来启用断言,使用-da-disableassertions来禁用断言。
  • 断言语句不应该用于控制程序的正常流程,而只应该用于检测程序中的潜在错误或不合法的状态。
  • 在使用断言语句时,确保condition是可验证的,并且message能够提供足够的信息来帮助调试。
  • 由于assert语句在默认情况下是禁用的,因此在编写代码时不应该依赖于它的存在。

标签:语句,Java,流程,else,switch,循环,println,代码
From: https://blog.csdn.net/2401_83029813/article/details/137541441

相关文章

  • 京东详情API接口请求代码源码(java)
    京东详情API接口是用于获取京东商品详细信息的接口,它允许开发者通过发送请求,获取商品的描述、价格、评价等信息。下面是一个关于京东详情API接口的示例文档,包括接口地址、请求参数、响应参数等内容。京东详情API接口文档接口地址:https://api-gw.onebound.cn/jd/item_get请求......
  • java知识点
    (1)springboot注解,当接收页面单个:参数字符串数组。必须加org.springframework.web.bind.annotation.RequestBody注解, 如果是整形数组,则换成Integer[]ids即可。@PostMapping("/demo")@ResponseBodypublicResulttest(@RequestBodyLong[]ids){}(2)获取最近12个月份publicLi......
  • vue项目的运行流程
    assets文件夹:存放项目中用到的静态资源文件,例如:css样式表、图片资源components文件夹:程序员封装的、可复用的组件,都要放到components目录下main.js是项目的入口文件。整个项目的运行,要先执行main.jsApp.vue是项目的根组件。在工程化的项目中,vue要做的事情很单纯:通过ma......
  • [网络/HTTPS/Java] PKI公钥基础设施体系:基础概念篇
    0序看过上一篇文章、且有点懵的朋友,可以参看本篇————针对PKI体系的核心概念进行解释。1PKI体系(公开密钥基础设施体系)1.1PKI体系是什么?PKI是PublicKeyInfrastructure的缩写,中文叫做公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施。PKI的主要......
  • JAVA------基础篇
    java基础1.JDKJDK:javadevelopmentkitJRE:javaruntimeenvironmentJDK包含JREjava跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。当你想要在Linux系统下运行,则需要安装对应的虚拟机,及对应的jdk版本,而对应的jdk版本中的jre有对......
  • openGauss 支持PL-Java
    支持PL/Java可获得性本特性自openGauss1.0.0版本开始引入。特性简介支持javaUDF。客户价值提供多种函数的开发环境。特性描述使用openGauss数据库的PL/Java函数,用户可以使用自己喜欢的JavaIDE编写Java方法,并将包含这些方法的jar文件安装到openGauss数据库中,然后使用该......
  • 「Java开发指南」如何利用MyEclipse启用Spring DSL?(一)
    本教程将引导您通过启用SpringDSL和使用ServiceSpringDSL抽象来引导Spring和Spring代码生成项目,本教程中学习的技能也可以很容易地应用于其他抽象。在本教程中,您将学习如何:为SpringDSL初始化一个项目创建一个模型包创建一个服务和操作实现一个服务方法启用JAX-WS和DWR......
  • java计算机毕业设计房地产公司员工工单管理系统(附源码+springboot+开题+论文+部署)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着房地产行业的迅猛发展,企业内部的运营和管理面临着越来越高的要求。特别是在员工工单管理方面,传统的纸质工单或简单的电子记录方式已经无法满足企......
  • java计算机毕业设计房产中介管理(附源码+springboot+开题+论文+部署)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当前的房地产市场环境下,房产中介作为连接买卖双方的重要桥梁,其运营效率和服务质量直接影响到市场的健康发展和客户的满意度。然而,传统的房产中介管......
  • Java,MySQL,JDBC,Jackson时区问题
    Java,MySQL,JDBC,Jackson时区问题今天做了一个测试,主要是测试给时区参数设置不同的值,会出现什么样的问题。数据库是UTC时区。JDBC连接是GMT+8。jackson默认是UTC。JVM时区GMT+8。从数据库中查询的时间是正确的的,jackson会将时间缩短8个小时。数据库是UTC时区。JDBC连接是GMT+......