首页 > 编程语言 > 详细

java Switch的用法

时间:2017-02-09 00:54:58      阅读:186      评论:0      收藏:0      [点我收藏+]
目录:
1.语法
2.正面案例分析
3.反面案例分析
 
一.语法
1.switch-case:
     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语句上的。
     case B;case是常量表达式,也就是说B的取值只能是常量(需要定义一个final型的常量,后面会详细介绍原因)或者int、byte、short、char(比如1、2、3、200000000000(注意了这是整型))。
     如果你需要在此处写一个表达式或者变量,那么就要加上单引号; case后的语句可以不用大括号,就是C不需要用大括号包裹着;
     default就是如果没有符合的case就执行它,default并不是必须的.
     ※java int、byte、short、char 数据类型的范围,是怎么算出来的,32位或64位的系统对数据类型范围有影响吗,32位系统或64位系统指的是什么?
     ※java int、byte、short、char 与32位系统,64位系统有关吗?
     ※ int、byte、short、char在内存中是怎么存储的?
二.正面案例分析:
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; 
}
 
三.反面案例分析:
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 ");
  }
}
}
=========输出结果为:
default 
--------------------------
 
明天继续编辑,太困了-_-!

java Switch的用法

原文:http://www.cnblogs.com/fawei/p/6380383.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!