java switch case or两个case有少部分不同大部分一样,能合并代码吗?

java Switch的用法
来源:博客园
目录: 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); case 2:System.out.print(baction); } //(2)short short saction=3; switch (saction) { case 1:System.out.print(saction); case 3:System.out.print(saction); } //(3)int int iaction=4; switch (iaction) { case 1:System.out.print(iaction); case 4:System.out.print(iaction); } //(4)char char caction='a'; switch (caction) { case 1:System.out.print(caction); case 'a':System.out.print(caction); } //(5)String String straction="abc"; switch (straction) { case "1":System.out.print(straction); case "abc":System.out.print(straction); } //(6)枚举 String fullStr="00"; CompletedProgressEnum action=CompletedProgressEnum. StringBuilder sb = new StringBuilder(fullStr); switch (action) { case basic:sb.replace(0, 2,CompletedProgressEnum.basic.getValue()); case edu:sb.replace(2, 4,CompletedProgressEnum.edu.getValue()); } 需要强调的是 :long类型是不能作用在switch语句上的。 case B;case是常量表达式,也就是说B的取值只能是常量(需要定义一个final型的常量,后面会详细介绍原因)或者int、byte、short、char(比如1、2、3、(注意了这是整型))。 如果你需要在此处写一个表达式或者变量,那么就要加上单引号; 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); case 2: System.out.println(2); default: System.out.println("default"); } 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); case NUM2: System.out.println(2); default: System.out.println("default"); } 3.表达式型(case后面都有break语句,case后的值都是表达式) int i=3; int b = 2; switch(i) { case '类名.getId()': System.out.println(1); case 'b' System.out.println(2); default: System.out.println("default"); } 三.反面案例分析: 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(); case CLICK_RESET: reset(); } } 编译时一直报错: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; 第二个语句就是在编译时不能够被识别出值的变量,因为它没有初始化,当然,这条语句也是错误的。所以总结case后的值可以是常数值或final型的值。再看下面的程序段: public class TestSwitch { public static void main(String[] args){ byte a = 11; switch(a){// C case 11 : System.out.println(" 11 "); case 225 : System.out.println(" 11 ");// 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 -------------------------- 明天继续编辑,太困了-_-!
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动var sogou_ad_id=731545;
var sogou_ad_height=90;
var sogou_ad_width=980;

我要回帖

更多关于 java中的switch case 的文章

 

随机推荐