【文档说明】JAVA程序员培训定制课程c0课件4.ppt,共(46)页,239.035 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45154.html
以下为本文档部分文字说明:
1运算符、表达式和流程控制第四章2本章内容▪变量及其作用域▪Java运算符▪表达式▪分支语句–if-else语句–switch语句▪循环语句–for循环–while循环–do-while循环▪特殊的循环控制语句3Java变量分类▪变量用于记录数值可变的数据▪按所
属的数据类型划分:基本数据类型变量引用数据类型变量▪按被声明的位置划分:局部变量:方法或语句块内部定义的变量成员变量:方法外部、类的内部定义的变量4局部变量声明和初始化▪Java变量使用前必须先声明和初始
化(赋初值)▪局部变量声明语法格式DataTypevarName1[=value1][,varName2[=value2]…]▪变量声明和初始化举例:publicvoidamethod(){inti;in
tj=i+5;//编译出错,变量i还未被初始化doubled=3.14;MyDatem;m=newMyDate(22,7,1964);System.out.println(m.getYear());}5局部变量
声明和初始化示例publicclassTestLocal{publicstaticvoidmain(String[]args){intx;if(args[0]!=null){x=7;}inty=x;}}6成员变
量声明和初始化▪成员变量在类的定义中声明▪在创建对象的同时创建有关的成员变量▪成员变量创建后系统自动对其进行默认初始化显式初始化7成员变量声明和初始化示例publicclassBook{privateStringtitle;publicStri
nggetTitle(){returntitle;}publicstaticvoidmain(String[]args){Bookb=newBook();Strings=b.getTitle();//CompilesandrunsStri
ngt=s.toLowerCase();//RuntimeException!}}8变量作用域▪局部变量的作用域就是它所在的方法或语句块▪在程序调用方法(进入语句块)时,局部变量才被创建并可用,随方法(语句块)的退出,局部变量将被销毁▪成员变量依附于对象(局
部变量)存在,具有与对象相同的生存期和作用域。9变量作用域举例publicclassTest{privateinti=1;publicvoidmethod1(){inti=4,j=5;this.i=i+j;method2(7);}publicvoidmethod2
(inti){intj=8;this.i=i+j;System.out.println(this.i);}publicstaticvoidmain(String[]args){Testt=newTest();t.method1();}}main栈内存tthisijmethod14578ijthi
smethod2Test对象i10Ex11.练习上页例程:Test.java,在各方法中添加输出语句显示Test对象属性i(this.i)的值,分析程序执行流程并体会各变量的作用域。//输出语句可采用
:System.out.println(this.i);11运算符▪算术运算符:+,―,*,/,%,++,――▪关系运算符:>,<,>=,<=,==,!=▪布尔逻辑运算符:!,&,|,^,&&,||▪位运算符:&,|,^,~,>>,<<,>>>▪赋值
运算符:=扩展赋值运算符:+=,―=,*=,/=▪字符串连接运算符:+12等于运算符示例(1)classComparePrimitives{publicstaticvoidmain(String[]args){System.out.println("ch
aracter'a'=='a'?"+('a'=='a'));System.out.println("character'a'=='b'?"+('a'=='b'));System.out.println("5!=6?"+(5!=6));Sys
tem.out.println("5.0==5L?"+(5.0==5L));System.out.println("true==false?"+(true==false));}13等于运算符示例(2)booleanb=false;if(b=true){Sy
stem.out.println(“bistrue”);}else{System.out.println(“bisfalse”);}14等于运算符示例(3)importjava.awt.Button;
classCompareReference{publicstaticvoidmain(String[]args){Buttona=newButton("Exit");Buttonb=newButton("Exit");Bu
ttonc=a;System.out.println("Isreferencea==b?"+(a==b));System.out.println("Isreferencea==c?"+(a==c));}}15增量、减量运算符示例(1
)classMathTest{staticintplayers=0;publicstaticvoidmain(String[]args){System.out.println("playersonline:"+players++);System.out.println(
"Thevalueofplayersis"+players);System.out.println("Thevalueofplayersisnow"+++players);}}16增量、减量运算符示例(2)intx=2;inty=3;if((y==x++)
|(x<++y)){System.out.println("x="+x+"y="+y);}17逻辑运算符(1)▪逻辑运算符功能!--逻辑非&--逻辑与|--逻辑或^--逻辑异或&&--短路与||--短路或▪逻辑运算符功能
说明:ab!aa&ba|ba^ba&&ba||btruetruefalsetruetruefalsetruetruetruefalsefalsefalsetruetruefalsetruefalsetruetruefa
lsetruetruefalsetruefalsefalsetruefalsefalsefalsefalsefalse18逻辑运算符(2)▪短路逻辑运算符应用&&--第一个操作数为假则不判断第二个操作数||--第一个操作数为真则不判断第
二个操作数MyDated;if((d!=null)&&(d.day>31)){//dosomethingwithd}if(i<0||i>31){System.out.println("非法赋值");}19逻辑运算符(3
)classTestOR{publicstaticvoidmain(String[]args){if((isItSmall(3))||(isItSmall(7))){System.out.println("Resultistrue");}if((isItSmall(6))||(isItSmall(
9))){System.out.println("Resultistrue");}}publicstaticbooleanisItSmall(inti){if(i<5){System.out.println("ilessthan5");r
eturntrue;}else{System.out.println("igreaterthan5");returnfalse;}}}20位运算符▪位运算符功能~--取反&--按位与|--按位或^--按位异或▪位运算符功能
说明:01001111~1011000001101101&010010011100101101101101|111011111100101101101101^101001101100101121移位运算符(1)▪左移"a<<b;"将二进制形式的a逐位左移b位,最低位空出的b位
补0;▪带符号右移"a>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位;▪无符号右移"a>>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补0。22移位运算符(2)▪移位运算符性质适用数据类型:byte、short、char、
int、long,对低于int型的操作数将先自动转换为int型再移位对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数对于long型整数移位时a>>b,则是先将移位位数b对64取模23移位运算符(3)
▪移位运算符应用举例2227=000000000000000000001000101100112227<<3=000000000000000001000101100110002227>>3=000000000000000000000001000101102227
>>>3=00000000000000000000000100010110-2227=11111111111111111111011101001101-2227<<3=1111111111111111101110100
1101000-2227>>3=11111111111111111111111011101001-2227>>>3=0001111111111111111111101110100124赋值运算符(1)▪赋值运算符=当"="两侧的数据类型不一致时,可以适用默认类型转换或强制类型
转换原则进行处理longl=100;inti=(int)l;特例:可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围byteb=12;//合法byteb=4096;//非法25赋值运算符
(2)❖当把一个引用变量赋给另一个引用变量是,两个变量引用了同一个对象。(String除外)示例:importjava.awt.Dimension;classReferenceTest{publicstaticvoidmain(Stri
ng[]args){Dimensiona=newDimension(5,10);System.out.println("a.height="+a.height);Dimensionb=a;b.height=30;System.out.pri
ntln("a.height="+a.height+"afterchangetob");}}26赋值运算符(3)▪扩展赋值运算符运算符用法举例等效的表达式+=a+=ba=a+b-=a-=ba=a-b*=a*
=ba=a*b/=a/=ba=a/b%=a%=ba=a%b&=a&=ba=a&b|=a|=ba=a|b^=a^=ba=a^b<<=a<<=ba=a<<b>>=a>>=ba=a>>b>>>=a>>>=ba=a>>>b27字符串连接运算符+▪"+"除用于
算术加法运算外,还可用于对字符串进行连接操作inti=300+5;Strings="hello,"+"world!";▪"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然
后再进行连接Stringa="String";intb=3;intc=7;System.out.println(a+b+c);System.out.println(a+(b+c));28表达式▪表达式是符合一定语法规则的运算符和操作数的序列a
5.0+a(a-b)*c-4i<30&&i%10!=0▪表达式的类型和值对表达式中操作数进行运算得到的结果称为表达式的值表达式的值的数据类型即为表达式的类型▪表达式的运算顺序首先应按照运算符的优先级从高到低的顺序进行优先级相同的运算符按照事先约定的结合方向进行29运
算符优先级Separator.(){};,AssociativeOperatorsRtoL++--~!(datatype)LtoR*/%LtoR+-LtoR<<>>>>>LtoR<><=>=instanceofLtoR==!=LtoR&Lto
R^LtoR|LtoR&&LtoR||RtoL?:RtoL=*=/=%=+=-=<<=>>=>>>=&=^=|=30Ex2练习下面的程序,排除编译错误,分析其输出结果:publicclassMyTest{publicstaticvoidmain(String
args[]){inta=10inti=~a;intj=a>>>3;intk=a<<3;intm=a>>32;System.out.println(“i=”+i);System.out.println("j="+j);System.out.println
("k="+k);System.out.println("m="+m);}}31分支语句▪分支语句实现程序流程控制的功能,即根据一定的条件有选择地执行或跳过特定的语句▪Java分支语句分类if-else语句switch语句32i
f-else语句语法格式if(boolean类型表达式){语句或语句块;}if(boolean类型表达式){语句或语句块;}elseif(boolean类型表达式){语句或语句块;}else{语句或语句块;}33if-el
se语句应用举例publicclassTest{publicstaticvoidmain(Stringargs[]){Testt=newTest();t.test(75);}publicvoidtest(intage){if(age<0){Syst
em.out.println("不可能!");}elseif(age>250){System.out.println("是个妖怪!");}else{System.out.println("此人芳龄"+age+"
马马乎乎啦!");}}}34switch语句语法格式switch(exp){caseconst1:statement1;break;caseconst2:statement2;break;……casecon
stN:statementN;break;[default:statement_dafault;break;]}35switch语句应用举例publicclassTest{publicstaticvoidmain(Stringar
gs[]){inti=1;switch(i){case0:System.out.println("zero");break;case1:System.out.println("one");break;case2:System.out.println("two");bre
ak;default:System.out.println("default");break;}}}36switch语句有关规则▪表达式expr的返回值必须是下述几种类型之一:int,byte,char,short;▪case子句中的值const必须是常量,且所有case子句中的值应是不同的;
▪default子句是任选的;▪break语句用来在执行完一个case分支后使程序跳出switch语句块;37Ex31.参照M04-24,26页的例子,练习使用if-else、switch分支语句,注意体会break/default语句的用法;38循环语句▪循环语句功能
在循环条件满足的情况下,反复执行特定代码▪循环语句的四个组成部分初始化部分(init_statement)循环条件部分(test_exp)循环体部分(body_statement)迭代部分(alter_statement)▪循环语句分类for循环while
循环do/while循环39for循环语句▪语法格式for(init_statement;test_exp;alter_statement){body_statement}▪应用举例publicclassForLoop{publicstat
icvoidmain(Stringargs[]){intresult=0;for(inti=1;i<=100;i++){result+=i;}System.out.println("result="+
result);}}40while循环语句▪语法格式[init_statement]while(test_exp){body_statement;[alter_statement;]}▪应用举例publicclassWhileLoop{pub
licstaticvoidmain(Stringargs[]){intresult=0;inti=1;while(i<=100){result+=i;i++;}System.out.println("result="+
result);}}41do/while循环语句▪语法格式[init_statement]do{body_statement;[alter_statement;]}while(test_exp);▪应用举例publicclassWhileLoop{publicstaticvoid
main(Stringargs[]){intresult=0,inti=1;do{result+=i;i++;}while(i<=100);System.out.println("result="+result);}}42特殊流程控制语句▪break语句break语句用于终止某个语句块
的执行{……break;……}break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块label1:{……label2:{……label3:{……breaklabel2;……}}}43特殊流程控制语句▪break语句用法举例publicclassTestBreak{
publicstaticvoidmain(Stringargs[]){for(inti=0;i<10;i++){if(i==3)break;System.out.println("i="+i);}System.out.println("GameOver!");}}4
4特殊流程控制语句▪continue语句continue语句用于跳过某个循环语句块的一次执行continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环▪continue语句用法举例1
publicclassContinueTest{publicstaticvoidmain(Stringargs[]){for(inti=0;i<100;i++){if(i%10==0)continue;System.out.println
(i);}}}45特殊流程控制语句publicclassPrimeNumber{publicstaticvoidmain(Stringargs[]){intn=0;outer:for(inti=101;i<200;i+=2){//外层循环for(intj=2;j<i;
j++){//内层循环if(i%j==0)continueouter;//不能使用"break",为什么?}System.out.print(""+i);n++;if(n<6)continue;System.out.println();//输出六个数据后换行n=0;}}}▪continue语句用
法举例246Ex41.编写程序,用一个for循环计算1+2+3+……+100的值,并输出计算结果。使用其它循环----while,dowhile分别实现上述任务。2.编写程序,采用适当的循环和流控制语句实现下述功能:打印输出0~200之间能被7整除但不能被4整除
的所有整数;要求每行显示6个数据;▪练习目的:体会和巩固循环语句、分支语句、流控制语句、表达式的计算次序、逻辑运算符的用法;