Java switch case 语句

时间:2020-01-09 10:34:47  来源:igfitidea点击:

Switch语句是Java的选择语句,可以有许多可能的执行路径。 Java中的另一个选择语句if-else-if梯形图也会根据条件的评估执行一个代码块,而Java中的switch-case提供了一种更容易且更易读的替代方法,而不是使用大型if-else -如果梯子。

Java switch-case语句的语法是

switch(expression) {
 case value1:
  // statements
  break;
 case value2:
  // statements
  break;
 .
 .
 .
 case valueN :
  // statements
  break;
 default:
  // statements
}

switch语句的主体称为switch块。开关块包含一个或者多个案例标签和一个可选的默认标签。

Java switch语句如何工作

switch语句评估其表达式并将其与每个case标签的值进行比较,并执行匹配的case标签之后的所有语句。

如果switch语句表达式与任何case标签都不匹配,则执行默认标签后面的语句。请注意,默认部分不是必需的。如果不存在默认节,并且所有case标签都不匹配表达式,则控件从switch块出来,而无需执行任何语句。

在switch块中使用break语句非常重要,因为它会终止switch语句。一旦遇到break语句,控制就会从switch语句中发出。
break语句是必需的,因为没有它们,即使匹配的case标签的值与switch语句表达式不匹配,匹配的case标签之后的后续case标签中的所有语句也会按顺序执行。

switch语句表达式的类型

switch语句适用于以下类型之一:

  • 基本数据类型-byte,short,char和int

  • 枚举类型

  • 包装某些原始类型的包装器类:字符,字节,短型和整数

  • 字符串(Java 7及更高版本)

关于Java中的switch case 语句的一些说明如下:

  • switch语句仅用于相等性测试,其中switch语句表达式与case标签匹配,并且执行匹配的case语句。

  • 用case指定的值是一个常量表达式。

  • 我们不能有两个具有相同值的case语句。每个case标签应具有唯一的值,否则我们将得到编译时错误。

  • 每个case语句中的值必须与switch语句中的表达式类型兼容。

  • Java switch语句中的with缺省部分是可选的。如果存在,通常建议将默认语句设置为最后一条语句,而在最后一条语句之后则不需要break语句。

  • 每个case语句之后的break语句也是可选的。如果case之后没有break语句,则还将依次执行下一个case语句,直到遇到break语句或者执行所有case语句为止。

Java switch case 示例

public class SwitchExample {

	public static void main(String[] args) {
		 int dayOfWeek =5;
		 String day;
		 switch(dayOfWeek){
		   case 1: 
			   day = "Sunday";
			   break;
		   case 2: 			   
			   day = "Monday";
			   break;
		   case 3: 			   
			   day = "Tuesday";
			   break;
		   case 4: 			   
			   day = "Wednesday";
			   break;
		   case 5: 			   
			   day = "Thursday";
			   break;
		   case 6: 			   
			   day = "Friday";
			   break;
		   case 7: 			   
			   day = "Saturday";
			   break;
		   default:
			   day = "Invalid value";		   
		 }
		 System.out.println("Day is- " + day);
	}
}

输出:

Day is- Thursday

switch语句的表达式的代码值是5,它与具有5的case标签匹配。由于break语句也在那里,所以switch语句终止,并且执行switch块之后的语句。

在switch语句中执行默认部分

在上一个示例中,如果将dayOfWeek传递为10,则它将不匹配任何case语句,因此将执行默认语句,将输出显示为

天为无效值

默认部分是可选的,在代码中,如果删除了默认语句并且将dayOfWeek传递为10,则在switch块中将不执行任何语句。

public class SwitchExample {

	public static void main(String[] args) {
		 int dayOfWeek = 10;
		 String day="";
		 switch(dayOfWeek){
		   case 1: 
			   day = "Sunday";
			   break;
		   case 2: 			   
			   day = "Monday";
			   break;
		   case 3: 			   
			   day = "Tuesday";
			   break;
		   case 4: 			   
			   day = "Wednesday";
			   break;
		   case 5: 			   
			   day = "Thursday";
			   break;
		   case 6: 			   
			   day = "Friday";
			   break;
		   case 7: 			   
			   day = "Saturday";
			   break;   
		 }
		 System.out.println("Day is- " + day);
	}
}

输出:

Day is

Java switch-case中 删除break语句

public class SwitchExample {
  public static void main(String[] args) {
    int num = 4;
    switch(num){
      case 1: 
        System.out.println("Passed value is 1");			 
      case 2: 			   
        System.out.println("Passed value is 2");			  
      case 3: 			   
        System.out.println("Passed value is 3");			   
      case 4: 			   
        System.out.println("Passed value is 4");			   
      case 5: 			   
        System.out.println("Passed value is 5");			  
      case 6: 			   
        System.out.println("Passed value is 6");			
      case 7: 			   
        System.out.println("Passed value is 7");			   
      default:
        System.out.println("Passed value doesn't match any value.. ");   
    }
    System.out.println("Out of switch statement..");
  }
}

输出:

Passed value is 4
Passed value is 5
Passed value is 6
Passed value is 7
Passed value doesn't match any value.. 
Out of switch statement..

如我们所见,一旦case语句的值与表达式匹配,所有其他case语句也会按顺序执行,因为不存在break语句。

在switch语句中的每个个案之后都没有break语句并不总是会产生问题,这还使我们有机会对case语句进行分组,如下例所示。

public class SwitchExample {
  public static void main(String[] args) {
    int dayOfWeek = 2;
    switch(dayOfWeek){
      case 2:			   
           
      case 3: 			   
         
      case 4: 			   
        
      case 5: 			   
        
      case 6: 	
        System.out.println("It's weekday");
        break;
      case 1:
      case 7: 			   
        System.out.println("It's weekend");
        break;   
    }
    System.out.println("Out of switch statement ");
  }
}

输出:

It's weekday
Out of switch statement

在Java switch语句中使用String

从Java 7开始,我们还可以将String类型的表达式与Java switch语句一起使用。

public class SwitchExample {
  public static void main(String[] args) {
    String day = "Bangalore";
    String cityCode = "";
    switch(day){
      case "Delhi":
        cityCode = "DEL";
        break;
      case "Lucknow":	
        cityCode = "LKO";
        break;
      case "Bangalore": 	
        cityCode = "BLR";
        break;
      case "Mumbai": 			   
        cityCode = "MUM" ;
        break;
      default:
        cityCode="Not found";
    }
    System.out.println("City code " + cityCode);
  }
}

输出:

City code BLR

用Java switch语句中使用枚举

以下Java switch案例演示了如何将Enum用作带有switch语句的表达式。

public class SwitchExample {
  public enum Day {Sun, Mon, Tue, Wed, Thu, Fri, Sat}  
  public static void main(String[] args) {
    Day day = Day.Mon;
    switch(day){
      case Sun:
        System.out.println("Day is Sunday");
        break;
      case Mon:	
        System.out.println("Day is Monday");
        break;
      case Tue: 	
        System.out.println("Day is Tuesday");
        break;
      case Wed: 			   
        System.out.println("Day is Wednesday");
        break;
      case Thu: 			   
        System.out.println("Day is Thursday");
        break;
      case Fri: 			   
        System.out.println("Day is Friday");
        break;	
      case Sat: 			   
        System.out.println("Day is Saturday");
        break;
    }
  }
}

输出:

Day is Monday

Java中的嵌套switch语句

我们可以在外部开关中带有一个switch-case语句,称为嵌套开关语句。

switch(expression){
 case 1:
 switch(expression){
  case 1: .....
         break;
  case 2 : ....
	 break;
  ...
  ...
 }
 break;
}