注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

Java switch-case语句用法及注意事项  

2013-01-24 19:03:22|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

java语言的三种基本结构——顺序、选择、循环。

switch-case是选择结构的重要实现方式。因为虽然实际上switch-case的功能完全可以用if-else代替,但有时用switch-case确实是一种更优雅的实现方式。


对于流程控制中的switch-case语句,一直是我的一个弱项. 
每当考试或者面试笔试的时候,总是丈二和尚摸不着头脑,我想这应该是我基础太差的原因吧! 
为了彻底解决这个心病,不得不花点功夫了! 
首先从原理上来阐述这个问题: 
switch(表达式) 

case 常量表达式1:语句1; 
.... 
case 常量表达式2:语句2; 
default:语句; 

1.default就是如果没有符合的case就执行它,default并不是必须的. 
2.case后的语句可以不用大括号. 
3.switch语句的判断条件可以接受int,byte,char,short,不能接受其他类型. 
4.一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break,利用这一特性可以让好几个case执行统一语句. 

原理归原理,下面是几个容易混淆的例子. 

1.标准型(case后面都有break语句) 
int i=3; 
switch(i) 

   case 1: 
       System.out.println(1); 
       break; 
   case 2: 
       System.out.println(2); 
       break; 
   case 3: 
       System.out.println(3); 
       break; 
   default: 
       System.out.println("default"); 
       break; 

输出结果: 
         3 
2.特殊型1(不是完全有break语句,可以完成一些特殊应用) 
int year=2005; 
int month=3; 
int day; 
switch(month) 

   case 1: 
   case 3: 
   case 5: 
   case 7: 
   case 8: 
   case 10: 
   case 12: 
         day=31; 
         break; 
   case 2: 
         day=28; 
         break; 
   case 4: 
   case 6: 
   case 9: 
   case 11: 
          day=30; 
          break; 

这里 day=31; 
3.特殊型2(default的位置) 
int i=1; 
switch(i) 

   case 1: 
       System.out.println(1); 
    default: 
       System.out.println("default"); 
   case 2: 
       System.out.println(2); 
       break; 
   case 3: 
       System.out.println(3); 
       break; 

输出结果: 
         1 
         default 
         2

以下来自网络:

下面是switch的简单写法:
switch(A){
case B;
}
A部分中的值必须是int型的,或者是能够自动进行饮试转换成int型的表达式。也就是说A部分可以是byte/short/char/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后的值不能出现重复。因此在使用中要注意。

=====================
再就是在使用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 
--------------------------
  评论这张
 
阅读(492)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016