购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 switch语句详解

知识点讲解:光盘:视频\PPT讲解(知识点)\第4章\switch语句详解.mp4

switch有“开关”之意,switch语句是为了判断多条件而诞生的。使用switch语句的方法和使用if嵌套语句的方法十分相似,但是switch语句更加直观、更加容易理解。在本节的内容中,将详细讲解switch语句的基本用法。

4.2.1 switch语句的形式

switch语句能够对条件进行多次判断,具体语法格式如下所示。

switch(整数选择因子){
case 整数值1:语句; break;
case 整数值2:语句; break;
case 整数值3:语句; break;
case 整数值4:语句; break;
case 整数值5:语句; break;
//..
default:语句;
}

其中,“整数选择因子”必须是byte、short、int和char类型,每个value必须是与“整数选择因子”类型兼容的一个常量,而且不能重复。“整数选择因子”是一个特殊的表达式,能产生整数值。switch能将整数选择因子的结果与每个整数值比较。若发现相符的,就执行对应的语句(简单或复合语句)。若没有发现相符的,就执行default语句。

在上面的定义中,大家会注意到每个case均以一个break结尾。这样可使执行流程跳转至switch主体的末尾。这是构建switch语句的一种传统方式,但break是可选的。若省略break,会继续执行后面的case语句的代码,直到遇到一个break为止。尽管通常不想出现这种情况,但对有经验的程序员来说,也许能够善加利用。注意最后的default语句没有break,因为执行流程已到了break的跳转目的地。当然,如果考虑到编程风格方面的原因,完全可以在default语句的末尾放置一个break,尽管它并没有任何实际的用处。

switch语句的执行流程如图4-7所示。

图4-7 switch语句

实例025 使用switch语句

源码路径 \daima\4\switchtest1.java 视频路径 \视频\实例\第4章\025

实例文件switchtest1.java的具体代码如下所示。

public class switchtest1
{
 public static void main(String args[])
 {
   int a=567;
   switch(a)
   {
     case 555:
 System.out.println("a=555");
      break;
     case 557:
      System.out.println("a=557");
      break;
     case 567:
      System.out.println("a=567");
      break;
     default:
      System.out.println("no");
   }
 }
}
范例049:使用switch语句
源码路径:光盘\演练范例\049\
视频路径:光盘\演练范例\049\
范例050:根据消费金额计算折扣
源码路径:光盘\演练范例\050\
视频路径:光盘\演练范例\050\

执行后的效果如图4-8所示。



在接下来的内容中,将通过一个具体实例来说明关系运算符的基本用法。

实例011 使用关系运算符

源码路径 \daima\3\guanxi.java 视频路径 \视频\实例\第3章\011

实例文件guanxi.java的主要代码如下所示。

public class guanxi{
public static void main(String args[]){
 char a='k';     //赋值a
 char b='k';       //赋值b
 char c='A';     //赋值c
 int d=100;     //赋值d
 int e=101;     //赋值e
  System.out.println(a==b);
  //下面开始分别输出对应的运算结果
  System.out.println(b==c);
  System.out.println(b!=c);
  System.out.println(d<e);
}
}
范例021:演示使用逻辑运算符的用法
源码路径:光盘\演练范例\021\
视频路径:光盘\演练范例\021\
范例022:不用乘法运算符实现2×16
源码路径:光盘\演练范例\022\
视频路径:光盘\演练范例\022\

执行后的效果如图3-12所示。

图3-12 执行效果

3.3.3 位运算符

在Java程序设计中,使用位运算符来操作二进制数据。位运算(Bitwise Operators)可以直接操作整数类型的位,这些整数类型包括long、int、short、char和byte。Java语言中位运算符的具体说明如表3-7所示。

表3-7 逻辑运算符

位逻辑运算符

说  明

按位取反运算

&

按位与运算

|

按位或运算

^

按位异或运算

>>

右移

>>>

右移并用0填充

<<

左移

因为位运算符能够在整数范围内对位操作,所以这样的操作对一个值产生什么效果是很重要的。具体来说,了解Java如何存储整数值并且如何表示负数是非常有用的。在表3-8中演示了操作数A和操作数B按位逻辑运算的结果。

表3-8 位逻辑运算结果

操作数A

操作数B

A|B

A&B

A^B

~A

0

0

0

0

0

1

0

1

1

0

1

1

1

0

1

0

1

0

1

1

1

1

0

0

移位运算符把数字的位向右或向左移动,产生一个新的数字。Java的右移运算符有2个,分别是>>和>>>。

下面通过一段代码来演示在Java中使用位运算符的基本方法,其代码【光盘\daima\3\ WeiOne.java】如下所示。

public class WeiOne {
public static void main(String args[]){
   String binary[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
   "1000", "1001", "1010", "1011", "1100",   "1101", "1110", "1111"
   };
   int a = 3;
   int b = 6; 
   int c = a | b;
   int d = a & b; 
   int e = a ^ b; 
   int f =(~a & b)|(a & ~b);
   int g = ~a & 0x0f;
   System.out.println(" a = " + binary[a]);
   System.out.println(" b = " + binary[b]);
   System.out.println(" a|b = " + binary[c]);
   System.out.println(" a&b = " + binary[d]);
   System.out.println(" a^b = " + binary[e]);
   System.out.println("~a&b|a&~b = " + binary[f]);
   System.out.println(" ~a = " + binary[g]);
   }
}

按位异或运算符“^”,只有在比较两个位不相等时结果才返回1,否则结果是零。上述代码能够表明运算符XOR的一个有用属性。运行上述代码后的执行效果如图3-13所示。

图3-13 位运算符

3.3.4 条件运算符

条件运算符是一种特殊的运算符,也被称为三目运算符。它与前面所讲解的运算符有很大不同,在Java中提供了一个三元运算符,其实这跟后面讲解的if语句有相似之处。条件运算符的目的是决定把哪个值赋给前面的变量。在Java语言中使用条件运算符的语法格式如下所示。

变量=(布尔表达式)? 为true时所赋予的值:为false时所赋予的值;

实例012 使用条件运算符

源码路径 \daima\3\tiao.java 视频路径 \视频\实例\第3章\012

实例文件tiao.java的主要代码如下所示。

public class tiao
{
 public static void main(String args[])
 {
//赋值chengji的初始值为70
   double chengji=70;
   String Tiao=(chengji>=90)?"已经很优秀":
                "不是很优秀, 还需要努力!"; 
   //输出结果
   System.out.println(Tiao);
 }
}



范例023:根据条件的不同实现赋值
源码路径:光盘\演练范例\023\
视频路径:光盘\演练范例\023\
范例024:实现两个变量的互换
源码路径:光盘\演练范例\024\
视频路径:光盘\演练范例\024\

在上述代码中,设置如果变量chengji大于或等于90,则输出“”已经很优秀的提示,反之就输出“不是很优秀,还需要努力!”的提示。因为在代码中设置“chengji=70”,所以执行后的效果如图3-14所示。

图3-14 执行效果

3.3.5 赋值运算符

赋值运算符是一个等号“=”,Java中的赋值运算与在其他计算机语言中的运算一样,起到了一个赋值的作用。在Java中使用赋值运算符的格式如下所示。

var = eXPression;

其中,变量var的类型必须与表达式expression的类型一致。

赋值运算符有一个有趣的属性,它允许我们对一连串变量进行赋值。请看下面的代码。

int x, y, z; x = y = z = 100;

在上述代码中,使用了一个赋值语句对变量 x y z 都赋值为100。这是因为“=”运算符产生右边表达式的值,因此 z = 100的值是100,然后该值被赋给 y ,并依次被赋给 x 。使用“字符串赋值”是给一组变量赋与同一个值的简单办法。在赋值时类型必须匹配,否则将会出现编译错误。

实例013 演示赋值类型不匹配的错误

源码路径 \daima\3\fuzhi.java 视频路径 \视频\实例\第3章\013

实例文件fuzhi.java的主要代码如下所示。

public class fuzhi
{
  public static void main(String args[])
  {
    //定义的字节数据
    byte a=9;
    byte b=7;
    byte c=a+b;
    System.out.println(c);
  }
}
范例025:扩展赋值运算符的功能
源码路径:光盘\演练范例\025\
视频路径:光盘\演练范例\025\
范例026:演示运算符的应用
源码路径:光盘\演练范例\026\
视频路径:光盘\演练范例\026\

