Java switch选择分支结构

分享到:

Java switch语句是一种选择分支结构,用来判断某个表达式产生的多种可能性,从而执行对应的逻辑。先看一下Java switch语句的基本结构:

switch(表达式)
{
  case 常量1:
	语句1;
  break;
  
  case 常量2:
	语句2;
  break;
  ....
  case 常量n:
	语句n;
  break;

  default:
	语句n+1;
}

switch语句的几点注意:
(1)JDK1.6 switch后面的表达式只能返回 int,char,enum 这几种类型的数据, JDK1.7开始支持String类型
(2)每个case 常量后面有一个冒号(:)
(3)每个case语句块执行完毕后应该有一个break语句用来跳出switch;
(4)switch最后的default语句可以没有,不是必需的。同时default语句块最后可以不写break;
(5)结构中的语句1、语句2...语句n 并不是说每个case分支只能写一行代码,而是代表一组代码

接下来我们通过实例了解switch在java中的具体应用方法
(1)基本的switch,表达式是一个变量的情况

int a=1;
switch(a){
	case 1:
		System.out.print("a=1");
	break;
	case 2:
		System.out.print("a=2");
	break;
	default:
		System.out.print("a=3");

}

//输出结果 a=1

简单分析一下这个例子,首先定义了一个值为1的变量a ,switch后面的表达式就是这个变量a 值为1, 第一个case 条件就命中了,执行完成 System.out.print("1")之后碰到break语句直接跳出switch ,其它的case语句以及后面的default都被跳过。

(2)switch表达式中带有运算符的例子

int a=1;
int b=1;

switch(a+b){
	case 1:
		System.out.print("a+b=1");
	break;
	case 2:
		System.out.print("a+b=2");
	break;
	default:
		System.out.print("a+b=3");

}

//输出结果 a+b=2

这个例子我们把switch小括号里的内容由一个变量换成了算术表达式,无论这个表达式多么复杂系统只看它的运算结果与case 后的常量是否匹配,这就是switch结构的本质。

(3)switch中多个case条件语句执行同一逻辑的例子

char a='a';

switch(a){
	case 'a': case 'b': case 'c':
		System.out.print("当a的值为'a','b','c'任意一值时都执行这行代码");
	break;
	case 'd':
		System.out.print("当a的值为'd'时执行这行代码");
	break;
	default:
		System.out.print("当a不等于以上任何值时执行这行代码");

}

//输出结果 当a的值为'a','b','c'任意一值时都执行这行代码

前面已经介绍过switch语句的基本语法,运行到break就跳出否则一直向下执行代码,利用这个特点我们可以把多个case 语句写在一起这样就能同时匹配多个条件,最后利用break跳出switch。
通过以上3个实例已经把switch结构在java中的一些应用方法做了介绍,通过前面的内容我们也了解到JDK1.6及以下版本 switch case 只能识别数值型和字符这两种数据,如果想在JDK1.6 及以下的环境中用字符串来匹配怎么办?很可惜,Java不支持。不过可以利用一方法模拟字符串从而达到相同的效果,使代码可读性更强。这种方法要用到枚举类型配合使用。(注:枚举也是Java中的一种数据类型,本质是一组定义好的常量 )。具体实现请参考下面的例子。

(4)switch利用枚举实现字符串匹配的效果,针对JDK版本低于1.7的情况

public class Java1 {

	public enum Color{RED, YELLOW, BLUE}
	
	public static void main(String[] args) {
		Color color=Color.RED;
		switch(color){
			case RED:
				System.out.print("红色");
			break;
			case YELLOW:
				System.out.print("黄色");
			break;
			default:
				System.out.print("蓝色");

		}

	}

}

//输出结果 红色

注意这里的RED, YELLOW, BLUE 没有用双引号括起来所以并不是真正的字符串,而是利用枚举类型创建的一组常量。这样做的目的是为了让代码可读性更强一些,因为只写 case 1 ,case2 ... 其它人根本不知道代表什么意思,利用这种方法可以把大概的意思写到常量中,方便别人阅读代码。现在JAVA已经解决了这个问题,在JDK1.7中已经可以像其它语言那样直接使用String类型做匹配了。如果在用来开发的电脑上同时装有JDK1.6和1.7 ,当你试图在Switch case中使用String类型时,Eclipse会提示你是否要切换到高版本的JAVA运行环境上,我们选择JRE1.7就行了。

最后总结一下java switch: 这种结构的功能实现和之前讲过的if(表达式1)...else if(表达式n)是类似的,只不过在条件分支很多的情况下我们通常选择switch,原因是它在多分支的情况下性能更好,代码也更好维护。

昵    称:
验证码:

相关文档: