java Switch的用法


目錄:
1.常規語法
2.正確案例分析
3.錯誤案例分析
 
1.常規語法
1.1.switch參數范圍
     switch(A),括號中A的取值可以是byte、short、int、char、String,還有枚舉類型,應用舉例:
//(1)byte
byte baction=2;
switch (baction)
{
    case 1:System.out.print(baction);break;
    case 2:System.out.print(baction);break;
}
//(2)short
short saction=3;
switch (saction)
{
    case 1:System.out.print(saction);break;
    case 3:System.out.print(saction);break;
}
//(3)int
int iaction=4;
switch (iaction)
{
    case 1:System.out.print(iaction);break;
    case 4:System.out.print(iaction);break;
}
//(4)char
char caction='a';
switch (caction)
{
    case 1:System.out.print(caction);break;
    case 'a':System.out.print(caction);break;
}
//(5)String
String straction="abc";
switch (straction)
{
    case "1":System.out.print(straction);break;
    case "abc":System.out.print(straction);break;
}
//(6)枚舉
String fullStr="00000000000000";
CompletedProgressEnum action=CompletedProgressEnum.basic;
StringBuilder sb = new StringBuilder(fullStr);
switch (action)
{
    case basic:sb.replace(0, 2,CompletedProgressEnum.basic.getValue()); break;
    case edu:sb.replace(2, 4,CompletedProgressEnum.edu.getValue());break;
}
 
      注意:long類型不能作為switch參數。
1.2.case子句
     case B;case是常量表達式,也就是說B的取值只能是常量(需要定義一個final型的常量)或者int、byte、short、char(比如1、2、3、200000000000(注意了這是整型))。
     
     如果沒有符合的case,就執行default,default為非必選項。
 
二.正確案例分析:
1.標准型(case后面都有break語句,case后的值都是整數)
int i=3; 
switch(i) 
case 1: 
System.out.println(1); 
break; 
case 2: 
System.out.println(2); 
break;  
default: 
System.out.println("default"); 
break; 
}
 
2.常量型(case后面都有break語句,case后的值都是常量)
private final int NUM1=1;
private final int NUM2=1;
int i=3;
switch(i)
{
case NUM1:
System.out.println(1);
break;
case NUM2:
System.out.println(2);
break; 
default:
System.out.println("default");
break;
}
 
 
三.錯誤案例分析:
1.第二種情況容易出錯的情況:
 發現問題
private int CLICK_QUERY = 1;
private int CLICK_RESET = 2;
@Override
public void onClick(View v)
{
int tag = (Integer) v.getTag();
switch (tag)
{
  case CLICK_QUERY:
  query();
  break;
  case CLICK_RESET:
  reset();
  break;
}
}
編譯時一直報錯:CLICK_QUERY 和CLICK_RESET——case expressions must be constant expressions
解決問題:

          case后面必須跟常量,必須要常量,將上面兩個變量聲明為final即可。

private final int CLICK_QUERY = 1;
private final int CLICK_RESET = 2;
2.下面是switch的簡單寫法:
switch(A){
case B;
}
   final型的變量也是有要求的,也即是它必須是編譯時的常量,怎么講呢,看下面的程序段:
final int a = 0;
final int b;
   第二個語句就是在編譯時不能夠被識別出值的變量,因為它沒有初始化,當然,這條語句也是錯誤的。所以總結case后的值可以是常數值或final型的值。再看下面的程序段:
  byte a = 11;
  switch(a){// C
  case 11 : System.out.println(" 11 "); break;
  case 225 : System.out.println(" 11 "); break;// D
  }
    該代碼正確嗎?答案是否定的。雖然在 C 處是合法的也即是byte型的a值可以出現在switch中,但是 D處的語句也即是第二個case后的值是225大小超過了byte的范圍,所以是錯誤的。再就是case后的值不能出現重復。因此在使用中要注意。
 
3.忘記寫break的錯誤
   再就是在使用switch-case中最容易忽視的就是忘記在每個case后處理完后忘記寫上break;語句。那它帶來的后果是什么呢,下面小程序段會告訴你:
  byte a = 2;
  switch(a){
  case 1 : System.out.println(" A ");
  case 2 : System.out.println(" B ");
  case 3 : System.out.println(" C ");
  case 4 : System.out.println(" D ");
  default : System.out.println(" default ");
  }
=========輸出結果為:
default 
--------------------------
 
 
     下面是突然想到的問題,有高人能精確地說明白嗎?
     ※java int、byte、short、char 數據類型的范圍,是怎么算出來的,32位或64位的系統對數據類型范圍有影響嗎,32位系統或64位系統指的是什么?
     ※java int、byte、short、char 與32位系統,64位系統有關嗎?
     ※ int、byte、short、char在內存中是怎么存儲的?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM