Java语言概述

2024-09-19
| 87页
| 241人阅读
| 10人下载
普通

内容正文:

第2章 Java语言概述 2.1 Java语言的运算符和表达式 2.2 Java语言流程控制 第2章 Java语言概述 2.1 Java语言的运算符及表达式 运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 三目条件运算符 其它运算符 第2章 Java语言概述 2.1 1.算术运算符 与C/C++相似,Java算术运算符用于整型或实型数的运算,可分为一元运算符和二元运算符两种。一元运算符如表2.1所示。 表2.1 一元算术运算符表 运算符 用 法 功能描述 + +OP 正值 − −OP 负值 ++ ++OP,OP++ 加1(自增) −− −−OP,OP− − 减1(自减) 第2章 Java语言概述 i= j= m= k= 3 4 6 8 注意: ++/--只能作用于变量,而不能作用于常量或表达式。 int i=2; int j=3; int m=++j+i; int k=m+i++; 自增、自减运算符: 若放在操作数之前,则是先进行自增/自减运算,再把其结果用于后继的操作; 若放在操作数之后,则是先进行别的运算,然后再进行自增/自减运算。 第2章 Java语言概述 Java的二元运算符有+,-,*,/,%五种,其用法与C/C++类似,见表2.2所示。 第2章 Java语言概述 表2.2 二元运算符用法表 运算符 用 法 功能描述 + OP1+OP2 加 − OP1−OP2 减 * OP1*OP2 乘 / OP1/OP2 除 % OP1%OP2 求余 第2章 Java语言概述 二元运算符的几点说明: Java语言对运算符“+”进行了扩展,可以连接字符串。 例如:abc+12 abc+1+2 abc+(1+2) //结果为abc12 //结果为abc12 //结果为abc3 两个整数相除,其结果为整数,取结果的整数部分。若有一个操作数为小数,结果为小数。 例如:3/2 1/2 8/15*15 3.0/2 1/2.0 //结果为1 //结果为0 //结果为0 //结果为1.5 //结果为0.5 第2章 Java语言概述 取模运算符(%)是求两数相除的余数。既可以对整数取模,也可以对小数取模。 例如:20%7 16.2%5 //结果为6 //结果为1.2 第2章 Java语言概述 实际应用中,算术运算的操作数常常具有不同的类型,比如说,一个操作数为int型,另一个操作数为long型,一旦碰到这种情况,就需要进行类型的转换。一般原则是保证结果的数据类型与精度最高的操作数数据类型一致。转换规则如表2.3所示。 不同类型操作数进行运算时的类型转换: 第2章 Java语言概述 表2.3 类型转换规则 类型1 类型2 结 果 byte/short byte int byte/short int int byte/short/int long long byte/short/int/long float float byte/short/int/long/float double double 第2章 Java语言概述 2.1.2 关系运算符 关系运算符用于两个值之间的关系比较,其返回值为布尔类型。表2.4给出了关系运算符的使用方法。 表2.4 关系运算符表 运算符 用 法 功能描述 > OP1>OP2 大于为真 >= OP1>=OP2 大于等于为真 < OP1<OP2 小于为真 <= OP1<=OP2 小于等于为真 = = OP1= =OP2 等于为真 ! = OP1! =OP2 不等于为真 第2章 Java语言概述 注意: Java中关系运算符的结果则要么为true,要么为false。 在关系运算符的使用中,算术类型只能与算术类型比较,布尔类型、复合类型也只能与同类型相比较。 例:3>=3,结果为true。 第2章 Java语言概述 2.1.3逻辑运算符 与C/C++不同,Java中,逻辑运算符只能对布尔逻辑型数据进行操作,其返回值同样为布尔值。其用法如表2.5所示。 第2章 Java语言概述 表2.5 逻辑运算符表 操作数OP1 操作数OP2 OP1&OP2 OP1 | OP2 ! OP1 true true true true false true false false true false false false false false true false true false true true 利用&和|做运算时,运算符左右两边表达式都被运算执行,结果再做与或运算。 利用&&和||时,如果计算运算符左边表达式即可确定与或结果,右边表达式将不执行。 &和|,同&&和||有什么区别呢? 第2章 Java语言概述 执行下列程序段后,b,x,y的值正确的是( ) int x=6,y=8; boolean b; b=x<y||++x==--y; (A)true, 6,8 (B)false,7,7 (C)true,7,7 (D)false,6,8 A 上例中,若将表达式改为b=x<y|++x==--y; 则答案为( ) C 第2章 Java语言概述 2.1.4 位运算符 位运算符用来对二进制数进行测试、置位或移位等操作,操作数只能为整型或字符型数据。真值表如表2.6所示。 第2章 Java语言概述 表2.6 位运算符表 运算符 用 法 功能描述 ~ ~OP 按位取反 & OP1&OP2 按位与 | OP1|OP2 按位或 ^ OP1^OP2 按位异或 >> OP1>>OP2 OP1右移OP2位 << OP1<<OP2 OP1左移OP2位 >>> OP1>>>OP2 OP1无符号右移OP2位 第2章 Java语言概述 表2.7 位操作真值表 OP1位值 OP2位值 ~OP1 OP1&OP2 OP1|OP2 OP1^OP2 0 0 1 0 0 0 1 0 0 0 1 1 0 1 1 0 1 1 1 1 0 1 1 0 第2章 Java语言概述 下面我们看一个按位异或的例子: ... int x=17; int y=10; System.out.println("The value is"+x^y); ... 该段程序的输出结果为27,其实际运算如下: x: 10001 y: 01010 ^: 11011=27 第2章 Java语言概述 思考题: 将一个十进制整数110从右端开始的4~7位变为0. x: 0110 1110 y: 0000 1110 ^: 0110 1110 第2章 Java语言概述 第2章 Java语言概述 上面三种运算符,均属于移位运算符。在不产生溢出的情况下,左移一位相当于乘2,故有: x*12=x* (8+4) =x<<3+x<<2 右移运算符“>>”将操作数移出右端的低位舍弃,把最高位作为补位,所以,右移一位相当于除2取商,与左移相似,有: x/8=x>>3   运算符“>>>”是无符号右移,不考虑最高位的符号位,所以补位均为0。 优点:移位比直接乘除执行速度快 。 第2章 Java语言概述 2.1.5 赋值运算符 赋值运算符“=”把一个数据赋给一个变量,其一般形式为 variable_type variable_name=expression; 例如: int x=100; int y=200; float z=100.0; 第2章 Java语言概述 Java中赋值语句可以分为简单赋值运算符和复合赋值运算符两类。当 “=”前面加上不同的运算符组成一些复杂的赋值语句后,就成了复合赋值运算符。如: x/=2; // 等价于 x=x/2; x%=4; // 等价于 x=x%4; 赋值运算符的基本用法可见表2.8。 第2章 Java语言概述 表2.8 复合赋值运算符用法表 运算符 用 法 等价于 += OP1+=OP2 OP1=OP1+OP2 −= OP2−=OP2 OP1=OP1−OP2 *= OP1*=OP2 OP1=OP1*OP2 /= OP1/=OP2 OP1=OP1/OP2 %= OP1%=OP2 OP1=OP1%OP2 |= OP1|=OP2 OP1=OP1|OP2 &= OP1&=OP2 OP1=OP1&OP2 ^= OP1^=OP2 OP1=OP1^OP2 >>= OP1>>=OP2 OP1=OP1>>OP2 <<= OP1<<=OP2 OP1=OP1<<OP2 >>>= OP1>>>=OP2 OP1=OP1>>>OP2 第2章 Java语言概述 2.1.6 条件运算符 条件运算符是一个三元运算符,其一般形式为 expression ? statement1 :statement2; 其语义为:首先计算表达式expression的值,如果该值为真(true),则将statement1的值作为整个表达式的值,反之,将statement2作为整个表达式的值。 需要注意的是,该运算符规定statement1和statement2需返回相同类型的数据,且不能为void。 第2章 Java语言概述 例:用三目运算符求三个小数的最大值和最小值。 public class FindMaxMin { public static void main(String args[]) { double d1=1.1,d2=-9.9.d3=96.9; double temp,max,min; //求三个数的最大值 temp=d1>d2?d1:d2; max=temp>d3?temp:d3; 第2章 Java语言概述 //求三个数的最小值 temp=d1<d2?d1:d2; min=temp<d3?temp:d3; //显示结果 System.out.println(“max=”+max); System.out.println(“min=”+min); } } 第2章 Java语言概述 2.1.7 对象运算符 Java中对对象的操作有专门的对象运算符instanceof。它用来测试一个对象是否是某个类或其子类的实例,若是则返回true,反之返回false。 例如: String str=“java”; boolean b; b=str instanceof String; 结果b为true。 第2章 Java语言概述 2.1.8 运算符的优先级 运算符是有优先级的,它决定表达式中各运算执行的先后顺序。总的来说,运算符优先级具有如下规则: (1) 一元运算符比二元运算符优先级高。 (2) 算术运算符比关系运算符优先级高。 (3) 关系运算符比按位运算符优先级高。 (4) 大于和小于运算符比等于和不等于运算符优先级高。 (5) 按位运算符比逻辑运算符优先级高。 (6) 逻辑与(&&)比逻辑或(||)优先级高。 (7) 赋值运算符优先级最低。 第2章 Java语言概述 表2.9 运算符的优先级及结合性 运算符 优先级 结合性 [ ]( ) 最高                               最低 左向 ++ −− ! ~ instanceof 右向 New 右向 * / % 左向 + − 左向 >> >>> << 左向 <> <= >= 左向 == != 左向 & 左向 ^ 左向 | 左向 && 左向 || 左向 ?: 右向 = += −= *= /= %= ^= 右向 &= /= <<= >>= >>>= 右向 , 左向 第2章 Java语言概述 2.1.9.表达式 一个表达式包含有多个操作,其顺序是由各运算符的优先级和是否有括号操作符决定。 例如: int a=5,b=8,c,d; c=a++*b; d=++a*b; //c=40,a=6 //d=56,a=7 第2章 Java语言概述 2.2 流程控制语句 Java同其他编程语言一样,提供了许多流程控制语句。本节我们讨论其流程控制语句的基本语法及特点。 第2章 Java语言概述 2.2.1 概述 Java所提供的流程控制语句几乎与C/C++完全相同。具体来说,Java的流程控制可通过如下一些语句来实现: for语句 do-while语句 while语句 流程控制 控制转移语句 循环语句 分支语句 switch语句 if-else语句 return语句 break语句 continue语句 第2章 Java语言概述 对于Java中流程控制语句的使用情况,我们可通过表2.10来描述。 第2章 Java语言概述 表2.10 控制语句的用法 类 型 用法描述 if-else if(boolean)statement1; else statement2; switch switch(expression0) {case expression1:statement1;… case expressionN:statementN; default:statementN+1;} break Break [label]; continue Continue [lable]; return Return expression; for for(expression1;expression2;expression3) statement; while while(boolean)statement; do-while do statement; while(boolean); label lable:statement; 第2章 Java语言概述 2.2.2 分支语句 一、条件语句 if语句 简单条件语句 复合条件语句 第2章 Java语言概述 ① 简单条件语句 if (condition ) { statement; } 或 if (condition) statement1; else statement2; 第2章 Java语言概述 比如当程序需要根据不同的输入信息执行不同的操作(例如经常碰到的对话框的选项操作)时,可以使用if和else语句来实现这个目的: … // response is either OK or Cancel depending // on the button that the user pressed … if (response = = OK) { // 在这里添加执行OK动作的代码 } else { // 在这里添加执行Cancel动作的代码 }… 第2章 Java语言概述 ② 复合条件语句 if(condition1) statement1; else if (condition2) statement2; else if(condition3) statement3; ... else statementN; 注意:使用Java复合条件语句时,一个if语句后可以跟任意个else if语句,但只能有一个else语句。 第2章 Java语言概述 例:编写应用程序,程序运行后,根据屏幕提示输入一个字符串,回车后统计字符串中的字符ABCD(不区分大小写)各有多少个并输出。 第2章 Java语言概述 import java.io.* public class IfElseTest { public static void main(String args[]) throws IOException { String str; BufferedReader buf; int aCount=0, bCount=0, cCount=0, dCount=0,Count=0; //将输入的内容放入缓冲区buf buf=new BufferedReader(new InputStreamReader(System.in)); System.out.println(“请输入一串字符,回车后统计ABCD的个数”); //读取缓冲区的一行内容,赋给str str=buf.readLine(); 第2章 Java语言概述 for(int i=0;i<str.length();i++) { char ch=str.charAt(i); if(ch==‘a’|ch==‘A’) ++aCount; else if(ch==‘b’|ch==‘B’) ++bCount; else if (ch==‘c’|ch==‘C’) ++cCount; else if(ch==‘d’|ch==‘D’) ++dCount; else ++Count; } 第2章 Java语言概述 System.out.println(“字母a或A的个数”+aCount); System.out.println(“字母b或B的个数”+bCount); System.out.println(“字母c或C的个数”+cCount); System.out.println(“字母d或D的个数”+dCount); System.out.println(“其它字符的个数”+Count); } } 第2章 Java语言概述 运行结果如下: 第2章 Java语言概述 二、switch语句-多分支语句 switch是Java所提供的多分支选择语句。现实生活中常常会碰到多种可能性的情况,虽然可用复合条件语句来处理,但会使程序变得冗长繁琐,可读性也会降低。switch语句更简练,可读性更强,而且提高了程序的执行效率。 第2章 Java语言概述 switch(整型或字符型表达式) { case value1: expression1; break; case value2: expression2; break; … case valueN: expressionN; break; default: expression;} Value1, value2…… valueN必须是整型或字符型常量,且值不能相同。 Default可省。当表达式的值与所有case的值都不匹配时,执行该句。 第2章 Java语言概述 对于上例求ABCD(不区分大小写)的程序,可以将for语句部分改动如下: 第2章 Java语言概述 for(int i=0;i<str.length();i++) { char ch=str.charAt(i); switch(ch) { case ‘A’:case’a’: ++aCount;break; case ‘B’:case’b’: ++bCount;break; case ‘C’:case’c’: ++cCount;break; case ‘D’:case’d’: ++dCount;break; default: ++Count;break;}} 第2章 Java语言概述 运行结果如下: 第2章 Java语言概述 下面再给出一个用switch语句显示月份的程序。 第2章 Java语言概述 import java.io.*; public class SwitchTest2 { public static void main(String args[]) throws IOException { int month; String str; BufferedReader buf; buf=new BufferedReader(new InputStreamReader(System.in)); System.out.println(“请输入月份”); str=buf.readLine(); month=Integer.parseInt(str); 该函数用来将数字字符串变为整型数据 第2章 Java语言概述 switch (month) { case 1: System.out.println("Now is: January"); break; case 2: System.out.println("Now is: February"); break; case 3: System.out.println("Now is: March"); break; case 4: System.out.println("Now is: April"); break; case 5: System.out.println("Now is: May"); break; case 6: System.out.println("Now is: June"); break; case 7: System.out.println("Now is: July"); break; case 8: System.out.println("Now is: August"); break; case 9: System.out.println("Now is: September"); break; 第2章 Java语言概述 case 10: System.out.println("Now is: October"); break; case 11: System.out.println("Now is: November"); break; case 12: System.out.println("Now is: December"); break; default: System.out.println("You input a unvalid number! Try again. "); break; } } } 第2章 Java语言概述 运行结果如下: 第2章 Java语言概述 使用switch语句,我们须注意如下事项: (1) switch语句只能取代if语句的部分功能,因为其只能对switch后括号内表达式的值与常量进行比较,而if语句可作多种比较。 (2) case 常量表达式出现次序可相互调换,不影响执行结果。 (3) 括号内的表达式只能为整型或字符型。 (4) 同一个switch语句不能有两个case常量值相等。 (5) 每一步之后必须用break语句终止,否则失去开关的效果。 第2章 Java语言概述 2.2.3 循环语句 循环结构是程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。 与C/C++一样,Java提供了三种格式的循环控制语句:while语句、do-while语句和for语句,下面我们分别加以介绍。 第2章 Java语言概述 一、while 语句 while语句的语法为 while (expression) { statement;} 首先,while语句执行并检查条件表达式expression,它返回一个boolean类型数(true或者false)。如果表达式返回true,while语句执行语句statement。之后while语句继续测试条件表达式并执行直到条件返回false。 注意:在循环体中必须有能够对循环条件进行修改的语句,否则会导致死循环。 第2章 Java语言概述 下面我们给出一个例子WhileDemo。此函数的功能是:首先接收用户输入的字符串(该字符串以字符‘*’结束),然后使用while语句来测试字符串的各个字符,并复制字符串到另一串中,直到碰到字符‘*’才结束。字符串的用法可参阅第五章。 第2章 Java语言概述 import java.io.*; import java.lang.*; public class WhileDemo { public static void main(String[] args)throws IOException { String sourceStr; System.out.println("Please input a string ended with character * "); BufferedReader buf=new BufferedReader(new InputStreamReader(System.in)); sourceStr=buf.readLine(); 第2章 Java语言概述 StringBuffer destinateStr = new StringBuffer(); int i=0; char c=sourceStr.charAt(i); System.out.println("The source string is:"+sourceStr); System.out.println("The result string is:"+destinateStr); } } 字符串分两类: 创建后不能修改和变动的字符串常量为String类; 创建后可以再修改和变动的字符串变量-StringBuffer类。 在字符串destinateStr的末尾添加字符c while (c!='*') { destinateStr.append(c); c = sourceStr.charAt(++i); } 第2章 Java语言概述 运行结果如图: 第2章 Java语言概述 二、do-while 语句 如果需要循环执行的语句至少执行一次,可使用do-while语句,它实现“直到型until”结构,do-while的基本格式为 do { statement; } while (boolean_expression); 第2章 Java语言概述 do { destinateStr.append(c); c = sourceStr.charAt(++i); } while (c != '*'); 以上例为例,只需将循环部分改为: 第2章 Java语言概述 三、for 语句 for语句是最标准的循环语句。与C/C++相同,它是Java语言中最灵活的一种控制结构,它有多种变形,可实现不同的循环功能。for语句的一般格式为 for (初始条件;终止条件;增量) { statement; } 第2章 Java语言概述 括号内的三个表达式均可以为空。实际上,为了实现无限循环,这三 个表达式都可以省略。例如: ... for ( ; ; )  // 表示无限循环 { ... } 下例中使用了一个for循环语句来输入/输出一个数组(数组的内容参见第3章)的所有元素。 第2章 Java语言概述 public class forTest { public static void main(String[] args) { int[] intArray = new int[5]; for (int i=0;i<intArray.length;i++) intArray[i]=i; for (int i=0; i<intArray.length; i++) System.out.println("intArray["+i+"]"+intArray[i]); } } “+i+”能输出具体的i值,而不是字符i 第2章 Java语言概述 运行结果如图: 第2章 Java语言概述 2.3.5 转移语句 Java语言提供了3个转移语句: return,break和continue语句。它们的功能就是改变while、do-while、for及switch语句的正常运行。比如说,我们在介绍for语句的时候曾经提到过死循环 for(; ;)的问题,如果利用转移语句的break语句,就能达到改变循环顺序的目的,从而跳出死循环。下面我们对上述的三个转移语句分别加以介绍。 第2章 Java语言概述 一、return语句 对于有返回值类型(返回值类型非void)的方法,方法体一定有一个return语句。 格式: return 表达式; 注意:表达式的类型与方法的返回类型一致。 第2章 Java语言概述 二、break语句 break语句用在循环结构和switch语句中,用于从循环体内部跳出或从switch语句的case子句中跳出。 (1)不带标号的break语句 格式: break; 功能:跳出它所在的循环(只能跳出一重循环), 并从该循环的后继语句开始执行。 第2章 Java语言概述 例:下面的程序段是一个方法的定义,方法名为isPrime()。返回值类型为boolean。方法实现的功能是:如果n是素数,返回逻辑值true,否则返回false。 boolean isPrime(n) { boolean b=true; return b; } for(int k=2;k<=n/2;k++) { if(n%k==0) { b=false; break; } } 第2章 Java语言概述 (2)带标号的break语句 格式: break 标号; 功能:从多重循环体内部跳出标号所标志的那重循 环,即终止标号所标志的那层循环,执行循环后 面的语句。 第2章 Java语言概述 例: label:for(int i=0;i<10;i++) {…; for(int k=1;k<10;k++) { …; if(k==3) break label; } } … 第2章 Java语言概述 三、continue 语句 continue语句只能用在循环结构中。 (1)不带标号的continue语句 continue; 功能:跳过本轮循环的剩余语句,进入循环的下一轮。 第2章 Java语言概述 例: for(int i=0;i<10;i++) {…; for(int k=1;k<10;k++) { …; if(k==3) continue; } } … 第2章 Java语言概述 (2)带标号的continue语句 continue 标号; 功能:可以从多重循环的内层循环跳到外层循环,执行标号所示的循环的下一轮。 第2章 Java语言概述 例: label:for(int i=0;i<10;i++) {…; for(int k=1;k<10;k++) { …; if(k==3) continue label; } } … 第2章 Java语言概述 Application程序 Java程序 Applet小程序 附:Java程序的分类 Applet小程序 第2章 Java语言概述 Java源程序 (*.java文件) javac 字节码 (*.class文件) 编辑网页文件 文件名.html Java Applet小程序的执行过程 在网页中打开 “文件名.html” 在命令行运行 appletviewer 文件名.html 运行 或 第2章 Java语言概述 例:一个简单的Java Applet程序 import java.applet.Applet; import java.awt.Graphics; public class MyApplet extends Applet { public void paint(Graphics g) { g.drawString("this is my first java program!",15,20); } } 第2章 Java语言概述 编译生成MyApplet.class后,为它编写一个HTML文件,假设命名为page1.htm。 <HTML> <HEAD><TITLE>Java 小程序</TITLE></HEAD> <BODY> <APPLET CODE=" MyApplet " WIDTH=200 HEIGHT=60></APPLET> </BODY> </HTML> 第2章 Java语言概述 运行java小程序 方法一、通过支持Java的网页浏览器运行html文档。 方法二、调用appletviewer命令运行网页page1.html 第2章 Java语言概述 Application程序 Java Application程序是独立完整的程序。 在命令行调用独立的解释器软件即可运行Java Application 程序。 Java Application 程序中必须有一个public static void main(String args[])方法,该方法是程序执行的入口点。 两种程序的对比: 第2章 Java语言概述 Applet小程序 Java Applet程序是在WWW浏览器这个特定的环境下运行的,严格的说并不是一个完整独立的程序,而是一个已经构建好的框架程序中的一个模块。这个框架程序包括浏览器本身和Java中Applet的类库模块。 运行Java Applet的解释器不是独立的软件,而是嵌在WWW浏览器中的浏览器软件的一部分。当希望运行Java Applet程序时,必须把它嵌在通用语言HTML中并激活浏览器中的这个解释器,或调用能够模拟浏览器框架环境的软件,如AppletViewer。 第2章 Java语言概述 Java Applet程序不需要有main()方法,但Java Applet程序中的主类必须是类库中已经定义好的类java.applet.Applet的子类。 Java Applet程序可以直接利用浏览器或AppletViewer提供的图形用户界面,而Java Application程序必须另外书写专用代码来建立自己的图形用户界面。 由于不一定非要有main()作为程序入口,Java Applet更多的是体现状态与状态的切换,而不是固定的顺序化的执行过程,这使它更适合于图形界面下的面向对象编程模式。 第2章 Java语言概述 练习: 2. 编写一个Applet程序,用char类型常量、float类型常量、long类型常量赋值给3个int类型整数,并用一个输出语句分两行输出。 1. 编写一个Application程序,判断从命令行输入的字符如果是小写字母,则把它转换成大写字母;如果是大写字母,则不进行转换。 第2章 Java语言概述 $$

资源预览图

Java语言概述
1
Java语言概述
2
Java语言概述
3
Java语言概述
4
Java语言概述
5
Java语言概述
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。