java中switch case語句需要加入break的原因是什么

java中switch case語句需要加入break的原因是什么

深圳達(dá)內(nèi)教育      2022-04-06 06:00:01     3

java中switch case語句需要加入break的原因是什么,今天深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)小編為大家介紹“java中switch case語句需要加入break的原因是什么”,希望通過此文大家能夠知道sw

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹


今天深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)小編為大家介紹“java中switch case語句需要加入break的原因是什么”,希望通過此文大家能夠知道switch case語句需要加入break的原因,下面就隨小編一起來了解一下吧。



  java 中使用switch case語句需要加入break 做了具體的實(shí)例分析,及編譯源碼,在源碼中分析應(yīng)該如何使用。


  假設(shè)我們有如下這樣一個(gè)switch語句:


public static void test(int index) { 

  switch (index) { 

  case 1: 

    System.out.println(1); 

  case 2: 

    System.out.println(2); 

  case 3: 

    System.out.println(3); 

  default: 

    System.out.println("Default"); 

  } 


  當(dāng)我們?cè)趫?zhí)行上面的方法時(shí),如果我們傳入的參數(shù)是1,那么會(huì)輸出1、2、3和default,如果傳入的參數(shù)是2,那么會(huì)輸出2、3和default,這是為什么呢?這是因?yàn)閟witch的case語句是用來根據(jù)滿足條件從確定的行開始執(zhí)行的,如果不加入break語句跳出switch邏輯,則會(huì)一直往下執(zhí)行,這也是為什么上面的測(cè)試代碼會(huì)出現(xiàn)傳入?yún)?shù)為2時(shí)會(huì)輸出2、3和default。


  為此,我們也可以看一下上面的代碼編譯后的class文件,通過eclipse打開后,我們可以看到如下內(nèi)容:


public static void test(int index);

  iload_0 [index]

   tableswitch default: 49

    case 1: 28

    case 2: 35

    case 3: 42

  getstatic java.lang.System.out : java.io.PrintStream [22]

  iconst_1

  invokevirtual java.io.PrintStream.println(int) : void [28]

  getstatic java.lang.System.out : java.io.PrintStream [22]

  iconst_2

  invokevirtual java.io.PrintStream.println(int) : void [28]

  getstatic java.lang.System.out : java.io.PrintStream [22]

  iconst_3

  invokevirtual java.io.PrintStream.println(int) : void [28]

  getstatic java.lang.System.out : java.io.PrintStream [22]

  ldc <String "Default"> [33]

  invokevirtual java.io.PrintStream.println(java.lang.String) : void [35]

  return


  上面編譯后的語句每行前面的數(shù)字是程序的指定序號(hào),我們可以把它簡(jiǎn)單的理解為行號(hào),我們可以看到數(shù)字為1的那行定義了一個(gè)switch指定,其默認(rèn)會(huì)跳到49行,如果傳入的參數(shù)是1則跳到28行執(zhí)行,如果是2則跳到35行執(zhí)行,如果是3則跳到42行執(zhí)行。那么我們先來看程序的第28行到32行,其對(duì)應(yīng)的就是調(diào)用System.out.println輸出1,完了后沒有特殊的指令,程序是會(huì)繼續(xù)順序執(zhí)行的,也就是會(huì)依次執(zhí)行35、38、直到57行結(jié)束。


  如果我們把源程序的case語句末端都加上break語句,如下這樣:


public static void test(int index) { 

  switch (index) { 

  case 1: 

    System.out.println(1); 

    break; 

  case 2: 

    System.out.println(2); 

    break; 

  case 3: 

    System.out.println(3); 

    break; 

  default: 

    System.out.println("Default"); 

    break; 

  } 


  那么對(duì)應(yīng)的編譯的class文件通過Eclipse打開后可以看到如下內(nèi)容:


public static void test(int index); 

  iload_0 [index] 

   tableswitch default: 58

    case 1: 28

    case 2: 38

    case 3: 48

  getstatic java.lang.System.out : java.io.PrintStream [22] 

  iconst_1 

  invokevirtual java.io.PrintStream.println(int) : void [28] 

  goto 66

  getstatic java.lang.System.out : java.io.PrintStream [22] 

  iconst_2 

  invokevirtual java.io.PrintStream.println(int) : void [28] 

  goto 66

  getstatic java.lang.System.out : java.io.PrintStream [22] 

  iconst_3 

  invokevirtual java.io.PrintStream.println(int) : void [28] 

  goto 66

  getstatic java.lang.System.out : java.io.PrintStream [22] 

  ldc <String "Default"> [33] 

  invokevirtual java.io.PrintStream.println(java.lang.String) : void [35] 

  return


  我們可以看到switch語句默認(rèn)會(huì)執(zhí)行58行,如果傳入的參數(shù)是1則會(huì)執(zhí)行28行,如果是2則會(huì)從38行開始執(zhí)行,接著我們可以看到28行開始是執(zhí)行的System.out.println(1)的邏輯,完了后會(huì)順序執(zhí)行到35行,35行的指令是會(huì)引導(dǎo)程序執(zhí)行到第66行,也就是跳出了switch邏輯,對(duì)應(yīng)我們的測(cè)試代碼就是程序結(jié)束了。這也是為什么我們?cè)谑褂胹witch語句時(shí)通常需要在每個(gè)case語句結(jié)束時(shí)加入break指令的原因。



以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)小編介紹的“java中switch case語句需要加入break的原因是什么”的內(nèi)容,希望對(duì)大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。


相關(guān)免費(fèi)視頻教程推薦——java初級(jí)入門教程下載


switch case:http://www.bjpowernode.com/xiazai/2686.html


switch case中常見注意事項(xiàng):http://www.bjpowernode.com/xiazai/2685.html


培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。