2014-07-25 28 views
1

from Oracle開關狀態的默認情況是否有中斷?

public class SwitchDemo { 
    public static void main(String[] args) { 

     int month = 8; 
     String monthString; 
     switch (month) { 
      case 1: monthString = "January"; 
        break; 
      case 2: monthString = "February"; 
        break; 
      case 3: monthString = "March"; 
        break; 
      case 4: monthString = "April"; 
        break; 
      case 5: monthString = "May"; 
        break; 
      case 6: monthString = "June"; 
        break; 
      case 7: monthString = "July"; 
        break; 
      case 8: monthString = "August"; 
        break; 
      case 9: monthString = "September"; 
        break; 
      case 10: monthString = "October"; 
        break; 
      case 11: monthString = "November"; 
        break; 
      case 12: monthString = "December"; 
        break; 
      default: monthString = "Invalid month"; 
        break; //why is there a switch statement here? 
     } 
     System.out.println(monthString); 
    } 
} 

頁解釋

從技術上講,由於流動掉下來的 switch語句不需要最終決裂。建議使用中斷,以便修改 代碼更容易,更不容易出錯。缺省部分處理 所有未由 部分中的一個明確處理的值。

我不確定第二句是否在一般switch語句中使用斷點是合理的,或者是特別指出在最後添加break語句會使代碼更少出錯。如果我在默認情況下拋出一個異常,那麼是否有一點需要在事後調用break或者這是浪費?在Netbeans紅色!出現在無法達到的break語句旁邊,但編譯得很好。

關於可讀性,如果滿足條件時運行的代碼跨越幾行,應該如何格式化一個大小寫塊?例如,而不僅僅是monthString = "January";有10行代碼循環和東西?

我使用開關。如果你在休息永遠不會執行的,所以你可以把它的默認情況下拋出一個異常,以測試用戶輸入的號碼選擇1,2或3

+2

「如果我在默認情況下拋出一個異常,那麼之後是否有點調用break,或者這是浪費?」 - 拋出異常之後,做任何事情都沒有意義。 – dognose

+0

當我使用IDE添加案例語句時,它將它們放在最後。最後使用'break;'是不容易出錯的恕我直言。 –

+1

在這個例子中,我將使用一個數組而不是一個switch語句。 (一行或兩行代碼) –

回答

0

然後離開。我個人使用大括號來避免一般處理交換機時的可讀性差。

因此,例如:

switch (variable) { 
    case 1: { 
     code; 
     mode code; 
     break; 
    } 
    default: { 
     break; 
    } 
} 

如果沒有括號,而是良好的縮進它也是很好的可讀性。 例子:

switch (variable) { 
     case 1: 
      code; 
      mode code; 
      break; 
     default: { 
      break; 
    } 
0

雖然它不是必需的(因爲它會退出而不break語句完全一樣),我認爲這是一個好習慣,包括在默認的情況下,break;。通常情況下,當我們開始認爲我們知道這一切時,我們最終會介紹一個如果我們堅持基本知識就很容易被阻止的錯誤。 It's a matter of consistency。它類似於使用大括號單行條件語句,像這樣:

if(true) 
    do x; 
else 
    do y; 

VS

if(true) { 
    do x; 
} else { 
    do y; 
} 

就拿蘋果的衆所周知的SSL/TLS漏洞https://www.imperialviolet.org/2014/02/22/applebug.html

1

我不知道如果第二句通常在開關語句中使用斷點,或者特別指出在最後添加斷點語句使得代碼不易出錯。

後者。

如果我在默認情況下拋出一個異常,那麼之後是否有一個調用break的點或者這是浪費?

廢物。非新手認識到拋出異常是一個事實上的突破。強大的代碼是一回事,試圖防止初學者和白癡成爲浪費時間。他們只會用其他方式來打破它。

在Netbeans一個紅色!出現在無法達到的break語句旁邊,但編譯得很好。

是的,但你不想那些紅色!擺脫它。

關於可讀性,如果滿足條件時運行的代碼跨越幾行,應如何格式化大小寫塊?例如,而不僅僅是monthString =「January」;有10行代碼循環和東西?

考慮把它放在一個單獨的方法。

我使用的開關,以測試用戶輸入的號碼選擇1,2或3

在這種情況下,你需要一個默認的呢?在交換機中不需要它。

我認爲默認在大多數情況下是一個非常糟糕的主意。例外的情況是,可能會將無效值傳遞給switch語句,並且需要對此做些什麼(拋出異常,顯示消息等等)。否則,每個可能的值都應該有一個案例,即使它是空的,所以很明顯,該值是有效的,但是你不打算髮生任何事情。

相關問題