A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿卜 中级黑马   /  2016-8-23 22:46  /  722 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖主要研究switch语句的以下几个细节:
1.default语句在什么情况下执行?
2.什么情况下才会去判断case语句?
3.break;的重要性,为什么default最好写在最后?

先上代码:
[Java] 纯文本查看 复制代码
public class SwitchTest1 {
	public static void main(String[] args) {
		String sa = "a";
		String sb = "b";
		String sc = "c";
		//常规用法,输出"a",先判断case "a"为true,执行冒号内的语句,然后遇到break;跳出swicth。
		switch(sa) {
		case "a": 
			System.out.println("a");
			break;
		case "b":
			System.out.println("b");
			break;
		default:
			System.out.println("default");
		}
		
		System.out.println("---------------");
		//去掉case "a":内的break;输出了"a""b",case "b":并不可能为true,
		//结论:case判断为true任意一次后,忽略之后的所有case判断而直接执行其中的内容
		switch(sa) {
		case "a": 
			System.out.println("a");
		case "b":
			System.out.println("b");
			break;
		default:
			System.out.println("default");
		}
		
		System.out.println("---------------");
		//去掉case "a":和case "b":内的break;输出了"a""b""default",case "b":以及default:并不可能为true,
		//结论:case判断为true任意一次后,忽略之后的所有case判断以及default判断而直接执行其中的内容
		switch(sa) {
		case "a": 
			System.out.println("a");
		case "b":
			System.out.println("b");
		default:
			System.out.println("default");
		}
		
		System.out.println("---------------");
		//输出了"a""b"
		//结论:验证之前结论的同时,也证明了case判断成功后,不会去寻找default语句执行。
		switch(sa) {
		default:
			System.out.println("default");
		case "a": 
			System.out.println("a");
		case "b":
			System.out.println("b");
		}
		
		System.out.println("---------------");
		//输出了"default""a""b"
		//结论:验证之前结论的同时,也证明了所有的case判断失败后,会去寻找default语句执行。不论default语句在什么位置。
		//**并且结合之前的结论可知,case、default语句任意一次true后,就会跳过switch内之后所有的case和default的判断,执行所有其他语句。
		switch(sc) {
		default:
			System.out.println("default");
		case "a": 
			System.out.println("a");
		case "b":
			System.out.println("b");
		}
		
		System.out.println("---------------");
	}
}


由以上的代码我们可以得出几个结论:
1.switch内的所有case判断失败后,才会去寻找default,且不论default写在switch内的哪一行。
2.开始运行switch块时,才会判断case语句,任意一次判断成功后,就会忽略之后所有的case和default。
***或者说,case x:、default:代码的执行通过任何一次冒号后,所有的case和default将失效。
3.因为以上的执行顺序,所以每个case内都需要写break;语句跳出switch块,以免执行到其他条件的语句。
***以及,如果所有case判断失败,去执行default语句时,default内既没有写break;又不是最后的代码,也会导致执行到其他条件的语句,***所以default要放在所有的case之后。

2 个回复

倒序浏览
谢谢分享,不错不错
回复 使用道具 举报
加油!加油!加油!加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马