Java switch case 报错

遇到个小问题,使用switch case 时报错: case expressions must be constant expressions。以前学习时并未注意这个细节,现在在编程中困扰许久。。。


以该问题举个例子:

声明的的变量:

  1. public static  int MENU_LEVEL_TOP = 0;//处于IDLE界面  
  2. public static  int MENU_LEVEL_ONE = 1//处于一级菜单状态  
  3. public static  int MENU_LEVEL_TWO = 2//处于二级菜单状态  
  4. public static  int MENU_LEVEL_THREE = 3;//处于三级菜单状态  
    public static  int MENU_LEVEL_TOP = 0;//处于IDLE界面
    public static  int MENU_LEVEL_ONE = 1; //处于一级菜单状态
    public static  int MENU_LEVEL_TWO = 2; //处于二级菜单状态
    public static  int MENU_LEVEL_THREE = 3;//处于三级菜单状态

使用处:
  1. switch(mCurrentMenuLevel){  
  2. case MENU_LEVEL_TOP:              
  3.     break;  
  4. case MENU_LEVEL_ONE:  
  5.     break;  
  6. case MENU_LEVEL_TWO:  
  7.     break;  
  8. default:  
  9.     break;  
  10.       
  11. }  
    	switch(mCurrentMenuLevel){
    	case MENU_LEVEL_TOP:    		
    		break;
    	case MENU_LEVEL_ONE:
    		break;
    	case MENU_LEVEL_TWO:
    		break;
    	default:
    		break;
    		
    	}

eclipse 在case处报错case expressions must be constant expressions (CASE表达式必须是常量表达式)

    

根据报的错误,知道问题根源:case后面必须跟常量。

因此这个问题就比较好解决:将声明的变量声明为final。

更改如下:

  1. public static final int MENU_LEVEL_TOP = 0;//处于IDLE界面  
  2.     public static final int MENU_LEVEL_ONE = 1//处于一级菜单状态  
  3.     public static final int MENU_LEVEL_TWO = 2//处于二级菜单状态  
  4.     public static final int MENU_LEVEL_THREE = 3;//处于三级菜单状态 
后来我将数组定义为final,结果依然报错。原来是又忘记了这个知识点:

例子:
static final String[] T = {"a","b","c"};
这是与由于数组和数组成员之间的区别造成的。上面这个声明只能保证数组引用T是常量,但是并不能保证数组成员之一的T[0]是常量,简单来说,对于这个声明,后续的如下赋值:
1) T = new String[2];   // 不允许,T是常量,不能改变其取值
2) T[0] = "123";   // 允许,因为数组成员取值并未被限定为不可改变(即不是常量)
所以,你在switch()中使用 T[i] 作为case值就会引发编译错误“case expressions must be constant expressions ”。
如:
static final String a_1 = "a";
   static final String a_2 = "b";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值