知识点讲解:光盘:视频\PPT讲解(知识点)\第4章\switch语句详解.mp4
switch有“开关”之意,switch语句是为了判断多条件而诞生的。使用switch语句的方法和使用if嵌套语句的方法十分相似,但是switch语句更加直观、更加容易理解。在本节的内容中,将详细讲解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 执行效果
在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 位运算符
条件运算符是一种特殊的运算符,也被称为三目运算符。它与前面所讲解的运算符有很大不同,在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 执行效果
赋值运算符是一个等号“=”,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()方法,其功能是比较两个对象是否是同一个,通俗地理解就是比较这两个对象内容是否一样。
数学中的运算都是从左向右运算的,在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)不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用小括号()来控制表达式的执行顺序。