在上述代码中,执行后发现提示类型不匹配,执行效果如图3-15所示。

图3-15 执行效果

注意: 扩展赋值运算符

在Java中可以对赋值运算符进行扩展,其中最为常用的有如下扩展操作。

+=:对于x+=y,等效于x=x+y。

-=:对于x -=y,等效于x=x-y。

>=:对于×*=y,等效于x=x*y。

/=:对于x/=y,等效于x=x/y。

%=:对于x%=y,等效于x=x%y。

&=:对于x&=y,等效于x=x&y。

|=:对于x|=y,等效于x=xly。

^=:对于x^=y,等效于x=x^y。

<<=:对于x<<=y,等效于x=x<<y。

>>=:对于x>>=y,等效于x=x>>y。

>>>=:对于x>>>=y,等效于x= x>>>y。

另外,在后面的学习中我们会接触到equals()方法,此方法和赋值运算符==的功能类似。要想理解两者之间的区别,我们需要从变量说起。Java中变量分为两类,一类是值类型,它储存的是变量真正的值,比如基础数据类型,值类型储存在内存的栈中;一类是引用类型,它们储存的是对象的地址,而该地址所对应的内存空间储存的才是我们需要的内容,比如字符串和对象等,储存在内存中的堆中。而赋值运算符==比较的是值类型,如果比较两个引用类型,比较的就是它们的引用地址。而equals()方法只能用来比较引用类型,就是引用的内容。

(1)= =运算符。

= =运算符比较的是左右两边的变量是否来自同一个内存地址。如果比较的是值类型(如基础数据类型,int char之类)的话,由于值类型是存储在栈里面的,当两个变量有同一个值时,其实它们只用到了一个内存空间,所以比较的结果是true。

(2)equals()方法。

eqluals()方法是Object类的基本方法之一,所以每个类都有自己的equals()方法,其功能是比较两个对象是否是同一个,通俗地理解就是比较这两个对象内容是否一样。

3.3.6 运算符的优先级

数学中的运算都是从左向右运算的,在Java中除了单目运算符、赋值运算符和三目运算符外,大部分运算符也是从左向右结合的,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是它们是从右向左运算的。乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作符可以互换位置而不会影响结果。

运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序,表3-9中列出了包括分隔符在内的所有运算符的优先级顺序,上一行中的运算符总是优先于下一行的。



表3-9 Java运算符的优先级

运 算 符

Java运算符

分隔符

. [ ] () { } , ;

单目运算符

++ —— ~ !

强制类型转换运算符

(type)

乘法/除法/求余

*   /  %

加法/减法

+  -

移位运算符

<<  >>  >>>

关系运算符

<  <=  >=  > instanceof

等价运算符

==  !=

按位与

&

按位异或

^

按位或

条件与

&&

条件或

三目运算符

?:

赋值

= += -= *= /= &= |= ^= %= <<= >>= >>>=



根据表3-9所示的运算符的优先级,假设int a=3,开始分析下面b的计算过程。

int b= a+2*a

程序先执行2*a得到6,再计算a+6得到9。如果使用()就可以改变程序的执行过程,例如:

int b=(a+2)*a

则先执行a+2得到5,再用5*a得15。

实例014 使用表达式与运算符

源码路径 \daima\3\biaoone.java 视频路径 \视频\实例\第3章\014

实例文件biaoone.java的主要代码如下所示。

public class biaoone 
{
  public static void main(String args[])
  {
  int a=231;
  int b=4;
  int h=56;
  int k=45;
  int x=a+h/b;
  int y=h+k;
 System.out.println(x);
 System.out.println(y);
 System.out.println(x==y);
}
}
范例027:演示运算符的优先级
源码路径:光盘\演练范例\027\
视频路径:光盘\演练范例\027\
范例028:演示关系运算符的应用
源码路径:光盘\演练范例\028\
视频路径:光盘\演练范例\028\

执行后的效果如图3-16所示。

图3-16 执行效果

注意: 书写Java运算符的两点注意事项。

(1)不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。

(2)不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用小括号()来控制表达式的执行顺序。 qr1v5+FHAafXxPdceVabE/re5E6JWQmIld4YuE9lByqem/UMr++o4a1IEu9d8uG0

点击中间区域
呼出菜单
上一章
目录
下一章
×