《JAVA程序员培训定制课程c04.ppt》由会员分享,可在线阅读,更多相关《JAVA程序员培训定制课程c04.ppt(46页珍藏版)》请在三一办公上搜索。
1、1,运算符、表达式和流程控制,第四章,2,本章内容,变量及其作用域Java运算符表达式分支语句if-else语句switch语句循环语句for 循环while 循环do-while 循环特殊的循环控制语句,3,Java变量分类,变量用于记录数值可变的数据按所属的数据类型划分:基本数据类型变量引用数据类型变量按被声明的位置划分:局部变量:方法或语句块内部定义的变量成员变量:方法外部、类的内部定义的变量,4,局部变量声明和初始化,Java变量使用前必须先声明和初始化(赋初值)局部变量声明语法格式 DataType varName1=value1,varName2=value2 变量声明和初始化举例
2、:public void amethod()int i;int j=i+5;/编译出错,变量i还未被初始化double d=3.14;MyDate m;m=new MyDate(22,7,1964);System.out.println(m.getYear();,5,局部变量声明和初始化示例,public class TestLocal public static void main(String args)int x;if(args0!=null)x=7;int y=x;,6,成员变量声明和初始化,成员变量在类的定义中声明在创建对象的同时创建有关的成员变量成员变量创建后系统自动对其进行默认初
3、始化显式初始化,7,成员变量声明和初始化示例,public class Book private String title;public String getTitle()return title;public static void main(String args)Book b=new Book();String s=b.getTitle();/Compiles and runsString t=s.toLowerCase();/Runtime Exception!,8,变量作用域,局部变量的作用域就是它所在的方法或语句块在程序调用方法(进入语句块)时,局部变量才被创建并可用,随方法(语句
4、块)的退出,局部变量将被销毁成员变量依附于对象(局部变量)存在,具有与对象相同的生存期和作用域。,9,变量作用域举例,public class Test private int i=1;public void method1()int i=4,j=5;this.i=i+j;method2(7);public void method2(int i)int j=8;this.i=i+j;System.out.println(this.i);public static void main(String args)Test t=new Test();t.method1();,main,栈内存,t,th
5、is,i,j,method1,4,5,7,8,i,j,this,method2,Test对象,i,10,Ex1,练习上页例程:Test.java,在各方法中添加输出语句显示Test对象属性i(this.i)的值,分析程序执行流程并体会各变量的作用域。/输出语句可采用:System.out.println(this.i);,11,运算符,算术运算符:+,*,/,%,+,关系运算符:,=,赋值运算符:=扩展赋值运算符:+=,=,*=,/=字符串连接运算符:+,12,等于运算符示例(1),class ComparePrimitives public static void main(String a
6、rgs)System.out.println(character a=a?+(a=a);System.out.println(character a=b?+(a=b);System.out.println(5!=6?+(5!=6);System.out.println(5.0=5L?+(5.0=5L);System.out.println(true=false?+(true=false);,13,等于运算符示例(2),boolean b=false;if(b=true)System.out.println(“b is true”);else System.out.println(“b is f
7、alse”);,14,等于运算符示例(3),import java.awt.Button;class CompareReference public static void main(String args)Button a=new Button(Exit);Button b=new Button(Exit);Button c=a;System.out.println(Is reference a=b?+(a=b);System.out.println(Is reference a=c?+(a=c);,15,增量、减量运算符示例(1),class MathTest static int pla
8、yers=0;public static void main(String args)System.out.println(players online:+players+);System.out.println(The value of players is+players);System.out.println(The value of players is now+players);,16,增量、减量运算符示例(2),int x=2;int y=3;if(y=x+)|(x+y)System.out.println(x=+x+y=+y);,17,逻辑运算符(1),逻辑运算符功能!-逻辑非&
9、-逻辑与|-逻辑或-逻辑异或&-短路与|-短路或逻辑运算符功能说明:,18,逻辑运算符(2),短路逻辑运算符应用,19,逻辑运算符(3),class TestOR public static void main(String args)if(isItSmall(3)|(isItSmall(7)System.out.println(Result is true);if(isItSmall(6)|(isItSmall(9)System.out.println(Result is true);public static boolean isItSmall(int i)if(i 5)System.ou
10、t.println(i less than 5);return true;else System.out.println(i greater than 5);return false;,20,位运算符,位运算符功能-取反&-按位与|-按位或-按位异或位运算符功能说明:,&,|,21,移位运算符(1),左移ab;将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位;无符号右移ab;将二进制形式的a逐位右移b位,最高位空出的b位补0。,22,移位运算符(2),移位运算符性质适用数据类型:byte、short、char、int、long,对低于int型的操作数将先自动转换为int型再移位 对
11、于int型整数移位ab,系统先将b对32取模,得到的结果才是真正移位的位数对于long型整数移位时ab,则是先将移位位数b对64取模,23,移位运算符(3),移位运算符应用举例,24,赋值运算符(1),赋值运算符=当=两侧的数据类型不一致时,可以适用默认类型转换或强制类型转换原则进行处理 long l=100;int i=(int)l;特例:可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围 byte b=12;/合法 byte b=4096;/非法,25,赋值运算符(2),当把一个引用变量赋给另一个引用变量是,两个变量引用了同一个
12、对象。(String除外)示例:import java.awt.Dimension;class ReferenceTest public static void main(String args)Dimension a=new Dimension(5,10);System.out.println(a.height=+a.height);Dimension b=a;b.height=30;System.out.println(a.height=+a.height+after change to b);,26,赋值运算符(3),扩展赋值运算符,27,字符串连接运算符+,+除用于算术加法运算外,还可
13、用于对字符串进行连接操作int i=300+5;String s=hello,+world!;+运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接String a=String;int b=3;int c=7;System.out.println(a+b+c);System.out.println(a+(b+c));,28,表达式,表达式是符合一定语法规则的运算符和操作数的序列 a5.0+a(a-b)*c-4i30&i%10!=0 表达式的类型和值对表达式中操作数进行运算得到的结果称为表达式的值 表达式的值的数据类型即为表达式的类型
14、表达式的运算顺序首先应按照运算符的优先级从高到低的顺序进行 优先级相同的运算符按照事先约定的结合方向进行,29,运算符优先级,30,Ex2,练习下面的程序,排除编译错误,分析其输出结果:public class MyTestpublic static void main(String args)int a=10int i=a;int j=a3;int k=a32;System.out.println(“i=”+i);System.out.println(j=+j);System.out.println(k=+k);System.out.println(m=+m);,31,分支语句,分支语句实现
15、程序流程控制的功能,即根据一定的条件有选择地执行或跳过特定的语句Java分支语句分类if-else 语句switch 语句,32,if-else语句语法格式,if(boolean类型表达式)语句或语句块;if(boolean类型表达式)语句或语句块;else if(boolean类型表达式)语句或语句块;else 语句或语句块;,33,if-else语句应用举例,public class Testpublic static void main(String args)Test t=new Test();t.test(75);public void test(int age)if(age250)
16、System.out.println(是个妖怪!);else System.out.println(此人芳龄+age+马马乎乎啦!);,34,switch语句语法格式,switch(exp)case const1:statement1;break;case const2:statement2;break;case constN:statementN;break;default:statement_dafault;break;,35,switch语句应用举例,public class Test public static void main(String args)int i=1;switch(
17、i)case 0:System.out.println(zero);break;case 1:System.out.println(one);break;case 2:System.out.println(two);break;default:System.out.println(default);break;,36,switch语句有关规则,表达式expr的返回值必须是下述几种类型之一:int,byte,char,short;case子句中的值const 必须是常量,且所有case子句中的值应是不同的;default子句是任选的;break语句用来在执行完一个case分支后使程序跳出swit
18、ch语句块;,37,Ex3,参照M04-24,26页的例子,练习使用if-else、switch分支语句,注意体会break/default语句的用法;,38,循环语句,循环语句功能在循环条件满足的情况下,反复执行特定代码循环语句的四个组成部分初始化部分(init_statement)循环条件部分(test_exp)循环体部分(body_statement)迭代部分(alter_statement)循环语句分类for 循环while 循环do/while 循环,39,for 循环语句,语法格式 for(init_statement;test_exp;alter_statement)body_s
19、tatement应用举例public class ForLoop public static void main(String args)int result=0;for(int i=1;i=100;i+)result+=i;System.out.println(result=+result);,40,while 循环语句,语法格式 init_statementwhile(test_exp)body_statement;alter_statement;应用举例public class WhileLoop public static void main(String args)int resul
20、t=0;int i=1;while(i=100)result+=i;i+;System.out.println(result=+result);,41,do/while 循环语句,语法格式 init_statementdo body_statement;alter_statement;while(test_exp);应用举例public class WhileLoop public static void main(String args)int result=0,int i=1;do result+=i;i+;while(i=100);System.out.println(result=+r
21、esult);,42,特殊流程控制语句,break 语句break语句用于终止某个语句块的执行 break;break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块 label1:label2:label3:break label2;,43,特殊流程控制语句,break 语句用法举例 public class TestBreakpublic static void main(String args)for(int i=0;i10;i+)if(i=3)break;System.out.println(i=+i);System.out.println(Game Over!)
22、;,44,特殊流程控制语句,continue 语句continue语句用于跳过某个循环语句块的一次执行 continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环 continue语句用法举例1public class ContinueTest public static void main(String args)for(int i=0;i 100;i+)if(i%10=0)continue;System.out.println(i);,45,特殊流程控制语句,public class PrimeNumberpublic static void main(Str
23、ing args)int n=0;outer:for(int i=101;i200;i+=2)/外层循环 for(int j=2;ji;j+)/内层循环 if(i%j=0)continue outer;/不能使用 break,为什么?System.out.print(+i);n+;if(n6)continue;System.out.println();/输出六个数据后换行 n=0;,continue语句用法举例2,46,Ex4,编写程序,用一个for循环计算1+2+3+100的值,并输出计算结果。使用其它循环-while,do while 分别实现上述任务。编写程序,采用适当的循环和流控制语句实现下述功能:打印输出0200之间能被7整除但不能被4整除的所有整数;要求每行显示6个数据;练习目的:体会和巩固循环语句、分支语句、流控制语句、表达式的计算次序、逻辑运算符的用法;,