java基础教程_(5)
switch (表达式)
{
case 判断值1: 语句块1;
[break;]
case判断值2: 语句块2;
[break;] …
case判断值n: 语句块n;
[break;]
[default: 缺省处理语句;
break;] }
1. 要注意表达式必须是符合char,byte,
short,int类型的表达式,而不能使用 boolean类型,浮点类型或long类型,也不能 为一个字符串;
int a=51; char c=(char)a;
运算符优先级别
• 优先级规则:
()乘除(从左到右)加减(从左到右)
• 复杂的表达式:
C=25-5*4/2-10+4; 从左到右的规则求值,结果是:34 按照优先级规则求值,结果是:9 • 可以用( )来改变优先顺序或使表达式更容易理解 • 例如:
• 例如: • int i=5;
int k= ( (i>=0) ? 1 : -1);
int x=5,y=8,z=2 int k=x<3?y:z;
请问k=? k=2
int y=x>0?x:-x;
请问y=?
y=|x|
7. 其他运算符
• 其他运算符包括: (类型)、.、[ ]、( )、instanceof和new • 例如:
float f1;
f1 = f * b;
int
i1;
i1 = c+i;
double d1;
d1 Test.java 查看结果:Promotion.java
public class Age {
public static void main(String args[ ]) {
char grade;
switch (testscore/10) // 两个整型数相除的结果还是整型
case 10:
//此处没有使用break
case 9:
grade='A'; //值为10和9时的操作是相同的
break;
case 8:
grade='B';
break;
case 7:
grade='C';
• 例如:
if ((x == 2) && (y != 2)) System.out.println("两个条件都为 true.");
逻辑运算(&和| )
• 两个操作数均会被运算 (即不采用短路规则) • 例如,
(birthday == true) | (++age >= 65)
查看结果:J_Boolean.java
…
case判断值n: case判断值n+1:语句
[break;] … 7.case 分支中包括多个执行语句时,可以不用花括号“{}”括起; 8.通过if-else语句可以实现switch 语句所有的功能。但通常使用switch语句 更简练,且可读性强,程序的执行效率也高; 9. if-else 语句可以基于一个范围内的值或一个条件来进行不同的操作,但 switch 语句中的每个case 子句都必须对应一个单值。
default后的语句。如果表达式的值与任一
case中的判断值都不匹配且没有default子
句,则程序不执行任何操作,直接跳出 switch 语句,进入后续程序段的执行。
switch语句的流程如图所示:
表达式
判断值1
语句1
break
判断值2
语句2
……. 判断值n
语句n
break
break
default
4. 位运算符
• 位运算符包括:&、|、~、^、>>、>>>和<<
1) >> 带符号右移 2) << 左移 3) >>>不带符号右移
• 越晦涩难懂的,越会被SCJP考到 (?) • 移位操作是:先将整数写成二进制形式,然后按
位操作,最后产生一个新的数 • 注意: 只用于整数
5. 赋值类运算符
• 赋值类运算符包括:=、+=、-=、*=、/=、 &=、|=、%=
– 取模%:返回余数 7 % 5 结果为 2
算术运算符:
问题?
1) -7 / 5
=
2) -7 % 5 =
3) 7 % -5 =
4) 5.5 % 1.0 =
5) 7 / -5 =
6) 3/6*12 =
7) 15.25%0.5 =
8) 15.75%0.5 =
-1 -2 2 0.5 -1 0 0.25 0.25
查看结果:Age.java
2. 关系运算符
• 六个关系运算符: <、 >、<=、>=、== 和 !=
• 用于比较数值类型数据的大小,结果是布尔值
• 例如:
1 > 2;
// false
3.5 != 1;
// true
51.5 >= 23.0;
// true
540 <= 654;
// true
24 == 3*8;
2. 将表达式的值依次与每个case子句中的判 断值相比较。如果匹配成功,则执行该
case子句中常量值后的语句,直到遇到 break语句为止;
3. case子句中判断值的类型必须与表达式的类 型相容,且每个case子句中判断值的值必
须是不同的;
4. default子句是可选的,当表达式的值与任一 case中的判断值都不匹配时,就执行
int ageYears; int ageDays; long ageSeconds;
ageYears=Integer.parseInt(args[0]); ageDays=ageYears*365; ageSeconds=(ageYears*365*24L*60*60); System.out.print(“You are”+ageDays+”days old.”); System.out.print(“You are”+ageSeconds+”seconds old.”); } }
else 语句块2
If 条件A
{ If 条件B 语句块1
}
else 语句块2
注意:else总是与最近的if匹配
测试String之间的等同性
• 使用==比较String在内存中的引用是否相等 • 要测试两个字符串之间是否具有等同性用equals
多分支选择结构switch语句
switch 语句形式如下:
• 例如:
if (grade>=60) System.out.println("Passed!");
else System.out.println("Failed!");
• 例1
System.out.println(studentGrade >= 60 ? "Passed“ : "Failed");
break;
case 6:
grade='D';
break;
default:
缺省处理语句
break
后续语句
switch语句的注意点
5. break语句用来在执行完一个case 分支后,使程序跳出switch 语句,执 行switch 语句的后续语句。因此一般情况下,在每个case 分支后,要用 break来终止后面的case 分支语句的执行; 6. 在一些特殊的情况下,例如多个不同的case值要执行一组相同的操作, 可以写成如下形式:
后再于4.5相加,其结果也为float型。
例: 自动升级实例
public class Promotion
{
public static void main( String args[ ] )
{
byte b = 10;
char c = 'a';
int
i = 90;
float f = 3.5f;
double d = 1.234;
• 例2
max = ( a > b ? a : b ); 可以写成:
if (a > b) max = a;
else max = b;
例:比较两个数的大小,并按照从 大到小的顺序输出到屏幕上。
public class CompareTwo {
public static void main(String[] args) {
查看结果:SwitchTest.java
查看结果:SwitchDaysInMonth.java
例:用switch语句实现学生成绩的百分制到等级制的转换。
class SwitchDemo{
public static void main(String[ ] args) {
int testscore=88;
double d1=23.4; double d2= 56.9; if(d1>=d2)
System.out.println(d1+”>=“+d2); else
System.out.println(d2+”>=“+d1); } }
多重If 结构
查看结果:Coffee.java
If 条件A If 条件B 语句块1
注意: Java是强类型语言,因此,在进行赋值操作时要对类型进行检查;
自动升级规则
1. (byte或 short) op int → int 2. (byte或 short或 int) op long → long 3. (byte或 short或 int或 long) op float → float 4. (byte或 short或 int或 long或 float) op double → double 5. char op int → int 其中,箭头左边表示参与运算的数据类型 op为运算符(如加、减、乘等) 右边表示运算结果的数据类型。 如:3+4.5,因为4.5是float型,所以3先被转换为float型,然