最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中switch case語句需要加入break的原因解析

 更新時(shí)間:2017年07月12日 11:00:41   投稿:lqh  
這篇文章主要介紹了java中switch case語句需要加入break的原因解析的相關(guān)資料,需要的朋友可以參考下

java中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),我們可以把它簡單的理解為行號(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指令的原因。

 感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • java如何使用zip壓縮實(shí)現(xiàn)讀取寫入

    java如何使用zip壓縮實(shí)現(xiàn)讀取寫入

    這篇文章主要為大家介紹了java如何使用zip壓縮實(shí)現(xiàn)讀取寫入示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 在Eclipse中部署Spring Boot/Spring Cloud應(yīng)用到阿里云

    在Eclipse中部署Spring Boot/Spring Cloud應(yīng)用到阿里云

    這篇文章主要介紹了在Eclipse中部署Spring Boot/Spring Cloud應(yīng)用到阿里云,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Java中的方法內(nèi)聯(lián)介紹

    Java中的方法內(nèi)聯(lián)介紹

    大家好,本篇文章主要講的是Java中的方法內(nèi)聯(lián)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Java線程中斷的本質(zhì)深入理解

    Java線程中斷的本質(zhì)深入理解

    Java的中斷是一種協(xié)作機(jī)制。也就是說調(diào)用線程對(duì)象的interrupt方法并不一定就中斷了正在運(yùn)行的線程,它只是要求線程自己在合適的時(shí)機(jī)中斷自己,本文將詳細(xì)介紹,需要了解的朋友可以參考下
    2012-12-12
  • 往DAO類中注入@PersistenceContext和@Resource的區(qū)別詳解

    往DAO類中注入@PersistenceContext和@Resource的區(qū)別詳解

    這篇文章主要介紹了往DAO類中注入@PersistenceContext和@Resource的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • logback如何自定義日志存儲(chǔ)

    logback如何自定義日志存儲(chǔ)

    這篇文章主要介紹了logback如何自定義日志存儲(chǔ)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot實(shí)現(xiàn)發(fā)送驗(yàn)證碼功能(圖片驗(yàn)證碼)

    SpringBoot實(shí)現(xiàn)發(fā)送驗(yàn)證碼功能(圖片驗(yàn)證碼)

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)發(fā)送驗(yàn)證碼功能(圖片驗(yàn)證碼),本次內(nèi)容主要學(xué)習(xí)如何做一個(gè)發(fā)送驗(yàn)證碼和識(shí)別驗(yàn)證碼的功能,需要的朋友可以參考下
    2024-06-06
  • Spring AOP方法內(nèi)部調(diào)用不生效的解決方案

    Spring AOP方法內(nèi)部調(diào)用不生效的解決方案

    最近有個(gè)需求,統(tǒng)計(jì)某個(gè)方法的調(diào)用次數(shù),開始使用 Spring AOP 實(shí)現(xiàn),后來發(fā)現(xiàn)當(dāng)方法被內(nèi)部調(diào)用時(shí),切面邏輯將不會(huì)生效,所以本文就給大家介紹了Spring AOP方法內(nèi)部調(diào)用不生效的解決方案,需要的朋友可以參考下
    2025-01-01
  • springboot整合RabbitMQ發(fā)送短信的實(shí)現(xiàn)

    springboot整合RabbitMQ發(fā)送短信的實(shí)現(xiàn)

    本文會(huì)和SpringBoot做整合,實(shí)現(xiàn)RabbitMQ發(fā)送短信,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • java可以作為第一門編程語言學(xué)習(xí)嗎

    java可以作為第一門編程語言學(xué)習(xí)嗎

    在本篇內(nèi)容里小編給JAVA零基礎(chǔ)的網(wǎng)友分享一篇關(guān)于java可以作為第一門編程語言學(xué)習(xí)嗎的文章,有興趣的朋友們可以參考下。
    2020-11-11

最新評(píng)論

兴城市| 荆门市| 阳春市| 黑山县| 时尚| 渝北区| 朔州市| 荣成市| 时尚| 康定县| 若尔盖县| 财经| 凤山市| 满洲里市| 绥棱县| 罗定市| 纳雍县| 鹤庆县| 东方市| 酒泉市| 湘乡市| 通州区| 大荔县| 蕲春县| 九江市| 满洲里市| 竹山县| 河南省| 石家庄市| 兖州市| 宜兰市| 建宁县| 乐至县| 门头沟区| 黎城县| 葵青区| 南安市| 乳山市| 星子县| 吉木萨尔县| 潼南县|