《第2章语法基础精选文档.ppt》由会员分享,可在线阅读,更多相关《第2章语法基础精选文档.ppt(110页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2章语法基础本讲稿第一页,共一百一十页本章主要介绍编写Java程序必须了解的语言基础知识,包括Java程序的结构、数据类型、变量、常量、表达式和流程控制语句等。本讲稿第二页,共一百一十页import语句与 C语言的 include语句有本质的区别。import语句只指明要用到的类所在的位置,以便能在用到时可以加载;而 C语言用 include语句将要用的文件包含在源文件中,作为源文件编译成一个模块。这体现了Java语言的特点,用户只需要将模块编译一次。当用户在编写另一个 模块用到已经编译的模块时,只要告诉编译程序它的位置,如用全限定名或者用import语句,编译程序无需再一次编译已经编译的模
2、块,就能够将源文件编译 通过。本讲稿第三页,共一百一十页主类类体Java源程序是由类定义组成的,每个程序中可以定义若干个类,但是只有一个类是主类。在JavaApplication中,主类是指包含main方法的类;在JavaApplet里,主类是系统类Applet的子类。主类是Java程序执行的入口点。Java程序中定义类使用关键字class,类的定义由类头和类体两部分组成。类体部分用来定义静态属性和方法这两种类的成员,类头部分除了声明类名外,还可以说明类的继承特性。本讲稿第四页,共一百一十页语句:每一条Java语句都由分号(;)结束。类和方法中的所有语句用一对大括号括起。Java程序是由类定义
3、组成的,每个类内部包括类的静态属性和方法两部分,表达式、变量、常量和关键字等是构成Java的语句的基础。其中变量与常量关键字是Java语言语法规定的保留字,用户程序定义的常量和变量的取名不能与保留字相同。本讲稿第五页,共一百一十页2.2数据类型、变量与常量数据类型、变量与常量2.2.1数据类型表2.1列出了Java中定义的所有数据类型。特点如下:Java的各种数据类型占用固定的内存长度,与具体的软硬件平台环境无关;Java的每种数据类型都对应一个缺省的数值,使得这种数据类型的变量的取值总是确定的。这两点分别体现了Java的跨平台特性和安全稳定性。本讲稿第六页,共一百一十页表2.1Java的基本
4、数据类型本讲稿第七页,共一百一十页boolean:表示布尔型。其变量或常量的取值只有true和false两个。true代表“真”,false代表“假”。byte:处理未经加工的二进制数据,每个byte型的常量或变量中包含8位(bit)的二进制信息。Java的字符类型采用了新的国际标准编码方案Unicode编码。每个Unicode码占用16个比特位,包含的信息量比ASCII码多了一倍。由于采用Unicode编码方案,有利于Java程序在基于不同语言的平台间的移植。本讲稿第八页,共一百一十页除了基本数据类型外,Java中还有引用数据类型(reference),包括类和接口等。例如,对应基本的dou
5、ble类型,还存在着一个类Double。这些类在包含基本数据类型所表示的一定范围、一定格式的数值的同时,还包含了一些特定的方法,可以实现对数值的专门操作,如把字符串转换成双精度型数值等。两种数据类型:两种数据类型:基本数据类型和引用数据类型基本数据类型和引用数据类型本讲稿第九页,共一百一十页注意:注意:(1)true、false和null为小写,而不是象在C+语言中那样为大写。严格地讲,它们不是关键字,而是文字。(2)无sizeof运算符,因为所有数据类型的长度和表示是固定的,与平台无关,不是象在C语言中那样数据类型的长度根据不同的平台而变化。这正是Java语言的一大特点。(3)goto和co
6、nst不是Java编程语言中使用的关键字。本讲稿第十页,共一百一十页2.2.2标识符标识符标识符:用来标识变量、常量、方法、对象和类等的存在,标识符可以由编程者自由指定,但Java对于标识符的定义有如下的规定:(1)标识符由字母、数字、下划线(-)、美元符号($)组成。(2)标识符必须以字母、下划线或美元符号开头。(3)对大小写敏感,class和Class,System和system分别代表不同的标识符。(4)应该使标识符能一定程度上反映它所表示的变量、常量、对象或类的意义。(5)标识符区分大小写,没有长度限制,可以为标识符取任意长度的名字。本讲稿第十一页,共一百一十页本讲稿第十二页,共一百一
7、十页2.2.3常量常量:在程序运行过程中不发生变化的量。Java中常用的常量有布尔型、整型、字符、字符串和浮点。1.布尔常量布尔常量包括true和false,分别代表真和假。2.整型常量整型常量:用来给整型变量赋值。整型常量按照所占用的内存长度,可分为一般整型常量和长整型常量,一般整型常量占用32位,长整型常量占用64位。长整型常量的尾部有一个大写的L或小写的l,如-386L,017777l。本讲稿第十三页,共一百一十页2.浮点常量浮点常量表示的是可以含有小数部分的数值常量。根据占用内存长度的不同,可以分为一般浮点常量和双精度浮点常量两种。一般浮点常量占用32位内存,用F、f表示,如19.4F
8、,2.0513E3;双精度浮点常量占64位内存,用带D或d或 不 加 后 缀 的 数 值 表 示,如2.433E-5D,700041.273d,2.1415。浮点常量有一般表示法和指数表示法两种。本讲稿第十四页,共一百一十页4.字符常量:字符常量用一对单引号括起的单个字符表示,如a。转义符是有特殊含义的字符,如回车、换行等。所有的转义符都用反斜线()开头,后面跟着一个字符来表示某个特定的转义符,详见下表。本讲稿第十五页,共一百一十页5.字符串常量:用双引号括起的一串若干个字符(可以是0个)。字符串中可以包括转义符,标志字符串开始和结束的双引号必须在源代码的同一行上。在Java中可以使用连接操作
9、符(+)把两个或更多的字符串常量串接在一起,组成一个更长的字符串。例如,Howdoyoudo?+n的结果是Howdoyoudo?n。本讲稿第十六页,共一百一十页2.2.4变量变量:在程序的运行过程中数值可变,通常用来记录运算中间结果或保存数据。变量必须先声明后使用,声明变量包括指明变量的数据类型和变量的名称,必要时还可以指定变量的初始数值。如:booleanm_bFlag=true;声明一个布尔类型的简单变量,名字为m_bFlag,该变量的初值是逻辑真。本讲稿第十七页,共一百一十页下面是其他几个变量声明的例子:charmyCharacter=B;longMyLong=-375;intm_iCo
10、unt=65536;doublem_dScroe;本讲稿第十八页,共一百一十页声明变量又叫创建变量,执行变量声明语句时系统根据变量的数据类型在内存中开辟相应的空间并登记变量名称、初始值等。Java的变量有其生存期和有效范围,Java用大括号将若干语句组成语句块,变量的有效范围就是声明它的语句所在的语句块。本讲稿第十九页,共一百一十页例2-1UseVariable.javapublicclassUseVariablepublicstaticvoidmain(Stringargs)booleanb=true;shortsi=128;inti=-99;longl=123456789L;charch=
11、J;floatf=2.1415925F;doubled=-1.04E-5;Strings=Hello!;System.out.println(布尔型变量b=+b);System.out.println(短整型变量si=+si);System.out.println(整型变量i=+i);System.out.println(长整型变量l=+l);System.out.println(字符型变量ch=+ch);System.out.println(浮点型变量f=+f);System.out.println(双精度型变量d=+d);System.out.println(字符型对象s=+s);本讲稿第
12、二十页,共一百一十页例2-1的运行结果如下:本讲稿第二十一页,共一百一十页上例子中定义了若干个变量并用相应类型的常量为它们赋初始值。String不是基本数据类型,而是一个系统定义的类名,每一个字符串变量实际上都是一个字符串对象。但是由于字符串是十分常用的对象。本讲稿第二十二页,共一百一十页例2-2getNumber.javaimportjava.io.*;publicclassgetNumberpublicstaticvoidmain(Stringargs)inti=0;Strings;trySystem.out.print(请输入一个整数:);BufferedReaderbr=newBuff
13、eredReader(newInputStreamReader(System.in);s=br.readLine();i=Integer.parseInt(s);catch(IOExceptione)System.out.print(输入的数据是:+i+.);运行结果如下:本讲稿第二十三页,共一百一十页上例从键盘输入一个字符串,然后把它转化成整型数据并输出。上例利用系统定义的方法Integer.parseInt()可以把把字符串转化成值。其中Integer是系统定义的一个类,对应基本数据类型int,parseInt()是Integer类的一个方法,可以把数字字符组成的字符串转化成整型数据。另一
14、个方法是:Integer.valueOf(Strings).intValue();方法System.out.print()的用法和作用与System.out.println()基本相同,其区别是输出了数据后并不回车。本讲稿第二十四页,共一百一十页例2-3getDouble.javaimportjava.applet.*;importjava.awt.*;importjava.awt.event.*;publicclassgetDoubleextendsAppletimplementsActionListenerLabelprompt;TextFieldinput;doubled=0.0;pub
15、licvoidinit()prompt=newLabel(输入一个浮点数:);input=newTextField(10);add(prompt);add(input);input.addActionListener(this);publicvoidpaint(Graphicsg)g.drawString(输入的数据是:+d,10,50);publicvoidactionPerformed(ActionEvente)d=Double.valueOf(input.getText().doubleValue();/或者d=Double.ParseDouble(input.getText();rep
16、aint();本讲稿第二十五页,共一百一十页运行结果如下运行结果如下:本讲稿第二十六页,共一百一十页上例是图形界面下的JavaApplet程序。用户在文本框对象input中输入字符串并回车后,程序接受用户的输入.利用Double.valueOf().doubleValue()将这个字符串转化为浮点数据并赋值给双精度变量d。actionPerformed()方法中的方法repaint()是系统已定义好的一个方法,这个方法将强行调用paint(),把变量d中的数据显示出来。本讲稿第二十七页,共一百一十页2.3表达式表达式表达式:由变量、常量、对象、方法调用和操作符组成的式子。组成表达式的Java操
17、作符有很多种,包括赋值运算、算术运算、关系运算和逻辑运算等。本讲稿第二十八页,共一百一十页2.2.1赋值与强制类型转换赋值运算符:给程序里的变量或对象赋值。简单的赋值运算是把一个表达式的值直接赋给一个变量或对象,格式如下:变量或对象=表达式;其中赋值号右边的表达式可以是常量、另一个变量或对象以及方法的返回值。赋值运算的例子如下:i=0;j=i;k=i+j*5;MyFirstString=MyDouble.toString();MySecondString=MyFirstString;本讲稿第二十九页,共一百一十页注意:当赋值号的左边是一个对象名时,赋值运算符把右边表达式所得的对对象象的的引引用
18、用赋值给它,而不是为这个对象开辟新的内存空间并把右边对象的所有内容赋值给它。在使用赋值运算时,有时会出现等号左边的数据类型和等号右边的数据类型不一致的情况,这时需要把等号右边的数据类型转化成等号左边的数据类型。某些情况下,系统可以自动完成这种类型转换,另一些情况下就要用到强制类型转换。本讲稿第三十页,共一百一十页Java类型转换的规定:凡是将变量从占用内存较少的短数据类型转化成占用内存较多的长数据类型时,可以不做显式的类型转换声明;但将变量从较长的数据类型转换成较短的数据类型时,必须做强制类型转换。下面的例子分别定义了16位的字节类型变量MyByte和32位的整数类型变量MyInteger:b
19、yteMyByte=10;intMyInteger=-1;本讲稿第三十一页,共一百一十页byteMyByte=10;intMyInteger=-1;若把MyByte的值赋给MyInteger,则可直接写成:MyInteger=MyByte;如果把MyInteger的值赋给MyByte,则必须写成:MyByte=(byte)MyInteger;先把变量MyInteger中保存的数值的数据类型从int变成byte后才能赋给MyByte,其中,(byte)就是在做强制类型转换。本讲稿第三十二页,共一百一十页强制类型转换的一般格式是:(数据类型)变量名或表达式本讲稿第三十三页,共一百一十页2.2.2算
20、术运算算术运算算术运算是针对数值类型操作数进行的运算。算术运算符根据需要的操作数个数的不同,可以分为双目运算符和单目运算符两种。本讲稿第三十四页,共一百一十页1.双目运算符:双目算术运算符本讲稿第三十五页,共一百一十页注意:(1)只有整型(int,long,short)数据可以取余,float和double不能取余。(2)两个整数做除法时,结果是截取商数的整数部分。如果希望保留小数部分,要做强制类型转换。例如1/2的结果是0,而(float)1)/2的结果是0.5。本讲稿第三十六页,共一百一十页2.单目运算符单目运算符的操作数只有一个,算术运算中有三个单目运算符。单目算术运算符如下:本讲稿第三
21、十七页,共一百一十页单目运算符中的自增和自减,其运算符的位置可以在操作数的前面,也可以在操作数的后面;当进行单目运算的表达式位于一个较复杂的表达式内部时,单目运算符的位置将决定单目运算与复杂表达式二者执行的先后顺序。如下面的例子里,单目运算符在操作数变量的前面,则先执行单目运算,修改变量的值后用这个新值参与复杂表达式的运算。intx=2;inty=(+x)*3;运算执行的结果是x=3,y=9。本讲稿第三十八页,共一百一十页在例中,由于单目运算符放在操作数变量的后面,则先计算复杂表达式的值,最后再修改变量的取值。intx=2;inty=(x+)*3;运算执行的结果是x=3,y=6。本讲稿第三十九
22、页,共一百一十页例 MyTestArithmetic.javaimportjava.applet.*;importjava.awt.*;importjava.awt.event.*;publicclassUseArithmeticextendsAppletimplementsActionListenerLabelprompt;TextFieldinput1,input2;Buttonbtn;inta=0,b=1;publicvoidinit()prompt=newLabel(请输入两个整型数据:);input1=newTextField(5);input2=newTextField(5);bt
23、n=newButton(计算);add(prompt);add(input1);add(input2);add(btn);btn.addActionListener(this);publicvoidpaint(Graphicsg)g.drawString(a+b+=+(a+b),10,50);g.drawString(a+-+b+=+(a-b),10,70);g.drawString(a+*+b+=+(a*b),10,90);g.drawString(a+/+b+=+(a/b),10,110);g.drawString(a+%+b+=+(a%b),10,130);publicvoidactio
24、nPerformed(ActionEvente)a=Integer.parseInt(input1.getText();b=Integer.parseInt(input2.getText();repaint();本讲稿第四十页,共一百一十页上例是图形界面中的JavaApplet程序,它利用两个文本框对象input1和input2接受用户输入的两个数据。当用户单击按钮“计算”时,程序将把这两个字符串转化为整型数据赋值给同类的两个变量a和b,然后通过repaint()方法调用paint()方法,以a和b为操作数,计算它们四则运算的结果并输出。运行结果如下:本讲稿第四十一页,共一百一十页2.2.3关
25、系运算关系运算是比较两个数据之间的大小关系的运算,常用的关系运算列于下表中:运算符运算=等于!=不等于大于=大于等于+b+=+(ab),10,50);g.drawString(a+b+=+(a=+b+=+(a=b),10,90);g.drawString(a+=+b+=+(ay&x+=y-;本讲稿第四十七页,共一百一十页在计算布尔型的变量b的取值时,先计算&左边的关系表达式xy,得结果为假,根据逻辑与运算的规则,只有参加与运算的两个表达式都为真时,最后的结果才为真;所以不论&右边的表达式结果如何,整个式子的值都为假,右边的表达式就不予计算执行了;最后三个变量的取值分别是:x为3,y为5,b为f
26、alse。本讲稿第四十八页,共一百一十页如果把上题中的简洁与(&)换为非简洁与(&),则与号两边的两个表达式都会被运算,最后三个变量的取值分别是:x为4,y为4,b为false。同理,对于简洁或(|),若左边的表达式的运算结果为真,则整个或运算的结果一定为真,右边的表达式就不会再运算执行了。本讲稿第四十九页,共一百一十页例UseLogical.javabooleana=true,b=false;publicvoidpaint(Graphicsg)g.drawString(a+&+b+=+(a&b),10,50);g.drawString(a+&+b+=+(a&b),10,70);g.drawS
27、tring(a+|+b+=+(a|b),10,90);g.drawString(a+|+b+=+(a|b),10,110);g.drawString(a+b+=+(ab),10,130);g.drawString(!+b+=+(!b),10,150);publicvoidactionPerformed(ActionEvente)a=Boolean.valueOf(input1.getText().booleanValue();b=Boolean.valueOf(input2.getText().booleanValue();repaint();本讲稿第五十页,共一百一十页修改程序,利用系统定义
28、的方法Boolean.valueOf().booleanValue()将用户输入的字符串转化成布尔型数据;修改paint()方法,使之显示两个布尔型量逻辑运算的结果。本讲稿第五十一页,共一百一十页2.2.5位运算位运算是对操作数以二进制比特位为单位进行的操作和运算,位运算的操作数和结果都是整型量。几种位运算符和相应的运算规则列于表。本讲稿第五十二页,共一百一十页移位运算是将某一变量所包含的各比特位按指定的方向移动指定的位数,下表是三个移位运算符的例子。本讲稿第五十三页,共一百一十页2.2.6其他运算符1.三目条件运算符?:三目条件运算符的形式是:x?y:z其规则是,先计算表达式x的值,若x为真
29、,则运算的结果为y;否则为z。如下面的例子:intx=5,y=8,z=2;intk=x3?y:z;/x0?x:-x;/y为x的绝对值本讲稿第五十四页,共一百一十页2.复杂赋值运算符复杂赋值运算符是在先进行某种运算之后,再把运算的结果做赋值。下表列出了所有的复杂赋值运算。本讲稿第五十五页,共一百一十页复杂赋值运算符本讲稿第五十六页,共一百一十页2.括号与方括号括号运算符()在某些情况下起到改变表达式运算先后顺序的作用;在另一些情况下代表方法或函数的调用。它的优先级在所有的运算符中最高。方括号是数组运算符,它的优先级很高。4.对象运算符(instanceof)对象运算符instanceof:测定一
30、个对象是否属于某一个指定类或其子类的实例,如果是则返回true,否则返回false。例如:booleanb=MyObjectinstanceofTextField;本讲稿第五十七页,共一百一十页5运算符运算符用于访问对象实例或者类的类成员函数。6new运算符new运算符用于创建一个新的对象或者新的数组。本讲稿第五十八页,共一百一十页2.2.7运算符的优先级与结合性运算符的优先级决定了表达式中不同运算执行的先后顺序。运算符的结合性决定了并列的相同运算的先后执行顺序。运算符的结合性是指:当有两个或多个优先级别相同的运算符并列时,运算符的结合规则决定哪个先算.下表列出了Java主要运算符的优先级和结
31、合性。本讲稿第五十九页,共一百一十页Java运算符的优先级与结合性:本讲稿第六十页,共一百一十页2.2.8注释注释是程序不可少的部分。Java的注释符有两种。一种是行注释符“/”,以“/”开头到本行末的所有字符被系统理解为注释,不予编译。如:/Thisatestprogramofwhatistobedone另一种注释符是块注释符“/*”和“*/”,其中“/*”标志着注释块的开始,“*/”标志着注释块的结束。“/*”和“*/”可以括起若干个注释行。如:/*程序名:项目名:编写时间:功能:输入/输出:*/本讲稿第六十一页,共一百一十页2.4流程控制语句流程控制语句:控制程序中各语句执行顺序的语句,
32、是程序中非常关键和基本的部分。流程控制语句可以把单个的语句组合成有意义的,能完成一定功能的小逻辑模块,熟练运用流程控制语句会影响所编写程序的质量。最主要的流程控制方式是结构化程序设计中规定的三种基本流程结构。本讲稿第六十二页,共一百一十页2.4.1结构化程序设计的三种基本流程结构化程序设计的三种基本流程结构化程序设计的原则:任何程序都可以且只能由三种基本流程结构构成,包括顺序结构、分支结构和循环结构。本讲稿第六十三页,共一百一十页顺序结构:语句按照书写的顺序依次执行分支结构:即选择结构,根据计算所得的表达式的值来判断应选择执行哪一个流程的分支循环结构:在一定条件下反复执行一段语句。Java语言
33、在局部的语句块内部,仍然需要借助于结构化程序设计的基本流程结构来组织语句,完成相应的逻辑功能。Java的语句块是由一对大括号包含的若干语句的集合。Java中,有专门负责实现分支结构的条件分支语句和负责实现循环结构的循环语句。本讲稿第六十四页,共一百一十页2.4.2分支语句Java中的分支语句有两个,一个是负责实现双分支的if语句,另一个是负责实现多分支的开关语句switch。1.if语句if语句的一般形式:if(条件表达式)语句块;/if分支else语句块;/else分支本讲稿第六十五页,共一百一十页条件表达式:判断程序的流程走向。如果条件表达式的取值为真,则执行if分支的语句块,否则执行el
34、se分支的语句块。在编写程序时,也可以不书写else分支,此时若条件表达式的取值为假,则绕过if分支直接执行if语句后面的其他语句。语法格式如下:if(条件表达式)语句块;/if分支其他语句;本讲稿第六十六页,共一百一十页例FindMax.javaimportjava.awt.*;importjava.applet.*;importjava.awt.event.*;publicclassFindMaxDataextendsAppletimplementsActionListenerLabelprompt;TextFieldinput1,input2,input3;Buttonbtn;inta,
35、b,c,d;publicvoidinit()prompt=newLabel(请输入一个实数:);input1=newTextField(20);input2=newTextField(20);input3=newTextField(20);btn=newButton(确认);add(input1);add(input2);add(input3);add(btn);add(prompt);btn.addActionListener(this);publicvoidactionPerformed(ActionEvente)a=Integer.parseInt(input1.getText();b=
36、Integer.parseInt(input2.getText();c=Integer.parseInt(input2.getText();d=a;if(d=b)d=b;if(d=c)d=c;prompt.setText(最大数为:+d);本讲稿第六十七页,共一百一十页例程接受用户输入的三个整数,在用户单击“确认”按钮后程序调用方法actionPerformed()比较并输出其中的最大值。本讲稿第六十八页,共一百一十页2.switch语句switch语句是多分支的开关语句,它的一般格式如下:switch(表达式)case判断值1:语句块1/分支1case判断值2:语句块2/分支2case判断值
37、n:语句块n/分支ndefault:语句块n+1/分支n+1本讲稿第六十九页,共一百一十页switch语句在执行时,首先计算表达式的值,表达式的值必须是整型或字符型,同时应与各个case分支的判断值的类型相一致。计算出表达式的值之后,将它先与第一个case分支的判断值相比较,若相同,则程序的流程转入第一个case分支的语句块;否则,再将表达式的值与第二个case分支相比较依此类推。如果表达式的值与任何一个case分支都不相同,则转而执行最后的default分支;在default分支不存在的情况下,则跳出整个switch语句。注意:switch语句的每一个case判断,都只负责指明流程分支的入口
38、点,而不负责指定分支的出口点,分支的出口点需要编程人员用相应的跳转语句来标明。本讲稿第七十页,共一百一十页例:switch(MyGrade)caseA:MyScore=5;caseB:MyScore=4;caseC:MyScore=3;default:MyScore=0;本讲稿第七十一页,共一百一十页假设变量MyGrade的值为“A”,执行完switch语句后,变量MyScore的值被赋成0,而不是5!因为case判断只负责指明分支的入口点,表达式的值与第一个case分支的判断值相匹配后,程序的流程进入第一个分支,将MyScore的值置为5。由于没有专门的分支出口,所以流程将继续沿着下面的分支
39、逐个执行,MyScore的值被依次置为4,3,最后变成0。如果希望程序的逻辑结构正常完成分支的选择,则需要为每一个分支另外编写退出语句。本讲稿第七十二页,共一百一十页修改后的例子如下:switch(MyGrade)caseA:MyScore=5;break;caseB:MyScore=4;break;caseC:MyScore=3;break;default:MyScore=0;本讲稿第七十三页,共一百一十页break是流程跳转语句。在某些情况下,switch语句的这个只有分支入口、没有出口的功能也有它独特的适用场合。例如在很多判断值共享同一个分支时,就可以实现由不同的判断语句流入相同的分支。
40、修改上例如下:switch(MyGrade)caseA:caseB:caseC:MyScore=1;/及格break;default:MyScore=0;/不及格本讲稿第七十四页,共一百一十页2.4.3循环语句循环结构:在一定条件下,反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环结构由循环语句来实现。Java的循环语句共有三种:while、do-while和for。结构图如下:本讲稿第七十五页,共一百一十页1.while语句while语句的一般语法格式如下:while(条件表达式)循环体条件表达式的值是布尔型,循环体可以是单个语句或复合语句块。while语句的执行过程:先判断条
41、件表达式的值,若为真,则执行循环体,循环体执行完之后再无条件转向条件表达式再做计算与判断;当计算出条件表达式为假时,跳过循环体执行while语句后面的语句。本讲稿第七十六页,共一百一十页importjava.awt.*;importjava.applet.*;importjava.awt.event.*;publicclassNarcissusextendsAppletimplementsActionListenerLabelprompt;TextFieldinput1,input2,input3;Buttonbtn;inta=100,b,c,d,i=10;publicvoidinit()pr
42、ompt=newLabel(找出10000以内的水仙花数:);btn=newButton(确认);add(prompt);add(btn);btn.addActionListener(this);setSize(400,300);例 Narcissus.java(找出1000以内的所有的水仙花数)publicvoidpaint(Graphicsg)while(a=999)b=a/100;c=(a-b*100)/10;d=a%10;if(a=(b*b*b+c*c*c+d*d*d)g.drawString(a+是水仙花数,10,i);i+=20;a+;publicvoidactionPerform
43、ed(ActionEvente)本讲稿第七十七页,共一百一十页上例的功能是找出1000以内所有的水仙花数并输出。水仙花数是三位数,它的各位数字的立方和等于这个三位数本身。本讲稿第七十八页,共一百一十页2.do-while语句do-while语句的语法结构如下:do循环体while(条件表达式);do-while语句的使用与while语句类似,但它是先执行一遍循环体,再来判断条件表达式。若表达式的值为真,则再运行循环体,否则跳出do-while循环,执行下面的语句。do-while语句的特点是它的循环体将至少被执行一次。本讲稿第七十九页,共一百一十页例showCharValue.javaimpo
44、rtjava.io.*;publicclassshowCharValuepublicstaticvoidmain(Stringargs)charch;trySystem.out.println(请输入一个字符,以#结束);doch=(char)System.in.read();System.out.println(字符+ch+的整数值为+(int)ch);System.in.skip(2);/跳过回车键while(ch!=#);catch(IOExceptione)System.err.println(e.toString();本讲稿第八十页,共一百一十页上例是字符界面的JavaApplica
45、tion程序,它接受用户输入的一个字符后输出这个字符整型数值。程序结果如下:本讲稿第八十一页,共一百一十页2.for语句for语句是Java语言三个循环语句中功能较强,使用较广泛的一个。for语句的一般语法格式如下:for(表达式1;表达式2;表达式3)循环体其中表达式2是返回布尔值的条件表达式,用来判断循环是否继续;表达式1完成初始化循环变量和其他变量的工作;表达式3用来修整循环变量,改变循环条件,三个表达式之间用分号隔开。本讲稿第八十二页,共一百一十页for语句的执行过程:先计算表达式1;再判断表达式2的值,若为真,则执行循环体,执行完循环体后,返回表达式3,计算并修改循环条件。第二轮循环
46、从计算并判断表达式2开始,若表达式的值仍为真,则继续循环,否则跳出整个for语句执行下面的句子。for语句的三个表达式都可以为空,但若表达式2也为空,则表示当前循环是一个无限循环,需要在循环体中书写另外的跳转语句终止循环。本讲稿第八十三页,共一百一十页下面的例子是应用for循环输出10000之内的所有完全数。完全数是等于其所有因子和(包括1但不包括这个数本身)的数。例如6123,6123,则6是一个完全数。本讲稿第八十四页,共一百一十页publicclassPerfectNumpublicstaticvoidmain(Stringargs)intcount=1;for(inti=1;i1000
47、0;i+)inty=0;for(intj=1;ji;j+)if(i%j=0)y+=j;if(y=i)System.out.print(i+String.valueOf(t);count+;if(count%3=0)System.out.println();PerfectNum.java本讲稿第八十五页,共一百一十页运行结果如下:本讲稿第八十六页,共一百一十页2.4.4跳转语句跳转语句用来实现程序执行过程中流程的转移。前面在switch语句中使用过的break语句就是一种跳转语句。为了提高程序的可靠性和可读性,Java语言不支持无条件跳转的goto语句。Java的三个跳转语句:continue、
48、break和return。本讲稿第八十七页,共一百一十页1.continue语句语句continue语句必须用于循环结构中,它有如下两种使用形式:1、不代标号的continue语句,其作用是终止当前这一轮的循环,跳过本轮剩余的语句,直接进入当前循环的下一轮。在while或dowhile循环中,不带标号的continue语句会使流程直接跳转至条件表达式。在for循环中,不带标号的continue语句会跳转至表达式3,计算修改循环变量后再判断循环条件。本讲稿第八十八页,共一百一十页2、带标号的continue语句,其格式是:continue标号名;其中标号名要定义在程序中外层循环语句的前面,用来标
49、志这个循环结构。标号的命名应符合Java标识符的规定。带标号的continue语句使程序的流程直接转入标号标明的循环层次。本讲稿第八十九页,共一百一十页下面查找1100之间的素数的例子中使用了带标号的continue语句。如果找到整数i的一个因子j,则说明这个i不是素数。程序将跳过本轮循环剩余的语句直接进入下一轮循环,检查下一个数是否是素数。First-Loop:for(inti=1;i100;i+)for(intj=2;ji;j+)if(i%j=0)continueFirst-Loop;System.out.println(i);/屏幕标准输出本讲稿第九十页,共一百一十页2.break语句b
50、reak语句的作用:使程序的流程从一个语句块内部跳转出来,如从switch语句的分支中跳出,或从循环体内部跳出。break语句也有带标号和不带标号两种形式。带标号的break语句的使用格式是:break标号名;这个标号应该标志某一个语句块。执行break语句就从这个语句块中跳出来,流程进入该语句块后面的语句。不带标号的break语句从它所在的switch分支或最内层的循环体中跳转出来,执行分支或循环体后面的语句。本讲稿第九十一页,共一百一十页说明:使用break语句只能跳出一层循环,提前结束循环的执行。在多层循环中,从内层循环跳到外层,提前结束外层循环的的执行,则需要在外层循环使用标识符标号。