[core.java基础教程]_杨帆_04.语言基础-表达式和流程控制

killerdongbo

贡献于2013-05-12

字数:0 关键词: Java开发

http://gzyangfan.spaces.live.com/blog/ gzyangfan@gmail.com  识别、描述并使用 Java 运算符  区分合法的与非法的基本数据类型赋值  别控制结构中的 boolean 表达式及其要求  识别赋值相容性及基本类型中所需要的类型转换  使用 if、switch、for、while、do 结构进行程序中 的流程控制结构 学习目标 gzyangfan@gmail.com 在Java里,我们利用运算符操作对象和数据,并用执行控制语句作出选择 运算符与表达式 gzyangfan@gmail.com  表达式是运算符和操作数的结合,它是任何一门编程 语言的关键组成部分  表达式允许程序员进行数学计算、值的比较、逻辑操 作以及在Java中进行对象的操作。  一些表达式的例子: ◦ x++ ◦ obj instanceof SomeType ◦ (double) intValue1 / intValue2 ◦ result = value > 100 ? true : false 表达式 gzyangfan@gmail.com  语句 是用分号 (;) 终止的一行或多行代码: totals = a + b + c + d + e + f;  块 是以左大括号和右大括号为边界的语句集合: { x = 1 + 1; y = 2 + 2; } 运算符优先级 gzyangfan@gmail.com  一元运算符就是只有一个操作数的运算符  一元运算符的结合次序是 从右往左  一元运算符一般只出现在操作数的左边(++/--可以出 现在右边) 一元运算符 类别 符号 说明 算术运算符 ++ 自增 -- 自减 + 正号 - 负号 逻辑运算符 ! 取反 位运算符 ~ 按位取反 造型运算符 () 强制类型转换 gzyangfan@gmail.com  + - * / % ++ --  理解操作数的自动升级 ◦ 两个不同类型操作数带来的自动升级 ◦ 运算符带来的自动升级  立即数在表达式中的默认类型(int / double) 算法运算符 char byte short int long float double自动 无损 自动 有损 gzyangfan@gmail.com  如果赋值时信息可能丢失,程序员必须使用类型转换 确认赋值。  在 long 和 int 之间的赋值需要显式的类型转换。  变量自动升级到一种更长的形式(例如 int 到 long)。  如果变量类型的大小至少等于(相同的位数)表达式 类型的大小,则表达式是赋值相容的 。 表达式升级和类型转换小结 gzyangfan@gmail.com  + 运算符以如下方式工作: ◦ 执行 String 连接 ◦ 产生新的 String:  String salutation = "Dr.";  String name = "Pete" + " " + "Seymour";  String title = salutation + " " + name;  第一个参数必须是 String 对象。  非字符串会自动转换为 String 对象。 用 + 运算符进行字符串连接 Java还有个逗号运算符,作为进行后续计算的一个运算符 使用,Java里唯一使用的场所就是 for 循环。 gzyangfan@gmail.com  算术 或 符号 右移位 (>>) 运算符: ◦ 示例:  128 >> 1 返回 128/21 = 64  256 >> 4 返回 256/24 = 16  -256 >> 4 返回 -256/24 = -16 ◦ 移位过程中复制符号位。  逻辑 或 无符号右移位 (>>>) 运算符: ◦ 该运算符用于位模式。 ◦ 移位过程中不复制符号位。  左移运算符 << ◦ 左移运算符只有一个,没有 算术 和 逻辑之分 移位运算符 gzyangfan@gmail.com 移位运算符示例 gzyangfan@gmail.com  关系运算符生成的是一个 Boolean 结果,它们评价 的是运算对象之间的关系。  == 号来判断两个值是否相等,而用 != 来判断是否 不等,用 > 、 < 来判断大于、小于而用 >= 、 <= 来判断大于等于小于等于。  instanceof 也是个关系运算符,它用于比较对象的 类型。 关系运算符 可在此扩展理解,类实例间的比较运算,即使用 == 运算 符和使用特殊方法 equals() 的区别 gzyangfan@gmail.com  boolean 运算符是: ◦ ! – NOT 非 ◦ & - AND 与 ◦ | - OR 或 ◦ ^ - XOR 异或  短路 boolean 运算符是: ◦ && - AND 与 ◦ || - OR 或  可以如下使用这些运算符: if (num != null && num.intValue() < 60) return "需要重考"; else return "及格"; 逻辑运算符 gzyangfan@gmail.com  整数类型位 运算符是: ◦ ~ - Complement ◦ & - AND ◦ ^ - XOR ◦ | - OR 位逻辑运算符 gzyangfan@gmail.com 位逻辑运算符 字节大小示例 gzyangfan@gmail.com  格式如下: ◦ <逻辑表达式> ? : ◦ 若“逻辑表达式”的结果为真,就计算“true值表达式”产 生最终值;否则就以“false值表达式”产生的值作为最终值  使用它可以写出简练的赋值语句,不过会降低代码的 可读性  它可以用 if-else 语句替代,例如: 三元运算符 String message = grade > 60 ? "及格" : "不及格"; String message = null; if (grade > 60) message = "及格"; else message = "及格"; gzyangfan@gmail.com  赋值运算符“=”是最常用的一种运算符。它将等于 号右边的表达式的值赋给左边的变量。  可以将其它的运算符和赋值运算符结合起来,作为 “扩展”的赋值运算符:+=,-=,*=,/=,%=, ^=,&=,|=,>>=,<<=,>>>= 赋值运算符 gzyangfan@gmail.com  “Ulcer Addicts Really Like C A lot”,即“溃疡患 者特别喜欢(维生素)C”——Think in Java 运算符优先级别记忆口诀 助记词 运算符类型 运算符 Ulcer(溃疡) Unary:一元 + - ++ --…… Addicts(患者) Arithmetic (Shift):算术(和移位) * / % + - << …… Really(特别) Relational:关系 > < >= <= …… Like(喜欢) Logical (Bitwise):逻辑(和位) && || ^ …… C Conditional (Ternary):条件(三元) A>B ? X : Y A lot Assignment:赋值 = += -= …… 运算符优先级别是不需要记忆的,在表达式中显式提升运 算符的优先级别更有利于代码的阅读 gzyangfan@gmail.com 任何一门语言都需要流程控制语句,程序的执行过程由流程控制语句进行控制, 流程控制表现的是思考与解决问题的过程步骤。 程序流程控制 gzyangfan@gmail.com  if 语句的语法: if (< 布尔表达式>) < 语句或语句块>  示例: if ( x < 10 ) System.out.println("Are you finished yet?"); 或(建议): if (x < 10) { System.out.println("Are you finished yet?"); } if - else gzyangfan@gmail.com  if-else 语句的语法: if (< 布尔表达式>) < 语句或语句块> else < 语句或语句块>  示例: if (age >= 18) { System.out.println("成年人!"); } else { System.out.println("儿童!"); } if - else gzyangfan@gmail.com  if-else-if 语句的语法: if (< 布尔表达式>) < 语句或语句块> else if (< 布尔表达式>) < 语句或语句块>  示例: if - else - if if (grade >= 85) { System.out.println("优"); } else if (grade >= 75) { System.out.println("良"); } else if (grade >= 60) { System.out.println("中"); } else { System.out.println("差"); } gzyangfan@gmail.com  return 关键字的两个作用 ◦ 指定一个方法返回什么值(不是 void 方法的话) ◦ 立即结束当前方法并返回  示例: return public static int compare(int a, int b) { if (a > b) return 1; if (b > a) return -1; return 0; } gzyangfan@gmail.com  switch 语句的语法: switch (< 表达式>) { case < 常数 1>: < 语句或语句块>* [break;] case < 常数 2>: < 语句或语句块>* [break;] default: < 语句或语句块>* [break;] }  表达式值可以是 byte、 short、char、int,Java5 开始可用枚举。  break 不是必须的,但如 果没有 break 语句,则程 序会执行其后的每一个 case 子句。  default 部分并非必须放 在底部(只是放在底部,代 码可读性会比较强)。 switch gzyangfan@gmail.com switch ( carModel ) { case DELUXE: addAirConditioning(); addRadio(); addWheels(); addEngine(); break; case STANDARD: addRadio(); addWheels(); addEngine(); break; default: addWheels(); addEngine(); } switch ( carModel ) { case DELUXE: addAirConditioning(); case STANDARD: addRadio(); default: addWheels(); addEngine(); }  该switch语句等同于左边 的示例。 switch 语句示例 gzyangfan@gmail.com  while 循环: while (< 测试表达式>) < 语句或语句块>  示例: int i = 0; while (i < 10) { System.out.println(i + "的平方是:" + (i*i)); i++; } 循环语句 – while 测试表 达式 执行语句 结束 true false gzyangfan@gmail.com  do/while 循环: do < 语句或语句块> while (< 测试表达式>) ;  示例: int i = 0; do { System.out.println(i + "的平方是:" + (i*i)); i++; } while (i < 10); 循环语句 – do / while 测试表 达式 执行语句 结束 true false gzyangfan@gmail.com  for 循环: for ( < 初始化表达式>; < 测试表达式>; < 更改表达式> ) < 语句或语句块>  无论是初始化、测试或更改表达式都可以空置  在初始化和更改表达式中,可以使用逗号分隔语句 循环语句 – for 测试表 达式 执行语句 结束 true false 初始化 更改 gzyangfan@gmail.com for 语句示例 // 标准的 for 循环书写方式 for (int i = 1; i <= 100; i++) { // Do something here. } int j = 0; // 或略初始化值与步长的 for 循环写法 for (;j < 100;) { j++; } for (;;) { // 这样写如果没有跳出语句,就会是死循环 break; } // 多初始化值,多步进的范例 for (int a = 0, b = a * 2; a < 5; a++, b = a * 2) { System.out.println("a=" + a + " b=" + b); } gzyangfan@gmail.com  break [< 标号>]; 命令 用于强行退出循环,不执行循环中的剩余语句。  continue [< 标号>]; 命令 用于停止当前的反复,退回循环起点并开始新的反复。  < 标号> :< 语句> 命令,在这里< 语句> 应该是一 个循环。 中断和继续 gzyangfan@gmail.com outer: for (int i = 0; i < 5; i++) { inner: for (int j = 0; j < 5; j++) { if (j > 3) break outer; if (j % 2 == 1) continue inner; System.out.println("i: " + i + ", j:" + j); } } 中断和继续示例 代码的运行结果: i: 0, j:0 i: 0, j:2

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档