1. 程式人生 > >java switch/case你不知道的事情

java switch/case你不知道的事情

日常小記

switch/case大家都經常用,可能東西比較簡單,以前從沒有留意過,或者課本知識讀的少忘得快,對switch/case執行流程瞭解不夠深入,今天專門測試了下,得出如下結論:

/* 1.switch/case執行流程是:
 * a.遇到匹配的case,並且該case有break則流程執行完畢;
* b.遇到匹配的case,如果該case沒有break則流程繼續執行,直到遇到break或者流程的結束;
* c.如果沒有匹配的case,則執行default;沒有default就什麼也不做。
* 2.如果沒有匹配的case,肯定會執行default;
* 如果有匹配的case,這時我們把default當成一個case來對待。

*/

看看測試的程式碼:

package zzone.example;

public class SwitchCase {
	public static void Normal(){
		int i = 10;
		switch (i) {
		case 10:
			System.out.println(10);
			break;
		case 20:
			System.out.println(20);
			break;
		default:
			System.out.println("default");
			break;
		}
		System.out.println("----->10");
	}
	public static void Special(){
		int i = 10;
		switch (i) {
		default:
			System.out.println("default");
			//break;
		case 10:
			System.out.println(10);
		case 20:
			System.out.println(20);
			break;
		}
		System.out.println("----->10 20");
	}
	public static void Special1(){
		int i = 10;
		switch (i) {
		default:
			System.out.println("default");
			//break;
		case 10:
			System.out.println(10);
		case 20:
			System.out.println(20);
			//break;
		}
		System.out.println("----->10 20");
	}
	public static void Special2(){
		int i = 10;
		switch (i) {
		case 10:
			System.out.println(10);
		case 20:
			System.out.println(20);
		default:
			System.out.println("default");
			//break;	
		}
		System.out.println("----->10 20 default");
	}
	public static void Special3(){
		int i = 10;
		switch (i) {
		case 10:
			System.out.println(10);
		case 20:
			System.out.println(20);
			break;
		default:
			System.out.println("default");
			//break;	
		}
		System.out.println("----->10 20(因為有break,沒執行default)");
	}
	public static void Special4(){
		int i = 10;
		switch (i) {
		case 10:
			System.out.println(10);
		default:
			System.out.println("default");
			//break;	
		case 20:
			System.out.println(20);
			break;
		
		}
		System.out.println("----->10 default 20(default當成case看待)");
	}
	public static void Special5(){
		int i = 10;
		switch (i) {
		case 0:
			System.out.println(0);
		case 10:
			System.out.println(10);
		case 20:
			System.out.println(20);
		default:
			System.out.println("default");
			//break;	
		}
		System.out.println("----->10 20 default");
	}
	public static void Special6(){
		int i = 1;
		switch (i) {
		case 0:
			System.out.println(0);
		case 10:
			System.out.println(10);
		case 20:
			System.out.println(20);
		default:
			System.out.println("default");
		}
		System.out.println("----->default");
	}
	public static void Special7(){
		int i = 100;
		switch (i) {
		case 0:
			System.out.println(0);
		case 10:
			System.out.println(10);
			break;
		case 20:
			System.out.println(20);
		default:
			System.out.println("default");
		}
		System.out.println("----->default");
	}
	public static void Special8(){
		int i = 100;
		switch (i) {
		case 0:
			System.out.println(0);
		case 10:
			System.out.println(10);
		case 20:
			System.out.println(20);
		}
		System.out.println("----->空");
	}
	public static void main(String[] args) {
		/* 1.switch/case執行流程是:
		 * 		a.遇到匹配的case,並且該case有break則流程執行完畢;
		 * 		b.遇到匹配的case,如果該case沒有break則流程繼續執行(排除default的),直到遇到break或者流程的結束;
		 * 		c.如果沒有匹配的case,則執行default;沒有default就什麼也不做。
		 * 2.如果沒有匹配的case,肯定會執行default;
		 * 如果有匹配的case,這時我們把default當成一個case來對待。
		 * 
		 */
		System.out.println("-------Normal-----------");
		Normal();
		System.out.println("-------0-----------");
		Special();
		System.out.println("-------1-----------");
		Special1();
		System.out.println("-------2-----------");
		Special2();
		System.out.println("-------3-----------");
		Special3();
		System.out.println("-------4-----------");
		Special4();
		System.out.println("-------5-----------");
		Special5();
		System.out.println("-------6-----------");
		Special6();
		System.out.println("-------7-----------");
		Special7();
		System.out.println("-------8-----------");
		Special8();
		
	}
}

執行結果:

-------Normal-----------
10
----->10
-------0-----------
10
20
----->10 20
-------1-----------
10
20
----->10 20
-------2-----------
10
20
default
----->10 20 default
-------3-----------
10
20
----->10 20(因為有break,沒執行default)
-------4-----------
10
default
20
----->10 default 20(default當成case看待)
-------5-----------
10
20
default
----->10 20 default
-------6-----------
default
----->default
-------7-----------
default
----->default
-------8-----------
----->空


*********************************************************************************************************************

寧願做錯了而後悔,也不要錯過了而後悔!