JAVA程序设计课件.ppt_第1页
JAVA程序设计课件.ppt_第2页
JAVA程序设计课件.ppt_第3页
JAVA程序设计课件.ppt_第4页
JAVA程序设计课件.ppt_第5页
免费预览已结束,剩余235页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.1Java简介,Java分为三个体系:1、适用于小型设备和智能卡的Java2平台Micro版(Java2PlatformMicroEdition,J2ME)2、适用于桌面系统的Java2平台标准版(Java2PlatformStandardEdition,J2SE)3、适用于创建服务器应用程序和服务的企业版(Java2PlatformEnterpriseEdition,J2EE多层模型)应用:JSP/Servlet、EJB、XML、JavaBean,Java语言的版本,Java语言的特点,1、面向对象:Java程序以类(class)定义的形式存在,能很好的实现数据封装和程序的模块化,更大程度上支持代码的复用。2、跨平台性:Java程序能在网络上各种不同的计算机和操作系统上正常运行而不需要进行改造,以独特的编译和解释机制运行。3、分布性:Java程序可以方便地进行网络通信,包括普通的数据传输和程序间的协作、远程方法调用等,实现网络环境上的分布计算。,4、解释执行:Java源程序首先由编译器编译成与平台无关的中间产物-字节码文件,然后在运行时由解释器对其进行解释执行。5、内存管理:通过运算符new获得内存后,不需再释放,Java可对无用内存进行“垃圾收集”,防止了系统崩溃的可能性。6、指针:程序员不能进行任何指针操作。,1.2Java的编程环境,1、Java程序的开发、执行流程2、安装并配置Java平台Java平台:Java应用编程接口(API)Java虚拟机(JVM),源代码(*.java文件),结果,字节码(*.class文件),编译,解释,执行,API:ApplicationProgrammingInterface可在程序中使用的代码库,它使用户能够添加现成的可定制的功能。,JVM:JavaVirtualMachine(1)Java虚拟机可以理解成一个以字节码为机器指令的CPU。(2)对于不同的运行平台有不同的虚拟机。(3)java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。,JRE(JavaRuntimeEnvironment):Java运行环境。JVM+解释器。加载、校验、执行代码。,运行环境的配置主要是指环境变量Path、CLASSPATH的配置。Path-外部命令搜索路径。标明某个可执行文件的保存位置后,系统都可以通过Path这一环境变量记录的路径找到它,进而实现在任何路径下都能运行该文件。CLASSPATH-类资源位置搜索路径。标明定义过的Java类的字节码文件的保存位置,在其它的类中使用该类时,运行环境能够找到并引入该类。,Java环境变量配置,bin该目录存放运行程序,如javacdemo该目录存放一些示例文件include该目录存放与C相关的头文件jre该目录存放Java运行环境相关的文件lib该目录存放程序库(类库)src.zip该文件含有Java库程序的源程序doc该目录含有详细的Java文档(另外安装),安装目录文件初识:,1.3Java程序初识,1.3.1Java程序类型,Javaapplication(Java应用程序):Java平台上独立运行的一种程序,需指定开始执行的起点即程序入口(main)。由Java解释器加载执行。,Javaapplet(Java小应用程序):内嵌在HTML文件中,必须搭配浏览器运行,没有程序入口。,1.3.2Application的编辑、编译与运行1、程序的编辑Java源程序是以.java为后缀的简单的文本文件,可以用各种Java集成开发环境中的源代码编辑器来编写,也可以用其他文本编辑工具,如Window中的记事本等。注意:(1)Java程序严格区分大小写;(2)文件名要与程序中的publicclass的类名一致;例子,在类中定义了一个main方法,其中有三个修饰语:public:表示main方法可被所有对象使用static:该方法可以通过类名直接调用,称为“静态方法”void:表示main方法没有返回值Java解释器以main方法为入口执行程序,Stringargs:传递给main方法的参数,参数名为args,是string类的一个实例,参数可以是0个或多个,每个参数用“类名、参数名”来指定,多个参数之间用逗号分隔.,首先用保留字class声明一个新类,类名为Welcome,它是一个公共类(public),括起部分为整个类的内容,Java程序中的任何部分都必须包含在类中。,此语句实现字符串的输出,利用Java应用编程接口(API)向控制台输出文字。System是JDK提供的包中现成的类,而不是一个对象,通过运算符“.”衔接的out代表System类下的一个实例,同时out也是PrintStream类的对象,而println是其中的一个方法。“;”则代表一个语句的结束。,程序中的“”是成对出现的,以“”为边界的语句集合称为一个块。语句块是可以嵌套的。程序中的空格不影响程序执行,Java程序中允许任意多的空白。/一直注释到本行结束,2、程序的编译将源程序转变为字节码(bytecode)文件。其扩展名为.class,其中包括的是Java虚拟机的指令。编译使用的是JDK中的工具javac.exe。在Window中,该工具的使用方法如下:(1)进入DOS环境。选择开始菜单中的运行,然后键入command或cmd(2)进入存放源文件的目录(3)编译源程序。键入javacWelcome.java或键入c:javabinjavacWelcome.java,说明:(1)javac后面可以有多个文件名,还可以使用*及?通配符,如:javacHello*.java(2)javac后面可以跟一系列选项,其用法为:Javac(3)选项如下:-g生成所有调试信息-verbose输出编译器正在做的信息(4)若编译不成功,javac会提示信息,修改源文件后再重新编译,成功后会产生相应的.class文件。,3、程序的运行程序的运行就是执行.class文件中的指令的过程。由Java源代码编译生成的字节码不能直接运行在一般的操作系统平台上,而必须运行在一个称为“虚拟机”的在操作系统之外的软件平台上。在运行java程序时,首先应该启动这个虚拟机,然后由它来负责解释执行java的字节码。JDK提供的解释器是java.exe。用法为:javaWelcome注意:不能写为Welcome.class,1.3.3Applet的编辑、编译与运行1、源程序的编辑与编译同Application一样。例:WelcomeApplet.java然后用javac将它编译为.class文件。2、在HTML文件中嵌入AppletApplet与Application运行不同,applet需要嵌入HTML文件中,才可以执行。WWW浏览器(如IE)可以显示HTML文件规定的Web页面,当把一个JavaApplet程序嵌入HTML文件时,HTML文件会在其Web页面中划定一块,区域作为此Applet程序的显示界面。由于浏览器中也有Java的虚拟机,它会解释执行其中的程序。,在HTML文件中嵌入Applet需要使用一组约定好的特殊标记:和。,在中还必须包含三个参数。(1)code:指嵌入的Applet字节码文件的文件名(2)height:Applet程序在Web页面中占用的高度(3)width:Applet程序在Web页面中占用的宽度,anapplet,3、执行(1)直接双击html文件(2)使用JDK提供的appletviewer工具4、优点动态、安全、跨平台的网络应用程序,用户一旦载入Applet,就可以放心地来生成多媒体的用户界面或完成复杂的计算而不必担心病毒的入侵,可以接收用户的输入,动态地进行改变,而不仅仅是动画的显示和声音的播放。,小结,1、Java的产生、特点2、Java的编程环境3、Application、Applet的编辑、编译与运行4、常用的集成开发环境及Jcreator的使用,第2章Java语言基础,教学重点与难点Java程序的构成Java的关键字、标识符、各种数据类型Java的常量与变量Java的各种运算符结构化程序设计的三种基本流程,Java程序编写过程就是设计类、实现类,定义其属性、行为的过程。例2-1BuGaoLan.java例2-2ball.java,2.1Java程序的构成,Java程序的基本结构如下:PackageImport定义用户类1定义类1的若干变量或对象:定义类1的方法1;定义类1的方法2;定义类1的方法M1;定义用户类2定义类2的若干变量或对象:定义类2的方法1;定义类2的方法2;定义类2的方法M2,从演示程序可以看出,一般的Java源程序文件由以下三部分组成:1、package语句(0句或1句)2、import语句(0句或多句)3、类定义说明:1、Package语句表示本程序所属的包。它只能有1句或没有。如果有,必须放在最前面。如果没有,表示属于默认包。,2、import表示引入其他类的库,便于使用。该语句可以有0句或多句,它必须放在类定义的前面。3、类定义是Java源程序的主要组成部分,每个文件中可以定义若干个类。Java程序中定义类使用关键字class,每个类的定义由类头和类体两部分组成。类头除了声明类名之外,还可以说明类的继承特性,当一个类被定义为是另一个已存在的类(父类)的子类时,它就可以从其父类中继承一些已定义好的类成员而不必自己重复编码。类体部分用来定义属性和方法这两种类的成员,其中方法类似于其他高级语言中的函数,,而属性则类似变量。4、在java源程序中只能有一个公共类,应用程序中包含main方法,整个类定义由大括号括起来。在方法或属性前面可以加修饰符,如public、static、void等。5、语句是构成java程序的基本单位之一。每一条语句都由分号“;”结束,语句块可以使用。6、Java程序允许任意多的空白。7、/后的内容为注释。注释也可使用下列方式:/*.多行.*/或/*多行*/。,2.2标识符、数据类型、变量与常量,2.2.1标识符任何一个变量、常量、方法、函数、对象和类都需要有一个名字,这些名字就是标识符。标识符由编程者自行确定。标识符要满足以下规定:1、标识符必须以字母、下划线或美元符号开头,不能以数字开头;2、在字母、下划线或美元符号后可以跟数字、字母、下划线或美元符号,没有长度限制;3、标识符区分大小写,如Abc不同于abc;4、标识符不能为关键字,但是它可以包含关,键字作为它名字的一部分,如thisone。有效标识符,如:identiferthisWtoUser_naIn$max$123q1qqq_$567maqwww_111无效标识符,如:12qqqqwooo#wowoclass98.3说明:类名首字母应大写;变量、方法、对象的首字母应小写;在标识符中的所有单词都应靠在一起,而且大写中间单词的首字母,如ThisIsClassName;常数初始化字符则全部大写。,2.2.2数据类型,JAVA编程语言有八个原始(基本)数据类型,分为以下四种:1、逻辑类booleanboolean用来表示布尔型(逻辑)数据的数据类型。Boolean型变量或常量的取值只有true和false两个。true代表“真”,false代表“假”。2、字符类char使用char类型可表示单个字符,用单引号括起来的一个字符,如q,H等。它在内存中占两个字节。,它表示的是Unicode集。Java也提供转义字符,以反斜杠()开头,将其后的字符转变为另外的含义。u0061:一种表示字符的形式:单引号字符“:双引号字符:反斜扛字符r:回车n:换行f:进纸t:水平制表符b:退格,3、整数类byte、short、int、long四种整数类型byte(字节型)、short(短整型)、int(整型)、long(长整型)在内存中所占长度不同,分别是1,2,4,8字节。表示的范围是不一样的。十进制整数,如123,-314,0八进制整数,要求以0开头,如012,-021十六进制整数,要求以0 x开头,如0 x12整数默认为int类,如在其后有一个字母“L”或“l”则表示为长整型值。,4、浮点类double,float如果一个数包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数为浮点数。如果不明确指明浮点数的类型,则认为是double。如:3.141592.08E256.56ffloat为单精度(32位)、double为双精度(64位).2.2.3常量与变量在Java中,不同类型的数据既可以以常量的形式出现,也可以以变量的形式出现。Java的常量值用字符串表示,区分为不同的数据类型。如整型常量123,实型常量1.23,字符常量A,布尔常量true,字符串常量“ABC”等。注意:区分字符常量和字符串常量。注意:“常量”这个名词还会用在另外其他语境中表示值不可变的变量。final关键字,变量的值则是可以变化的,它的定义包括变量名、变量类型和作用域几个部分。声明变量语句如下:类型变量名,变量名=变量初值例如:inta,b,c=123;doubled1=3.2,d2=0.0;注意以下几点:(1)从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此每一个变量在使用前必须先申请(声明),然后进行赋值(填充内容)才能使用。(2)声明一个变量的同时也就指明了变量的作用域,变量的作用域指明可访问该变量的一段代码。按作用域来分,变量可以有两种:局部变量、成员变量。,成员变量是在类中声明,而不是在类的某个方法中声明,它的作用域是整个类。局部(local)变量是在一个方法内定义的变量,也被称作自动(automatic)、临时(temporary)或栈(stack)变量。当执行进入一个方法时,局部变量被创建,当执行离开该方法时,局部变量被清除,它的作用域为它所在的代码块(整个方法或方法中的某块代码)。在成员函数内定义的变量对该成员变量是“局部的”,因而,你可以在几个成员函数中使用相同的变量名而代表不同的变量。在一个确定的域中,变量名应该是唯一的。通常,一个域用大括号“”和“”来划定。,(3)下面是几个变量的声明:inta,b,c;/定义a,b,c为int型变量doubled,e;/定义d,e为double型变量floatf=2.5,g=5.8;/定义f,g为float型变量,并赋初值。其中,多个变量间用逗号隔开。(4)在Java程序中声明变量后,需给该变量赋值。可用赋值语句来初始化变量任何局部变量都不能没有初始值(否则,则无法通过编译)。赋值方式如下:将已声明的变量名放在左边,然后是等号(),右边是有适当值的Java表达式。它的意思是“取得右边的值,把它复制到左边”。右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行。但左边的值必须是一个明确的、已命名的变量。如:inta;/这是声明a=45;/这是赋值charc;/这是声明c=y;/这是赋值,相对于一个方法的“局部”变量,如果在初始化之前想使用它,编译器会提示出错,如下面这样就是不允许的:voidf()inti;i=i+1;当一个对象被创建时,实例变量在分配存储器的同时被值初始化。初始化值如表3-4所示。下面给出几个Java程序的例子,使大家对数据类型进一步加深理解。【例2.3】Java中的数据类型【例2.4】Java中变量的作用域一【例2.5】Java中变量的作用域二【例2.6】Java中对象的初始化,2.3运算符,按照运算符功能来分,基本的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符等。2.3.1算术运算算术运算符包括加号(+)、减号(-)、乘号(*)、除号(/)、取模(%)、自增运算符(+)、自减运算符(-)等。在算术运算中,有以下值得注意的地方:(1)算术运算符的总体原则是先乘除、再加减,括号优先。(2)整数除法会直接砍掉小数,而不是进位。(3)与C语言不同,对取模运算符%来说,其操作数可以为浮点数。如:37.2%10=7.2。(4)Java也用一种简写形式进行运算,并同时进行赋值操作。例如,为了将10加到变量x,并将结果赋给x,可用:x+=10。(5)Java对加运算符进行了扩展,使它能够进行字符串的连接,如abc+def,得到串abcdef。,(6)前缀+、-与后缀+、-的区别:+i(前缀+)在使用i之前,使i的值加1,因此执行完+i后,整个表达式和i的值均为i+1;i+(后缀+)在使用i之后,使i的值加1,因此执行完i+后,整个表达式的值为i,而i的值变为i+1。,例子:intj=15,k=15;intx=+j;inty=k+;,结果:x16j16y15k16,inti=3;System.out.println(+i);,结果为4,i=4,inti=3;System.out.println(i+);,结果为3,i=4,inta=1;intb=2;intc=+b;intd=a+;c+;System.out.println(“a=”+a);System.out.println(“b=”+b);System.out.println(“c=”+c);System.out.println(“d=”+d);,结果:a=2b=3c=4d=1,-i在使用i之前,使i的减1,因此执行完-i后,整个表达式和i的值均为i-1;i-在使用i之后,使i的减1,因此执行完i-后,整个表达式的值为i,而i的值变为i-1。【例2.7】Java中算术运算符的使用,2.3.2关系运算关系运算符用来比较两个值,返回布尔类型的值true或false。关系运算符都是二元运算符,如下所示。op1op2op1大于op2ture=op1=op2op1大于等于op2tureop1op2op1小于op2tureb);e=(ab),/false/ture/ture/false,例如:intx5,y6;booleanbxy,运行结果:b=false,对“或运算”如果运算符左边的表达式的值为true,则整个表达式的结果为true,不必对运算符右边的表达式再进行运算;同样,对“与运算”,如果左边表达式的值为false,则不必对右边的表达式求值,整个表达式的结果为false。,【例2.9】Java中逻辑运算符的使用,逻辑表达式往往可用于表示比较复杂的条件,例如要判别某一年year是否为闰年,闰年的判别条件是:能被4整除但不能被100整除,或者能被400整除。,(year%4=0b=a与)运算符执行一个右移位(带符号),左边按符号位补0或1例如:inta=16,b;b=a2;/b=4运算符同样是执行一个右移位,只是它执行的是不带符号的移位。也就是说对以补码表示的二进制数操作时,在带符号的右移中,右移后左边留下的空位中添入的是原数的符号位(正数为0,负数为1);在不带符号的右移中,右移后左边留下的空位中添入的一律是0。【例2.10】Java中位运算符的使用,2.3.5类型转换Java程序里,将一种数据类型的常数或变量转换到另外的一种数据类型,称为类型转换。类型转换有两种:自动类型转换(或称隐含类型转换)和强制类型转换。在实际中常会将一种类型的值赋给另外一种变量类型。如果这两种类型是兼容的,Java将执行自动类型转换。简单的说,当把占用位数较短的数据转化成占用位数较长的数据时,Java执行自动类型转换,不需要在程序中作特别的说明。例如,下面的语句把int型数据赋值给long型数据,在编译时不会发生任何错误:inti=10;longj=i;假若对主数据类型执行任何算术运算或按位运算,“比int小”的数据(char、byte、short)在正式执行运算之前,那些值会自动转换成int,这样一来,最终生成的值就是int类型。整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级。通常,表达式中最大的数据类型是决定了表达式最终结果大小的那个类型。,例如:若将一个float值与一个double值相乘,结果就是double;如将一个int值和一个long值相加,则结果为long。,不是所有的数据类型都允许隐含自动转换。例如,下面的语句把long型数据赋值给int型数据,在编译时就会发生错误:longi=10;intj=i;这是因为当把占用位数较长的数据转化成占用位数较短的数据时,会出现信息丢失的情况,因而不能够自动转换。这时就需要利用强制类型转换,执行非兼容类型之间的类型转换。上面的语句写成下面的形式就不会发生错误:longi=10;intj=(int)i;,强制类型转换的格式是:(数据类型)变量名经过强制类型转换,将得到一个在“()”中声明的数据类型的数据,该数据是从指定变量所包含的数据转换而来的。值得注意的是,指定变量本身不会发生任何变化。将占用位数较长的数据转化成占用位数较短的数据时,可能会造成数据超出较短数据类型的取值范围,造成“溢出”。如:longi=10000000000;intj=(int)i;因为转换的结果已经超出了int型数据所能表示的最大整数(4294967295),造成溢出,产生了错误。,当两数相除的时候系统会把这种运算归为整型运算,因而会自动截去小数部分,使运算结果保持为整数,所以为了得到实型数,就必须将前两个整数中的一个(或两个)强制转换为实型:1.(float)a/b将整数a强制转换成浮点数,再与整数b相除。2.a/(float)b将整数b强制转换成浮点数,再被整数a除。3.(float)a/(float)b将整数a和b同时强制转换成浮点型。只要在变量前加上欲转换的类型,运行时系统将会自动将这一行语句里的变量进行类型转换处理,但不会影响改变两原先定义的类型。,inta=155;intb=9;floatc,d;System.out.println(“a=”+a”,b=”+b);c=(float)a/b;System.out.println(“a/b=”+c);d=a/bSystem.out.println(“a/b=”+d);,结果:a=155,b=9a/b=17.222221a/b=17.0,shorta,b,c;a=2;b=3;c=(short)(a+b);,shorta,b,c;a=2;b=3;c=a+b;,【例2.11】Java中的类型转换q.java,2.3.6其他运算符1三目条件运算符(?:)在Java语言中,三目条件运算符(?:)与C语言中的使用规则是完全一致的,使用的形式是:x?y:z;上面的三目条件运算的规则是:先计算表达式x的值,若x为真,则整个三目运算的结果是表达式y的值;若x为假,则整个三目运算的结果是表达式z的值。下面的例子实现了从两个数中找出较大的数的功能。inta=3,b=4;intmax=ab?a:b;max的值为4。,三目条件运算是可以嵌套的,如有以下的语句,则max表示的是a、b、c三个数中的最大值,其值为5。inta=3,b=4,c=5;intmax=(ab?a:b)c?(ab?a:b):c;2复合赋值运算符赋值运算符“=”的作用是将运算符右边表达式的值赋给左边的变量。复合赋值运算符的作用是先进行某种运算后,再对运算的结果进行赋值操作。Java可以用一种简写形式进行运算,并同时进行赋值操作。例如,为了将10加到变量x,并将结果赋给x,可用:x+=10(等价与x=x+10)。实际上不只是“+”可以这么做,表3-7列出了Java中的所有复合赋值运算符。,复合赋值运算符的简单使用:inta=5,b=8;System.out.println(“a=”+a+”,b=”+b);a+=b;System.out.println(“a=”+a+”,b=”+b);a-=b;System.out.println(“a=”+a+”,b=”+b);a*=b;System.out.println(“a=”+a+”,b=”+b);a/=b;System.out.println(“a=”+a+”,b=”+b);,结果:a=5,b=8a=13,b=8a=5,b=8a=40,b=8a=5,b=8,3对象运算符(instanceof)对象运算符instanceof用来判断一个对象是否是某一个类或者其子类的实例。如果对象是该类或者其子类的实例,返回ture;否则返回flase。4()和括号运算符()的优先级是所有运算符中最高的,所以它可以改变表达式运算的先后顺序。在有些情况下,它可以表示方法或函数的调用。方括号运算符是数组运算符。5运算符运算符用于访问对象实例或者类的类成员函数。6new运算符new运算符用于创建一个新的对象或者新的数组。,运算符优先级:多种运算按预算符优先级从高向低进行,同级从左向右。,2.4流程控制语句,2.4.1结构化程序设计的三种基本流程1自顶向下2逐步求精3模块化除了以上的原则,结构化程序设计还有一个重要的规定,那就是只能使用“顺序结构”、“选择结构”、“循环结构”这三种基本结构(或由它们派生出来的结构)来定义程序的流程。三种基本流程控制结构示意图分别如图3-1所示。,2.4.2选择结构如图3-1(b)所示,选择结构又称为分支结构,是在两种或两种以上的多条执行路径中选择一条执行的控制结构。1ifelse语句if(条件表达式)语句组1;else语句组2;,例如:if(x=y)System.out.println(“x和y中的较大者:”+x);elseSystem.out.println(“x和y中的较大者:”+y);,例:求绝对值。if(x=b,if-elseif语句:用于处理多种分支的情况,因此又称为多分支结构语句。其语法格式为:if语句块1elseif语句块2.elseif语句块nelse语句块n+1,在if语句中包含一个或多个if语句,称为if语句嵌套,例如,有三个整数a、b、c,要判别它们能否构成三角形的三条边,则首先应判别这三个整数是否都大于零,然后再判别两个数之和是否大于第三个数。,if(a0),例子:根据月份判断季节的语句块:if(month=12|month=1|month=2)season=“Winter”;elseif(month=3|month=4|month=5)season=“Spring”;elseif(month=6|month=7|month=8)season=“Summer”;elseif(month=10|month=11|month=9)season=“Autumn”;,2switch语句switch语句(又称开关语句)是和case语句一起使用的,其功能是根据某个表达式的值在多个case引导的多个分支语句中选择一个来执行。它的一般格式如下:switch(表达式)case判断值1:语句块1case判断值2:语句块2case判断值3:语句块3case判断值n:语句块ndefault:语句块n+1,说明:把表达式返回值一次于每个case子句的值比较,如果遇到匹配的值,则执行该case的语句块。case子句中的判断值必须是常量,并且对应于执行不同操作的case子句中的判断值应是不同的。default子句为可选。当表达式的值于任何case子句中的值都不匹配时,程序执行default后面的语句。当表达式的值于任何case子句中的值都不匹配且没有default子句时,程序将不执行任何操作,而直接跳出switch语句。switch后面括号中表达式的值必须是符合byte,char,short,int类型的常量表达式,而不能用浮点类型或long类型,也不能为一个字符串。,一个switch语句可以代替多个ifelse语句组成的分支结构,而switch语句从思路上显得更清晰。【例2.13】对两个实数执行相应的运算(+、-、*、/)并输出结果。【例2.14】SwitchTest.java,注:break语句的作用时当执行完一个case分支后,终止switch结构的执行。因为case子句是起到一个标号的作用,用来查找入口并从此开始执行。如果没有break语句,则当程序执行完匹配的case子句后,还会执行后面的case子句块,这是不允许的。因此,应该在每一个case分支后,用break语句终止后面的case分支语句块的执行。,2.4.3循环结构循环结构是程序中一种重要的基本结构,是指在一定的条件下反复执行某段程序,被反复执行的这段程序称为“循环体”。Java中有三种语句来实现循环结构,分别是while,do-while和for语句。它们的结构分别如图3-4所示。,1while语句while语句的格式如下:while(条件表达式)循环体语句;在循环刚开始时,会计算一次“条件表达式”的值。当条件为假时,将不执行循环体,直接跳转到循环体外,执行循环体外的后续语句;当条件为真时,便执行循环体。每执行完一次循环体,都会重新计算一次条件表达式,当条件为真时,便继续执行循环体,直到条件为假才结束循环。while语句的结构如图3-4(a)所示。【例2.15】用while语句计算10的阶乘,例子:显示6行lineintn=10while(n4)system.out.println(“line”+n);n-;,line10line9line8line7line6line5,编程序计算当n为多大时下列不等式成立。1+1/2+1/3+1/4+.+1/n10,intn=0;floatsum=0;while(sum4),3for语句for语句是三个循环语句中功能最强,使用最广泛的一个。for语句的格式如下:for(表达式1;表达式2;表达式3)循环体语句;表达式1一般是一个赋值语句,它用来给循环控制变量赋初值;表达式2是一个布尔类型的表达式,它决定什么时候退出循环;表达式3一般用来修改循环变量,控制变量每循环一次后按什么方式变化。这三个部分之间用“;”分开。for语句的结构如图3-4(c)所示。,for语句的执行过程:(1)在循环刚开始时,先计算表达式1,在这个过程中,一般完成的是初始化循环变量或其它变量。(2)根据表达式2的值来决定是否执行循环体。表达式2是一个返回布尔值的表达式,若该值为假,将不执行循环体,并退出循环;若该值为真,将执行循环体。(3)执行完一次循环体后,计算表达式3。在这个过程中一般会修改循环变量。(4)转入第(2)步继续执行。【例2.17】用for语句计算10的阶乘【例2.18】for语句的嵌套,例如:求1到100的累加,可用for语句实现:inti,sum=0;for(I=1;I=100;I+)sum+=I;system.out.println(“1+2+3+4+.+100=”+sum);,上面例子用while语句表示为:,i=1;while(Ifor语句中圆括号内的表达式根据情况可以部分甚至全部省略,但分号决不能省略。例如:sum=0;k=1;for(;kfor语句的循环体中可以包含一个或多个for循环,这叫做循环嵌套。这在实际应用中很常见,while循环同样也可以嵌套。,2.4.4跳转语句跳转语句用来实现循环执行过程中的流程转移。在switch语句中使用过的break语句就是一种跳转语句。在Java语言中,有两种跳转语句:break语句和continue语句。在Java语言中,可用break和continue控制循环的流程。其中,break用于强行退出循环,不执行循环中剩余的语句。而continue则停止执行当前的循环,开始新的循环。break语句和continue语句都有两种使用的形式:一种是不带标号的break语句和continue语句;一种是带标号的break语句和continue语句。,1.不带标号的break语句和continue语句【例2.19】使用break语句跳出循环体【例2.20】使用continue语句终止当前循环2.带标号的break语句和continue语句标号应该定义在某一个循环语句之前,紧靠在循环语句的前方,用来标志这个循环结构,在标号和循环之间置入任何语句都是不明智的行为。而在循环之前设置标号的唯一理由是:我们希望在其中嵌套另一个循环或者一个开关,break和continue关键字若随同标号使用,它们就会中断到存在标号的地方。,本章小结,Java语言的源程序代码由一个或多个编译单元组成,每个编译单元可包含一个包声明、任意数量的import语句、类和接口声明。每个Java的编译单元可包含多个类或接口,但是每个编译单元最多只能有一个类或者接口是公共的。关键字对Java技术编译器有特殊的含义,它们可标识数据类型名或程序构造名。标识符是赋予变量、类或方法的名称,标识符可从一个字母、下划线(_)或美元符号($)开始,随后也可跟数字、字母、下划线或美元符号,标识符是区分大小写。Java编程语言有八个原始数据类型,分别为boolean、char、byte、short、int、long、double和float。不同类型的数据既可以以常量的形式出现,也可以以变量的形式出现。常量就是指在程序执行期间其值不能,发生变化的数据,常量是有固定值的。变量的值则是可以变化的,变量实际上代表内存中指定的存储单元。它的定义包括变量名、变量类型和作用域几个部分。,基本的运算符分包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符等。优先级决定了同一表达式中多个运算符被执行的先后次序,结合性则决定了并列的相同优先级的运算的先后执行顺序。应当掌握好各种运算符的优先级。虽然Java语言是面向对象的程序设计语言,但是面向对象的编程也是以面向过程编程为基础而发展起来的,在对象的方法等程序片内部,仍然需要严格遵守传统的结构化程序设计原则。所以应当熟练掌握结构化程序设计的三种基本流程:顺序结构、选择结构和循环结构。,3.1.面向对象的基本概念3.2类3.3方法3.4访问控制符3.5静态修饰符、静态字段和方法3.6抽象类与抽象方法3.7最终类、最终属性、最终方法,第三章类和对象,3.1.面向对象的基本概念,面向对象=类+对象+继承+消息,面向对象技术是一种先进、高效的分析、描述、处理问题的思想-面向对象的思想。它力图使计算机语言对事物的描述与现实世界中该事物的本来面目尽可能地一致,这样可以增强程序的可读性,并使程序易于维护和改进,以及促进代码的复用。类和对象是面向对象编程技术中的核心概念。一个Java程序是由一个个类定义组成的,编写程序的过程就是从现实世界中抽象出Java可实现的类并用合适的语句定义它们的过程,这个定义包括对类内各种属性和方法的定义,创建类的对象,也包括类间的各种关系和接口的定义。,类的概念和现实生活中“事物种类”完全一致,面向对象编程技术中的“类”是根据分析和处理问题的需要,对某一类现实事物的抽象概括。例如:在讨论人的出生信息这类事物时,如果只关心日期信息,就可以定义类BirthDate来描述它,具体某个人,如张三的生日信息就是该类事物的实际存在的个体,即“对象”或“实例”。类是对一类事物描述,是抽象的概念上的定义,而对象是实际存在的该类事物的每个个体,是“看得见、摸得着“的实体。比如”人“是一个类,它描述了能直立行走、能使用语言和工具生活的一类高级动物,是一个概念,而“张三”是“人”这种类型,(1)类与对象,的一个“对象”,比如,可以是蓝眼睛、白皮肤、35岁的一个男人,是具体而确定的一个“实例”。类是对象的共同特征(属性和操作)的表示,对象是类的实例。类和对象包括数据属性,也包括作用于数据的操作(行为)。类和对象把属性和行为密封成一个整体。,属性值规定了对象所有可能的状态。对象的操作是指该对象可以展现的外部服务。例如,大型客机可视为对象,它具有位置、速度、颜色、容量等属性,对于该对象可施行起飞、降落、加速、维修等操作,这些操作将或多或少地改变飞机的属性值(状态)。,继承性是面向对象程序设计语言的最主要的特点,是其他语言(如面向过程语言)所没有的。,类之间的继承关系是现实世界中遗传关系的直接模拟,它表示类之间的内在联系以及对属性和操作的共享,即子类可以沿用父类(被继承类)的某些特征。当然,子类也可以具有自己独立的属性和操作。,(2)继承,例如,飞行器、汽车和轮船可归于交通工具类,飞行器类可以继承交通工具类某些属性和操作。,除遗传关系外,现实世界中还普遍存在着部分整体关系。例如,飞机可由发动机、机身、机械控制系统、电子控制系统等构成-聚集关系。,消息传递是对象与其外部世界相互关联的唯一途径。对象可以向其他对象发出消息以请求服务,也可以响应其他对象传来的消息,完成自身固有的某些操作,从而服务于其他对象。因为对象的操作主要用来响应外来消息并为其他对象提供服务,所以它们也被称作“外来服务”。,(3)消息,例如,直升飞机可以响应轮船的海难急救信号,起飞,加速,飞赴出事地点并实施救助作业。,3.1.1抽象,1什么是抽象在考虑问题时,集中考虑和当前问题有关的方面,而忽略和当前问题无关的方面,就是抽象。抽象就是抽出事物的本质特性而暂时不考虑它们的细节。抽象可以分层次。在抽象的最高层,使用问题环境的语言,以概括的方式叙述问题的解法;在最低层,可以用直接实现的方式来叙述问题的解法。过程抽象和数据抽象是常用的两种主要抽象手段。过程抽象是指任何一个完成明确功能的操作都可被使用者当作单个的实体看待,常常也称为功能/子功能抽象。如方法、子程序。,数据抽象定义了数据类型和施加于该类型对象的操作,并限定了对象值的范围,只能通过使用这些操作修改和观察这些数据。例如:抽象数据类型。数据抽象最本质的一点就是把数据类型的使用(调用)与它的实现分离。它把大的系统分解成多个小的部分,每个部分有一个按所处理的数据而设计的接口,这些接口是这个部分的说明,是外部可见的(如名字、类型、继承等),而这个部分的具体实现则是隐藏的、外部不可见的。,2如何用面向对象的方法实现抽象,一个抽象数据类型(AbstractDataType,ADT)可以分解成4个部分,如图3-1所示。语法和语义构成抽象数据类型ADT的说明,让使用者了解这个抽象数据类型的特征。属性和方法构成ADT的实现,展示这个ADT是怎样做成的。,图3-1抽象数据类型,3.1.2封装,模块所包含的信息(过程和数据)对于其它模块来说应该是隐蔽的。对于其它不需要这些信息的模块来说,是不能访问的,或者说是“不可见”的。将信息隐蔽的过程称为封装。有两方面的原因促使我们控制对成员的访问。第一个原因是防止程序员接触他们不该接触的东西通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,毋需明白这些信息。第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。,3.2类,类是现实世界某些对象的共同特征(属性和操作)的表示,是对象的抽象,对象是类的实例。,类的属性:类的静态属性的简称,指类内包含的各项数据,如变量或其他类的对象;类的方法:也称为成员函数或方法。表示操作或功能。,3.2.1类的定义,类的基本定义方法如下:修饰符class类名extends父类implements接口名类成员变量声明类方法声明,类的修饰符用来说明类的特殊性质。分为三种:访问控制符:public公共类protected受限类、private私有类抽象类说明符:abstract最终类说明符:final,接口名跟在implements关键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。接口是Java语言用来实现多重继承的一种特殊机制,我们将在后面详细介绍它的使用方法。,1、关于类头,class是关键字,在它的后面,应跟随新数据类型的名称。(注意不要把class写成Class)。父类名跟在extends关键字后面,用来说明当前类是哪个已经存在类的子类,存在继承关系。继承是类与类之间的一种非常重要的关系。,类的修饰符-访问控制符、抽象类说明符、最终类说明符,“public”(公共)意味着后续的定义任何人均可使用。“private”(私有)意味着除您自己、类型的创建者以及那个类型的内部函数成员,其他任何人都不能访问后续的定义信息。“protected”(受保护的)与该类处于同一包的类及该类的子类所直接存取与和使用。“friendly”(友好的)若某样东西是“友好的”,意味着它只能在这个包的范围内使用(所以这一访问级别有时也叫作“包装访问”)。“,接口名,接口名跟在implements关键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。接口是Java语言用来实现多重继承的一种特殊机制,将在后面详细介绍它的使用方法。,2、关于类体类体的定义要包括类的具体内容,包括类的属性与方法。class,Java中声明类属性为简单变量的语法如下:修饰符变量类型变量名=变量初值;,变量类型和变量名是声明一个变量必不可少的部分;变量的类型是简单数据类型,如int、double等。,类的属性,Java中声明类属性为对象的语法如下:修饰符类名对象名=new类名(实际参数列表),类的方法,类中定义的方法通常起到两种作用:一是围绕着类的属性进行各种操作;二是与其他的类或对象进行数据交流、消息传递等操作。,Java中声明方法的语法如下:修饰符返回值类型方法名(参数列表)throws例外名1,例外名2,方法体:局部变量声明;语句序列;,类的方法,又称为成员函数,用来规定类属性上的操作,实现类的内部功能的机制,同时也是类与外界进行交互的重要窗口。,classEmployee/构造函数publicEmployee(Stringn,doubles,intyear,intmonth,intday)name=n;/职工姓名salary=s;/职工工资hireDay=newGregorianCalendar(year,month-1,day);/出勤数/方法1publicStringgetName()returnname;/更多的方法/属性的实例privateStringname;privatedoublesalary;privateDatehireDay;,3.2.2创建类的实例对象,对象是类的一个实例,类是同种对象的抽象,是创建对象的模板。在程序中创建一个对象将在内存中开辟一块空间,其中包括该对象的属性和方法。创建对象使用关键字运算符new,例如下面的语句将创建Employee的对象:,【例3.1】显示三个员工的相关信息,在程序中我们构造了一个Employee数组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论