javascript学习指南_java中switch case语句的使用方法

更新时间:2019-05-22    来源:js教程    手机版     字体:

【www.bbyears.com--js教程】

switch语法

 代码如下


switch(表达式)
{
case 常量表达式1:语句1;
....
case 常量表达式2:语句2;
default:语句;
}

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

例子

 代码如下

public class SwitchDemo {

 public static void main(String[] args) {
  System.out.println(switchTest(4));//55
 }

 private static int switchTest(int key) {

  int value = 0;
  switch (key) {
  case 1:
   value = 11;
  case 2:
   value = 22;
  case 3:
   value = 33;
  case 4:
   value = 44;
  default:
   value = 55;
  }

  return value;
 }
}

输出 : 55

switch-case的注意地方

下面是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

--------------------------
看到了吗?连default都执行,注意结束符break;就OK了。

case中A不能为变量

Java switch case里面的用法,由于 switch case 和 if-else 工作原理不一样,可能某些公司会避免使用if-else而采用switch case的方法来解决问题。

在jdk1.6 中:

 代码如下

int i= "test".hashcode();

String s = "test";

switch (s.hashcode()) {

  case i :System.out.println("bad");

}//这种方法是不支持的。编译根本通过不了,因为 i 是一个变量

 

经过网上一翻查找,在jdk1.7中可能会支持这个功能。

但是问题就不能这么简单的解决,因为现在很多企业都没有在使用1.7的版本。

没事在电脑面前想出来一个办法,应该可以行得通在jdk1.6中解决 case不能使用变量的方法

上代码

 代码如下

public class TestHash {

 /**
  * Comments:
  * @author Jacky
  * Chinese :
  * @param args
  */
 public static void main(String[] args) {
 

   String s = "test";

 

   int i= "test".hashCode();

 

  switch ( ("test1".hashCode()== i ? 1:1) *("test2".hashCode() == i ? 2:1) *(s.hashCode() == i ? 3 :1) ){


             case   1 :System.out.println("not good");break;


             case   2 : System.out.println("not good"); break;


             case   3  : System.out.println("good"); break;

 

             default : System.out.print(4); break;


  }//switch


 }// main

 

}//class

 

ok,我运行了下,运行结果是打印 good

本文来源:http://www.bbyears.com/wangyezhizuo/52037.html

热门标签

更多>>

本类排行