java中使用switch-case的用法及注意事項超全總結
今天陳紅軍老師在用到switch的時候,這種設計到最基本的內容,可能忘記它的一些基本語法,出現了一些錯誤,所以即興從各種資料查詢總結了下面的內容,希望可以幫助那些正在困擾switch錯誤和各種細節問題的朋友!
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){// 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;語句。那它帶來的後果是什麼呢,下面小程式段會告訴你:
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了。
轉載請指明:本文來自楊凱專屬頻道
相關文章
- TCP使用注意事項總結TCP
- Python eval的用法及注意事項Python
- vue元件通訊–注意事項及經驗總結Vue元件
- vue元件通訊--注意事項及經驗總結Vue元件
- Guava HashMultimap使用及注意事項Guava
- 招聘面試技巧及注意事項總彙面試
- 快取使用中的注意事項快取
- mysql索引使用技巧及注意事項MySql索引
- Oracle 重建表(rename)注意事項總結Oracle
- jQuery 語法總結和注意事項jQuery
- C中memcpy使用注意事項memcpy
- 開發及上線中的注意事項
- golang 中 channel 的詳細使用、使用注意事項及死鎖分析Golang
- Oracle Outline的使用及注意事項Oracle
- ThinkPHP中CURD where的使用注意事項PHP
- Linux中fork的使用注意事項Linux
- java中的HashMap用法總結JavaHashMap
- 多執行緒CreateThread函式的用法及注意事項執行緒thread函式
- 阿里雲初次備案全流程及注意事項阿里
- 轉:Oracle Outline的使用及注意事項Oracle
- 達夢資料裝載工具-dmfldr使用注意事項總結
- Oracle使用*的注意事項Oracle
- ListView中getChildAt(index)的使用注意事項ViewLDAIndex
- java equals()方法的注意事項Java
- PHP的引用操作符& 的使用及注意事項PHP
- 達夢表空間管理注意事項總結
- TokuDB的安裝及注意事項
- 使用parallel注意事項Parallel
- 2. Go中defer使用注意事項Go
- 關於Golang struct{}{}用法和注意事項GolangStruct
- java中Stream的使用流程及注意Java
- 使用c++中string類的注意事項C++
- 搭建 nuget 私服及注意事項
- 新手使用ABP框架及注意事項--純後端框架後端
- Go語言中 defer 使用場景及注意事項,你是要注意的!Go
- Android 應用內多程式的使用及注意事項Android
- 使用Google Fonts注意事項Go
- Go 切片使用注意事項Go