整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Java 14中优雅的Switch Case语句

Java 14中优雅的Switch Case语句

ava 14是Java编程语言的最新版本之一,引入了许多令人兴奋的新功能和改进。其中一个备受关注的功能是对Switch Case语句的增强,使其在编写代码时更加优雅和灵活。本文将介绍Java 14中这一改进后的Switch Case语句,并探讨其在代码中的应用。

  1. 简洁的语法:在Java 14之前,Switch Case语句只能通过常量表达式进行比较。然而,Java 14引入了“箭头”(->)操作符,允许我们在Switch Case语句中使用更灵活的表达式。这意味着我们可以在每个Case子句中使用表达式,而不仅限于常量值。让我们看一个简单的示例:


int dayOfWeek=3;
String dayType=switch (dayOfWeek) {
    case 1, 2, 3, 4, 5 -> "Weekday";
    case 6, 7 -> "Weekend";
    default -> "Invalid day";
};
System.out.println(dayType);

在这个例子中,我们使用箭头操作符将多个常量值组合在一起,从而在一个Case子句中处理多个情况。这样的语法简洁明了,使得代码更易读和维护。

  1. Yield语句:Java 14引入了Yield语句,它可以与Switch Case语句一起使用,用于返回一个值并终止Switch Case块。这对于编写更复杂的逻辑非常有用。以下是一个示例:


int dayOfWeek=3;
String dayType=switch (dayOfWeek) {
    case 1, 2, 3, 4, 5 -> {
        yield "Weekday";
    }
    case 6, 7 -> {
        yield "Weekend";
    }
    default -> {
        yield "Invalid day";
    }
};
System.out.println(dayType);

在这个例子中,我们使用Yield语句返回了每个Case子句的结果,并终止了Switch Case块的执行。这使得我们可以在不使用Break语句的情况下,更清晰地返回结果并控制代码流程。

  1. 更安全的Switch Case:在Java 14之前,如果我们忘记在一个Case子句中加上Break语句,代码将会继续执行下一个Case子句,这可能导致意外的行为。为了解决这个问题,Java 14引入了新的关键字“Case L ->”,它将只允许在指定的Case子句中执行代码块,而不会继续执行下一个Case子句。以下是一个示例:


int dayOfWeek=3;
String dayType=switch (dayOfWeek) {
    case 1, 2, 3, 4, 5 -> {
        System.out.println("Weekday");
        yield "Weekday";
    }
    case 6, 7 -> {
        System.out.println("Weekend");
        yield "Weekend";
    }
    default -> {
        System.out.println("Invalid day");
        yield "Invalid day";
    }
};
System.out.println(dayType);

在这个例子中,我们在每个Case子句中添加了一个打印语句,以便在执行时输出相应的消息。由于每个Case子句中都使用了“Case L ->”语法,即使我们忘记了添加Break语句,代码也只会执行当前的Case子句,而不会继续执行下一个Case子句。

结论:Java 14中改进的Switch Case语句使得我们能够以更优雅和灵活的方式编写代码。新的语法简洁明了,Yield语句提供了更好的控制流程的能力,而“Case L ->”关键字则增加了代码的安全性。这些改进使得Switch Case语句在处理多个条件分支时更加易读、简洁和可维护。建议在使用Java 14及更高版本时,充分利用这些改进,以提升代码的质量和效率。

摘自:科学随想录

层嵌套的 if-else 语句在语法上是正确的,但逻辑上却没有正确地表达程序员的意图,例如,意料之外的 else-if 更可能不会注意到而被溜过去;C语言还提供了另一种用于多分支选择的switch语句,作为一种在一组互斥的项目中做选择的替代方法,根据变量的不同取值来执行不同的代码块。其一般形式为:

switch(表达式){

case 表达式1: 语句1;

case 表达式2: 语句2;

case 表达式n: 语句n;

default: 语句n+1;

}

计算表达式的值,然后逐个与case后的表达式值进行比较,当case后的表达式的值与switch表达式的值相等时, 即执行对应case后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

int main(void){

int a;

scanf("%d",&a);

switch (a){

case 1:printf("Monday\n");

case 2:printf("Tuesday\n");

case 3:printf("Wednesday\n");

case 4:printf("Thursday\n");

default:printf("error\n");

}

return 0;

}

如果我们输入1,case 1:后面的语句开始执行,但是程序并没有再执行这条语句后停止,而是继续执行下面的case语句,包括default,直到程序结束。这是因为我们必须显式地告诉编译器停止执行switch中的语句,这可以通过在switch语句内的每个执行单元后指定一个break语句来完成 在大多数条件下一个 case标签的最后一条语句是break。当遇到 break 语句switch语句被终止。正确的代码如下:

int main(void){

int a;

scanf("%d",&a);

switch (a){

case 1:printf("Monday\n"); break;

case 2:printf("Tuesday\n"); break;

case 3:printf("Wednesday\n"); break;

case 4:printf("Thursday\n"); break;

default:printf("error\n");

}

return 0;

}

那么程序员什么时候希望省略 break 语句?如果多个 case 语句都执行相同的功能代码时,允许程序执行多个 case 标签!例如输入学生成绩,大于90分为优,大于70分为一般,大于60分为良,小于60分为差,可用以下代码实现:

int main(void){

int score;

scanf("%d",&score);

switch (score/10){

case 10:

case 9: printf("优\n"); break;

case 8:

case 7: printf("一般\n"); break;

case 6:printf("良\n"); break;

default:printf("差\n");

}

return 0;

}

把case标签一个接一个堆起来,以强调这种情形代表的是一个要被匹配的范围,例如case10和case9为一组,超市score/10等于10或者9,即90分以上的条件。

总结:

  • 在case后的各常量表达式的值不能相同,否则会导致编译错误。
  • 在case后,允许有多个语句,可以不用{}括起来。
  • 所有的case都是"或"or的关系,每时每刻只有一个case会满足条件。
  • 每个case中的代码执行完毕后,必须要用break 语句来阻止代码自动地向下一个case运行。
  • 如果不写 break 语句的话,下面所有的 case 语句都会执行一遍。
  • 请使用default关键词来规定匹配不存在时做的事情。可省略不写。

以上是老韩关于Linux c基础的总结欢迎一起讨论,如有不足欢迎指点;对Linux c或者Linux驱动感兴趣的朋友可以收藏关注,我会持续更新的,谢谢支持!

witch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

语法格式如下:

switch(expression){
 case value :
 //语句
 break; //可选
 case value :
 //语句
 break; //可选
 //你可以有任意数量的case语句
 default : //可选
 //语句
}

switch case 语句有如下规则

  • switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
  • 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句(继续执行下面所有的语句),直到出现 break 语句。
  • switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。