已阅读5页,还剩108页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 Java实用技术 运算符、表达式与语句 n运算符的作用是与一定的运算数据组成表 达式来完成相应的运算。对不同的数据类 型,有着不同的运算符。对运算符,有运 算对象(操作数)个数及类型、运算优先 级、结合性等特性。 nJava语言对运算符的优先级、结合性和求 值顺序有明确的规定,从根本上消除了运 算符运算过程的二义性以及结果不统一的 弊端。 n运算符的优先级是指不同运算符在混合运算 中执行的先后顺序。在Java语言中共有17种 优先级,每个运算符分属确定的一个优先级 别。Java语言严格按照运算符的优先级由高 到低地顺序执行各种运算。 n运算符的结合性确定同级运算符的运算顺序 。左结合性规定,运算数据先与左边的运算 符结合,然后与右边的运算符结合。右结合 性正好相反。 n3. 1 算术运算符 n算术运算符按操作数的多少可分为一元 (或称单目)和二元(或称双目)两类 ,一元运算符一次对一个操作数进行操 作,二元运算符一次对两个操作数进行 操作。算术运算符的操作数类型是数值 类型。 n1一元算术运算符 运 算 符实际操作例 子功 能 + + 正值 负号 加1 减1 +x x x+,+x x,x 对x取负 将x的值加1后再放回变量x 将x的值减1后再放回变量x 表3-1一元算术运算符 前置运算:+、-位于操作数前,如+x; - x; n对前置运算变量先操作后引用 后置运算:+、-位于操作数后,如x+; x- ; n对后果置运算变量先引用后操作 int a=10,b; b = a+; /a=11,b=10 int x=10,y; y = -x; /x=9, y = 9 n2二元算术运算符 n算术运算符的第二种类型是二元运算符 ,这种运算符并不改变操作数的值,而 是返回一个必须赋给变量的值。表3-2 列出了二元算术运算符。二元算术运算 符具有左结合性。 运 算 符实际操作例 子功 能 + * / % 加运算 减运算 乘运算 除运算 取模运算 a+b ab a*b a/b a%b 求a与b相加的和 求a与b相减的差 求a与b相乘的积 求a除以b的商 求a除以b的余数 表3-2二元算术运算符 n双目运算符+、-、*、/,如两个操作数都是整型,则结果 是整型;否则是实型。5/2结果是2而不是2.5。 n%运算符可用于求整数或实数除的余数。例: int a=7;int b=2; a/b=3 /整除 a%b=1 /取余 n注意: 算术运算符的总体原则是先乘除、再加减,括号优先。 整数除法会直接去掉小数,而不是进位。 对取模运算符%来说,其操作数可以为浮点数。如:37.2%10=7.2。 Java对加运算符进行了扩展,使它能够进行字符串的连接,如 “Hello“+“World“,得到串“HelloWorld“. n3.算术表达式 n用算术符号和操作元连接起来的符合java 语法规则的式子,称为算术表达式。 n例如: x+2*y-30+3*(y+5)-12+(-n) n算术混合运算的精度 按表达式中精度最高的计算 char+int = int, char ch = (char)(H+k); n3.2 关系运算符 n关系运算符用于确定一个数据与另一个数据 之间的关系,即进行关系运算。所谓关系运 算是比较运算,将两个值进行比较。关系运 算的结果值为true或false(布尔型)。表3- 3列出了Java语言提供的6种关系运算符,它 们都是双目运算符。 n在这里要指出的是,等于运算符=不要与赋 值运算符=混淆,以至于关系运算变成了赋值 运算。 运 算 符实际操作例 子 = = != 小于 大于 小于或等于 大于或等于 等于 不等于 ab a=b a=b a!=b 表3-3关系运算符 n关系表达式 n通过关系运算符形成的表达式 n例如: 2418,(x+y+z)30+x n3.3 逻辑运算符 n逻辑运算符可以对布尔类型的数据(布 尔常量、布尔变量、关系表达式和逻辑 表达式等)进行运算,结果也为布尔类 型。表3-4列出了Java语言的逻辑运算 符,逻辑运算规则如表3-5所示。 运 算 符名 称例 子功 能 !非!a对布尔数据a取非 (35) boolean x = true; (53) | (x=35) /表达式结果为true, x为true. n逻辑表达式 n由逻辑运算符构成的表达式 24 18 b=2;则a|b=3。 n按位异或运算() (相异得1,相同得0) 参与运算的两个值,如果两个相应位的某一个是1, 另一个是0,那么按位异或()在该位的结果为1。 也就是说如果两个相应位相同,输出位为0,否则为1 。 n即:00=0,01=1,10=1,11=0 n例:若a=1;b=2; 则ab=3。 (4)位运算符(续四) n按位取反运算() 属于一元运算符,它只对一个自变量进行操作。按 位取反生成与输入位相反的值,若输入0,则输出1; 输入1,则输出0。 即:0=1,1=0 例:若a=4;则a=-5。 n左移位运算符(与) 算术右移运算符执行一个右移位(带符号 ),左边按符号位补0或1。 n例:int a=16,b; b=a2;/b=4 逻辑右移运算符是0填充的右移,它执行 的是不带符号的移位。 n即对以补码表示的二进制数操作时,在带符号的右 移中,右移后左边留下的空位中添入的是原数的符 号位(正数为0,负数为1);在不带符号的右移 中,右移后左边留下的空位中添入的一律是0。 (4)位运算符(续六) n注意事项 在移位运算中, nint类型,实际移位数 = 第2个操作%32 nlong类型,实际移位数 = 第2个操作%64 n思考练习 8 32 8 34 8 64 8L66 位右移和左移程序 异或加密解密 /结果是8 /结果是2 /结果是8 /结果是2 n3.6 条件运算符 n条件运算符是一种三元运算符,它的格式 如下: Operand? Expression1:Expression2 n在这个式子中,先计算Operand的真假, 若为真,则计算并返回Expression1,若 为假,则计算并返回Expression2。例如 ; (ab)?a:b; n这个表达式将返回a和b中较大的那个数 值。 n3.7 字符串运算符 n运算符“+”可以实现两个或多个字符串的连 接,也可实现字符串与其他类对象的连接 ,在连接时,其他类对象会被转换成字符 串。另外,运算符“+=”把两个字符串连接 的结果放进第一个字符串里。 3.8 表 达 式 n表达式是由操作数和运算符按一定的语法 形式组成的符号序列。 n3.8.1 类型转换 n在一个表达式中可能有不同类型的数据进 行混合运算,这是允许的,但在运算时, Java将不同类型的数据转换成相同类型, 再进行运算。 n1自动类型转 换 类 型 1类 型 2转换后的类型 byte或short byte或short或int byte或short或int或long byte或short或int或long或float char int long float double int int long float Double int 表3-9 不同类型数据之间的转换规则 n2强制类型转 换 源 类 型目标类型 byte short char int long float short,char,int,long,float,double int,long,float,double int,long,float,double long,float,double float,double double 表3-10 不会丢失信息的类型转换 n3表达式求值中的自动类型提升 nJava语言对表达式求值的自动类型提升规则如 下。 n 所有byte和short类型提升为int类型。 n 若一个操作数是long类型,则整个表达式提 升为long类型。 n 若一个操作数是float类型,则整个表达式提 升为float类型。 n 若有double类型,则表达式值为double类型 。 n自动类型提升对数据的运算带来了方便,但也 容易引起编译错误。 n3.8.2 优先级 优 先 次 序运 算 符 1 2 3 4 5 6 7 () + - ! instanceof new,(type)即强制类型转换 * / % + = 8 9 10 11 12 13 14 15 = != 2块 n用一对花括号“”将零个或多个语句括起 来,就构成一个块(也称复合语句)。在 块中允许包含另一个块(块嵌套)。在 Java语言中,允许一个块出现在任何单 一语句可以出现的地方。 n块体现了Java面向对象程序设计的封装 概念,在一个块中声明的局部变量的作用 域是该变量的声明开始点到最小的包含其 声明的块结束。 3.10 instanceof运算符 nInstanceof是双目运算符,左面的操作元 是一个对象,右面是一个类。当左面的对 象是右面的类创建的对象时,该运算结果 为true,否则为false。 3.11 常用Java数值计算方法 n在Java的类Math中包含了一些数值常量 ,如E和PI,以及一些基本的数值计算方 法,如指数、对数、平方根和三角函数等 ,为用户程序进行数值计算带来了方便。 表3-12列出了一些常用的数值计算方法。 方 法功 能参数类型返回类型 abs(a)求a的绝对值(l)(1) sin(a)求a(弧度)的正弦值doubledouble cos(a)求a(弧度)的余弦值doubledouble tan(a)求a(弧度)的正切值doubledouble asin(a)求a的反正弦值doubledouble 表3-12类Math中常用的数值计算方法 方 法功 能参数类型返回类型 acos(a)求a的反余弦值doubledouble atan(a)求a的反正切值doubledouble ceil(a)求不小于a的最小整数doubledouble rint(a)求最接近a的整数doubledouble exp(a)求e的a幂次doubledouble floor(a)求不大于a的最大整数doubledouble pow(a,b)求a的b次方doubledouble random()产生0.01.0的伪随机数doubledouble sqrt(a)求a的平方根doubledouble log(a)求a的自然对数doubledouble max(a,b)求a,b中的大者(l)(1) min(a,b)求a,b中的小者(l)(1) 续表 n分支结构又称为选择结构,是在两种或两种 以上的多条执行路径中选择一条执行的控制 结构,选择语句提供了一种控制机制,使得 程序根据相应的条件去执行对应的语句。 3.11 分支语句 n(1)if-else语句 n单分支: if (condition) statement; 控制流程:先对condition的值进行判断,若 condition的值为true,则程序执行语句 statement,否则就转去执行if语句的后续语 句。 (1)if-else语句 n双分支: if (condition ) statement1; else statement2; n控制流程:先对condition的值进行判断, condition的值为true,则程序执行语句 statement1,否则执行语句statement2。 (1)if-else语句 n多分支/if嵌套 if(condition1) statement1; else if (condition2) statement2; else if(condition3) statement3; . else statementN; n最近未匹配原则:即else总与离它最近的 尚未匹配的if相匹配。 流程图结构 n选择语句 语法格式1 if (条件表达式) 语句或语句序列; 条件表达式 语句序列 true false n选择语句 语法格式2 if (条件表达式) 语句或语句序列1; else 语句或语句序列2; 条件表达式 语句序列2 true false 语句序列1 n选择语句 语法格式3 if (条件表达式1) 语句或语句序列1; else if (条件表达式2) 语句或语句序列2; else 语句或语句序列n; 选择语句应用举例 n例3-3 (2)switch语句 nswitch语句的一般格式如下: switch (表达式) case : ; break; case : ; break; . . case : ; break; default: ; break; switch注意事项 nswitch表达式与case常量表达式的类型必须是整形 或字符型的 ,不能是关系表达式和逻辑表达式。 n使用switch语句时,需要注意的是: n 各个case后的常量值value应各不相同。 n 通常在每一种case情况后都应使用break语句,否则 ,遇到第一个相等情况后,下面break前的所有语句都 会被执行(包括default后面的语句,若有的话)。 n 各个分支的statement可以是一条或多条语句,不必 使用复合语句。 n 不同case后的语句statement相同时,可以合并多个 case子句。 n switch语句在用表达式的值比较每一个case后的值 value时,是从前往后顺序进行的。若各个值value互不 相同,则case子句的顺序可任意。 Switch语句例题 n例3-4 n一个循环一般包括4个部分: n 初始化部分,用来设置循环的一些初始条件, 如累加器清零等; n 循环体部分,重复执行的一段程序,可以是一 条语句,也可以是一块语句; n 循环条件变更部分,在本次循环结束,下一次 循环开始前执行的语句。常用形式为一个计数器 值的增减; n 终止部分,一般为布尔表达式,每一次循环都 要对该表达式求值,以检查是否满足循环终止条 件。 3.12 循环语句 n(1)while语句 (当型循环) while(条件表达式) 循环体语句; n控制流程:先判断条件表达式的值,当条件表 达式的值为true,则执行循环体,然后再判断 条件,直到条件表达式的值为false,停止执行 语句。 n注:while语句的循环体可能一次也不会执行; while语句可能陷入“死循环”。 (2) do-while 语句(直到型循环) do 循环体语句; while (条件表达式); n控制流程:先执行一次循环体中的语句,然后 测试布尔表达式的值,如果布尔表达式的值为 真,那就继续执行循环体,do-while语句将不 断地测试布尔表达式的值并执行循环体中的内 容,直到布尔表达式的值为假为止。 n注:do-while语句的循环体至少执行一次。另 外do-while语句是可以与while语句互换的。 n循环语句 while语法格式 while(条件表达式) 语句序列 do-while语法格式 do 语句序列 while(条件表达式); While循环例题 n例3-5 (3)for 语句 for (表达式1; 表达式2; 表达式3) statements; n说明:表达式1是初始条件,是为循环变量置初 值,它在循环开始的时候执行一次。表达式2是 终止条件,决定循环是否继续,该条件表达式 在每次循环的时候均作判断,若结果为false, 则循环结束;表达式3是增量,用来修改循环变 量,控制变量每循环一次后按什么方式变化。 (3)for 语句 nfor语句中循环控制变量必须是有序类型,常用 的有整型、字符型、布尔型。循环控制变量初 值和终值通常是与控制变量类型相一致的一个 常量,也可以是表达式。循环次数由初值和终 值决定。 nfor语句的执行过程如下: 按表达式1将初值赋给循环控制变量。 按表达式2判断控制变量的值是否越过终值,未越过 终值则转,越过终值则转步骤。 执行循环体。 按表达式3修改控制变量。 返回。 结束循环。 n4循环嵌套 n循环嵌套是指在某个循环语句的循环体 中又包含另一个循环语句,也称多重循 环。外面的循环语句称为“外层循环”, 外层循环的循环体中的循环称为“内层 循环”。 n循环语句 for语法格式 for(表达式1;表达式2;表达式3) 语句序列 for语句应用举例 n例3-6 3.13 跳转语句 nJava提供了break、continue和return 三个跳转 语句。 n1break语句 break语句常用于提前从循环退出或跳过switch结构 的其余部分。 break ; 此时,break语句的功能是终止break所在的循环,转 去执行其后的第一条语句,其特点:一是在有多重循 环时,它只能使循环从本层的循环跳出来;二是此时 程序一定转移到本层循环的下一个语句。 用break语句终止swtich语句,控制流程会马上转到 switch语句下方的语句。 2continue 语句 ncontinue语句在while、for或do/while结构中执行 时跳过该结构体的其余语句,进入下一轮循环。 continue ; 用于跳过当前的for、while或者do-while循环,即跳 过循环体中continue语句后面的语句,回到循环体 的条件测试部分继续执行。 只能跳过本次循环的剩余语句。 3、 Return语句 nreturn语句用来明确地从一个方法返回,如果 使用return语句返回一个值,其格式如下: return 表达式; class Test public static void main(String args) boolean t = true; System.out.println(“Before the return.“); if (t) returnreturn; System.out.println(“This wont execute.“); 跳转语句例题 n例3-7 n例3-8 谢谢! 条件选择语句 nif 语句 nif语句是一个条件表达式,若条件表达式为真 ,则执行下面的代码块,否则跳过该代码块 n单行代码 if (布尔表达式) 语句; n多行代码 if (布尔表达式) ; 语句; 语 句 布尔表达式 false true 流程图 条件选择语句 n示例 import java.io.IOException; public class test3 public static void main(String args) throws IOException System.out.println(“你喜欢javaa“); char like = (char)System.in.read(); if (like =Y| like=y) System.out.println(“good“); 条件选择语句 nif-else 语句 n根据判定条件的真假执行不同的操作 n语法 if (布尔表达式) 语句块1; else 语句块2; 语句块1 布尔表达式 false true 流程图 语句块2 条件选择语句 n示例 import java.io.IOException; class Test public static void main(String args) throws IOException System.out.println(“请输入你的成绩: “); char a = (char)System.in.read(); char b = (char)System.in.read(); int score = (a-0)*10 + b-0; if (score = 60) System.out.println(“你及格了!”); else System.out.println(“你没及格了!”); C:java Test 请输入你的成绩: 65 你及格了! C: 条件选择语句 nif 语句的嵌套 nif 语句中的语句块又出现了if 语句 n若没有配对符,则else与最近的if语句配对 n例 int a=1, b=2, c=3; if (ac) if (cb) System.out.print( c ); else System.out.print(a); n一定要明确地写上配对符 修改配对关系: if (ac) if (cb) System.out.print( c ); else System.out.print(a); 默认Java虚拟机: if (ac) if (cb) System.out.print( c ); else System.out.print(a); 条件选择语句 n条件运算符 n三元运算符(ternary operator): “? : ” n表达式1 ? 表达式2 : 表达式3 n表达式1的结果为布尔型,表达式2和表达式3 的类型相同 表达式1true表达式2 表达式1false表达式3 Shortcut if-else statement if (表达式1) 表达式2 else 表达式3 条件选择语句 n示例 import java.io.IOException; class Test public static void main(String args) throws IOException System.out.println(“请输入三个09之间的数“); byte x = (byte)System.in.read(); byte y = (byte)System.in.read(); byte z = (byte)System.in.read(); x -= 48; y -= 48; z -= 48; byte n = xy? x : y; byte m = n z? n : z; System.out.println(“max= “+m); char 0 (48) char 1 (49) x=x-48; y=y-48; x=z-48; C:java Test 请输入三个09之间的数 370 max= 7 C: 条件选择语句 n示例 import java.io.IOException; class Test public static void main(String args) throws IOException System.out.println(“中国足球能否进入世界杯?“); System.out.println(“是(y) 否(n) 不一定(p)“); char c = (char) System.in.read(); if (c = y) System.out.println(“Cool”); else if (c = n) System.out.println(“Bad”); else if (c = p) System.out.println(“Sorry”); else System.out.println(“Input Error”); 逐条if语句进行判断 条件匹配,进入语句体 否则对if语句继续匹配 switch/开关语句 n根据表达式的结果执行多个操作中的一个 n语法 switch (表达式) case 值1: 语句序列; break; case 值2: 语句序列; break; default: 默认语句; 与任一case值不匹配,则进入default语句 流程图 表达式 语句 序列1 语句 序列2 默认 语句 break;break;break; 值1值2 default switch/开关语句 n语法 switch (表达式) case 值1: 语句序列; break; case 值2: 语句序列; break; default: 默认语句; n几点注意 1.switch语句表达式的结 果必须是byte, char, short, int 类型 2.表达式的结果依次与每个 case子句比较 3.break语句用于跳出 switch语句 4.default子句是可选的 switch/开关语句 n示例 1 import java.io.IOException; class Test public static void main(String args) throws IOException System.out.println(“中国足球能否进入世界杯?“); System.out.println(“是(y) 否(n) 不一定(p)“); char c = (char) System.in.read(); switch (c ) case y: System.out.println(“Cool”); break; case n: System.out.println(“Bad”); break; case p: System.out.println(“Sorry”); break; default: System.out.println(“Input Error”); break; n示例 2 public class Test public static void main(String args) int month = 2, year = 2000; int numDays = 0; switch (month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9: case 11: numDays = 30; break; case 2: if (year % 4 = 0) else numDays = 28; break; System.out.println(“Number of Days = “ + numDays); switch/开关语句 循环控制语句 n反复执行同一代码块直到满足结束条件 n组成 n循环的初始状态 n循环体 n迭代因子(计数器的递增或递减) n控制表达式 n3种循环语句 nwhile循环 ndo-while循环 nfor循环 循环控制语句 nwhile循环 n语法 while (布尔表达式) 循环体; false 循环体 布尔表达式 true 流程图 循环控制语句 n示例 class Test public static void main(String args) int i, sum; sum = 0; i = 0; while (i java Test 输入一句子以.表示结束 fdsfs. Output = fdsfs. C:java Test 输入一句子以.表示结束 fdsf中国. Output = fdsf?. C: 循环控制语句 nfor循环: 最有效、最灵活的循环结构 n语法 for (初始化部分;条件判断部分;迭代因子) 循环体; 初始化部分 n设置循环变量的初值 条件判断部分 n任意布尔表达式 迭代因子 n控制循环变量的增减 初始化部分 条件判断 true 流程图 循环体 执行迭代因子 false 循环控制语句 nfor语句求07之间任意数的阶乘 import java.io.IOException; class Test public static void main(String args) throws IOException int i, n, sum=1; System.out.println(“Please input(07):”); n = System.in.read(); n -= 48; for (i = 1; i java Test Please input(07): 5 5!=120 1.能否算09 2.能否算12, 134? 循环控制语句 nfor循环的几点注意 初始化部分和迭代因子可以包含多个语句,以“,”分 开 for (int i=0, j=10; ijava Test Please input(09): 4 各阶乘之和为: 33输入0的结果! 跳转/转向语句 n将程序的执行跳转到其他部分的语句 nbreak: 跳出(中止)循环 ncontinue: 结束本次循环 nreturn: 方法返回 nthrow: 抛出异常(Exception) 跳转语句 nbreak语句 break语句用以中断当前执行的循环语句(for 、do-while、while)或switch语句 两种形式 n不带标号的break语句 表达形式: break; 从本层循环中跳出 n带标号的break语句 表达形式: 从整个程序块中跳出 标号: 程序块 (break 标号;) 若只有一层循环,带标号和不带标号作用相同 若存在循环嵌套,两者作用不同 n不带标号的break语句 class Test public static void main(String args) for (int j = 1; j 1; j-) for (k=1; k”); 跳转语句 8 16 24 32 若只有一层循环,带标号和不带标号作用相同 若存在循环嵌套,两者作用不同 跳转语句 ncontinue语句 continue语句用以结束循环语句(for、do- while、while)的本次循环 两种形式 n不带标号的continue语句 表达形式: continue; 结束本次循环,即跳过continue语句后的语句,返回至 本层循环体的条件测试部分 n带标号的continue语句 表达形式: 跳至标号所指语句块的条件测试部分继续执行 n注意与break语句的比较 标号: 程序块 (continue 标号;) 若只有一层循环,带标号和不带标号作用相同 若存在循环嵌套,两者作用不同 n不带标号的continue语句 class Test public static void main(String args) for (int k = 6; k =0; k-=2) if (k = 4) continue; System.out.print(“k=“ + k + “t”); 跳转语句 k=6 k=2 k=0 n带标号的continue语句 class Test public static void main(String args) iLoop: for (int i=1; i =10) System.out.print(p +“ ”); else System.out.print(p + “ ”); System.out.println(); 跳转语句 1 2 4 5 3 6 12 15 4 8 16 20 5 10 20 50 若只有一层循环,带标号和不带标号作用相同 若存在循环嵌套,两者作用不同 nimport/包含语句 引入程序所需要的类 import java.io.*; import java.applet.Applet; npackage/打包语句 指明所定义的类属于哪个包 通常作为源程序的第一条语句 package test; 其他语句 第二章 Java语法基础 n词法规则 n数据类型 n常量与变量 n运算符和表达式 n语句 n数组和字符串 命令行参数 nJAVA应用程序的主方法(程序的入口) public static void main (String args) public static void main (String args) n命令行参数 在启动JAVA应用程序时一次性地传递多个参数 C:java 类名 参数 参数 空格将参数分开 若参数包含空格,用双引号引起来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论