TShopping
標題: java中使用switch-case的用法及注意事項超全總結 [打印本頁]
作者: woff 時間: 2016-12-29 08:35
標題: java中使用switch-case的用法及注意事項超全總結
1.switch-case 注意事項:
switch(A),括號中A的取值只能是整型或者可以轉換為整型的數值類型,比如byte、short、int、char、還有枚舉;需要強調的是:long和String類型是不能作用在switch語句上的。
case B:C;case是常量表達式,也就是說B的取值只能是常量(需要定義一個final型的常量,後面會詳細介紹原因)或者int、byte、short、char(比如1、2 、3、200000000000(注意了這是整型)),如果你需要在此處寫一個表達式或者變量,那麼就要加上單引號; case後的語句可以不用大括號,就是C不需要用大括號包裹著;
default就是如果沒有符合的case就執行它,default並不是必須的.
2. 案例分析:
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;
- }
複製代碼
3.表達式型(case後面都有break語句,case後的值都是表達式)
- int i=3;
- int b = 2;
- switch(i)
- {
- case '类名.getId()':
- System.out.println(1);
- break;
- case 'b'
- System.out.println(2);
- break;
- default:
- System.out.println("default");
- break;
- }
複製代碼
3. 使用switch時的出錯分析:
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;
}
A部分中的值必須是int型的,或者是能夠自動進行飲試轉換成int型的表達式。也就是說A部分可以是byte\short\char\int型(因為這幾種類型都可以自動轉換為int型)的。
其次要強調的是該程序中B部分的值必須是單個byte\short\char\int型的值,或者是final型的變量。
但是final型的變量也是有要求的,也即是它必須是編譯時的常量,怎麼講呢,看下面的程序段:
final int a = 0;
final int b;
第二個語句就是在編譯時不能夠被識別出值的變量,因為它沒有初始化,當然,這條語句也是錯誤的。所以總結case後的值可以是常數值或final型的值。再看下面的程序段:
- public class TestSwitch {
- public static void main(String[] args){
- byte a = 11;
- switch(a){
- 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;語句。那它帶來的後果是什麼呢,下面小程序段會告訴你:
- public class TestSwitchCase {
- public static void main(String[] args){
- 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 ");
- }
- }
- }
- =========输出结果为:
- B
- C
- D
- default
- --------------------------
複製代碼
看到了嗎?連default都執行,注意結束符break;就OK了。
文章來源
歡迎光臨 TShopping (http://www.tshopping.com.tw/) |
Powered by Discuz! X3.2 |