java教材全套电子课件完整版ppt整本书电子教案最全教学教程整套课件.ppt
第1章面向对象程序设计概述学习目标理解面向过程和面向对象程序设计思想的区别掌握Java语言的基本特点熟悉Java语言的各种开发平台重点难点面向对象程序设计思想的基本概念Java语言的基本特点Java语言开发平台的适用场合1.1程序设计思想的发展面向过程的程序设计思想及语言面向对象的程序设计思想及语言1.1.1面向过程的程序设计思想及语言“面向过程”是一种以事件为中心的编程思想,即分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用。面向过程是一种基础的方法,是自上向下步步求精,将一个复杂任务按照功能进行拆分,并逐层细化到便于理解和描述的程度,最终形成由若干独立模块组成的树状结构,所以面向过程最重要的是模块化的设计思想。当程序规模不是很大时,面向过程的方法还会体现出一种优势,因为程序的流程很清楚,按照模块对应函数的方法可以很好地组织。1.1.1面向过程的程序设计思想及语言最初问世的高级语言都属于面向过程的编程语言,用来实现程序的顺序、选择、循环这三种结构,比较著名的语言有Pascal、Modula、Bliss、Euclid、Edison、Gypsy、CLU、XCY-2、Smalltalk、C等。按照模块对应函数的方法可以很好地组织。“面向过程”程序设计方法也有它的缺陷,主要表现在以下方面:(1)难以适应大型软件的设计(2)程序可重用性差这些由结构化程序设计的特点所导致的缺陷,其本身无法克服,而越来越多的大型程序设计又要求必须克服它们,这最终导致了“面向对象”设计方法的产生。1.1.2面向过程对象的程序设计思想及语言“面向对象”程序设计是一种解决问题时整体看待一个实体的思想。它是从现实世界中客观存在的事物出发来构造软件系统,强调直接以现实世界中的事物为中心来思考问题、认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。简单地来说,就是将我们编程时独立考虑的相关的一些属性和一些操作都“打个包”,整体来对待,也就是将我们现实世界的事物看成属性(数据)和它本身的操作(方法)来整体对待。把数据和方法整合到一起就形成了类,类声明得到对象,编程时有效地利用类的继承性,会在很大程度上提高编程效率。1.1.2面向过程对象的程序设计思想及语言与面向过程程序设计相比,面向对象程序设计有以下优点:(1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰。(2)通过继承可大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减少了出错概率,降低了软件维护的难度。(3)结合面向对象分析、设计,允许将问题中的对象直接映射到程序中,减少了软件开发过程中中间环节的转换过程。(4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上便于控制软件复杂度。(5)通过对象的聚合、联合,可以在保证封装与抽象的原则下实现对象的内在结构以及外在功能的扩充,从而实现对象由低到高的升级。1.1.2面向过程对象的程序设计思想及语言面向对象程序设计语言与传统的面向过程编程语言的主要区别在于:传统过程性语言中把数据以及处理它们的子程序当作互不相关的成分分别处理,而面向对象语言则把这两者统一作为对象封装一起进行处理。面向对象的思想是G.Booch在研究Ada软件开发方法时首先提出来的,它的一个重要概念就是类。完全面向对象的语言有Smalltalk、C+、Eiffel、Java等。1.2Java程序设计语言Java语言概述Java语言的三大开发体系1.2.1Java语言概述1995年5月23日,Sun公司正式发布了Java产品。Java语言一经推出,就受到了业界的关注。Netscape公司第一个认可Java语言,并于1995年8月将Java解释器集成到它的主打产品Navigator浏览器中。接着,Microsoft公司在InternetExplorer浏览器中认可了Java语言。Java语言开始了自己的发展历程。Java语言是简单的、面向对象的语言,它具有分布式特点、安全性,又可以实现多线程,更主要的是它与平台无关,解决了困扰软件界多年的软件移植问题。1.2.2Java语言的三大开发体系Java发展到今天,已从编程语言发展成为全球第一大通用开发平台。Java技术已被计算机行业主要公司所采纳。1999年,Sun公司推出了以Java2平台为核心的J2SE、J2EE和J2ME三大平台。Java2Platform,StandardEdition(J2SE)Java2Platform,EnterpriseEdition(J2EE)Java2Platform,MicroEdition(J2ME)简单地说,J2SE用于小型程序,J2EE用于大型程序,J2ME用于手机等程序。J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但新添加了一些专用类。语言都是相同的,只是捆绑的类库API不同。也就是说,J2SE是基础;压缩一点,再增加一些CLDC等方面的特性就是J2ME;扩充一点,再增加一些EJB等企业应用方面的特性就是J2EE。第2章初识Java程序设计学习目标了解Java开发环境掌握Java语言的运行机制了解Java虚拟机重点难点Java环境变量的配置Eclipse的使用2.1典型案例【案例描述】使用Eclipse编写程序,在控制台输出多行信息,运行结果如下所示。【运行结果】2.2Java开发环境的搭建Java虚拟机的简介JDK的下载与安装配置系统环境变量2.2.1Java虚拟机的简介Java虚拟机(JavaVirtualMachine,JVM)为Java语言实现了平台无关性。使用Java语言编写的程序需要经过Java编译器编译,这时会生成与平台无关的字节码(*.class文件)。这种字节码是不可执行的,必须使用JVM来解释执行。因此,我们无论在任何系统上编写Java程序,只要该平台安装了JVM,便可以运行。2.2.2JDK的下载与安装JDK(JavaDevelopmentKit),即Java标准开发工具箱,是Oracle公司提供一套用于开发Java应用程序的开发工具,提供了编译、运行Java程序所需要的各种工具和资源,包括Java编译器、Java运行环境,以及常用Java类库等。Java运行环境也称为JRE(JavaRuntimeEnvironment),是运行Java程序的必要条件。可以说JRE里包括JVM。2.2.2JDK的下载与安装JDK官方下载网址为:http:/ 逻辑运算符的操作数和结果都是布尔型。(1)&运算的一般形式是:A&B。其中:A、B是逻辑或关系表达式。若A和B的值至少有一个为false,则A&B的值为false;若A和B的值均为true,则A&B的值为true。(2)|运算的一般形式是:A|B。其中:A、B是逻辑或关系表达式。若A和B的值至少有一个为true,则A|B的值为true;若A和B的值均为false,则A|B的值为false。(3)!运算的一般形式是:!A。其中:A是逻辑或关系表达式。若A的值为true,则!A的值为false,反之为true。3.4.4赋值运算符及赋值表达式赋值运算符是最常用的运算符,用于把一个表达式的值赋给一个变量(或对象)。一般形式为:变量=表达式赋值表达式的值为赋值号右边变量或表达式的值,例如:a=5的值为5,x=a+3的值为8,y=(a=3)+(b=8)的值为11。Java也提供了复合的赋值运算符,包括:+=,-=,*=,/=,%=。例如:x*=x+y;/相当于x=x*(x+y);x+=y;/相当于x=x+y;3.4.5其他运算符及表达式条件运算符是三目运算符,由条件运算符组成的表达式的一般格式为:逻辑表达式(或关系表达式)?表达式1:表达式2其功能是:若逻辑表达式(或关系表达式)的值为true,整个式子的结果取表达式1的值,否则取表达式2的值。条件运算符及条件表达式常用于简单分支的取值处理。对象对象运算符运算符(1)构造对象运算符(new)。new运算符主要用于创建类的对象,我们将在后边的章节作详细介绍。(2)分量运算符(.)。.运算符主要用于获取类、对象的属性和方法。例如可使用System类对象的输出方法在屏幕上输出信息:System.out.println(myfirstJavaprogram);。字符字符串连接运算符(串连接运算符(+)在表达式中,如果+号运算符左右两边的操作数至少一个为字符串,此时该+号运算符的作用是字符串连接符。3.4.6运算符的优先级Java运算符的优先次序3.4.6运算符的优先级在上表中优先级为1的运算符优先级最高,优先级10的运算符优先级最低。结合性是指运算符结合的顺序,通常都是从左向右,也称为左结合。从右向左的运算符最典型的就是取负运算,例如3+-4,含义为3加-4,符号首先和运算符右侧的内容结合,也称为右结合。注意区分正负号和加减号的区别。其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意地使用运算符的优先级别,对于不清楚优先级的地方可以使用小括号,这样便于代码的阅读和维护。JavaJava程序设计基础与实践程序设计基础与实践第4章程序控制语句重点难点多重if语句和switch语句的适用场合嵌套if语句的使用使用循环语句的嵌套编写程序学习目标掌握if条件结构掌握if、if-else语句的格式理解多重if语句和switch语句的异同点掌握嵌套if语句的使用方法理解循环结构的要素掌握while、do-while、for语句的格式掌握循环语句的嵌套理解break和continue语句在程序中的使用场合4.1典型案例【案例描述】使用Eclipse编写程序,将120这20个数按照每行5个顺序输出,运行结果如下图所示。【运行结果】4.2顺序结构顺序结构是最简单、最基本的程序控制结构,程序中的语句将自顶向下逐条执行,即按语句的排列顺序从第一条顺序执行到最后一条,且每个语句只执行一遍,无需专门的控制语句。4.3选择结构顺序结构的程序虽然能解决数据的输入、计算和输出等功能,但是不可能处理复杂的问题。在数据处理过程中,往往需要根据不同的情况,完成不同的处理。例如,任意输入两个数a和b,输出较大的数。解决这样的问题,就需要让计算机按照给定的条件来进行判断,并且根据判断的结果选择相应的处理方式。实际上,这种处理方式就是要求程序本身具有一定的逻辑判断能力和选择能力。选择结构的执行就是根据一定的条件选择执行路径,而不是严格按照语句的物理顺序来执行。类似这种情况的处理,要使用if条件语句来实现。4.3.1单一if语句单一if语句的格式如下:if(表达式)语句;功能:若表达式的值为true,则执行语句,否则跳过该语句。其中,语句可以是单条语句或复合语句(用大括号“”括起的多条语句)。4.3.2if-else语句if-else语句的格式如下:if(表达式)语句1;else语句2;功能:如果表达式的值为true,执行语句1,否则执行语句2。4.3.3多重if-else语句多重if-else语句的格式如下:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式n-1)语句n-1;else语句n;这是一种多选一的多分支结构,其功能是:如果表达式i(i=1n-1)的值为true,则执行语句i;如果所有表达式的值均为false,则执行语句n。4.3.4switch语句多重if-else语句是实现多分支选择的语句。Java还提供了一种switch语句来实现“多选一”的功能。switch语句的一般格式如下:switch(表达式)case常量1:语句组1;break;case常量2:语句组2;break;case常量n-1:语句组n-1;break;case常量n:语句组n;break;default:语句组n+1;4.3.4switch语句表达式的值必须是int型或char型。常量i(i=1n)是对应于表达式类型的常量值。各常量的值不能相同。语句组i(i=1n+1)可以是空语句,也可是一个或多个语句。break的作用是结束本switch结构语句的执行,跳到该结构外的下一个语句执行。先计算表达式的值,根据该值查找与之匹配的常量i,若找到,则执行语句组i,遇到break语句后跳出switch结构,否则继续依次执行下边的语句组。如果没有查找到与计算结果相匹配的常量i,则执行default关键字后的语句组n+1。4.3.5嵌套if语句多重if语句是用于多个并列条件选择的情况。如果多个条件是递进关系,可以在if语句或if-else语句的“语句1”或“语句2”中再使用if语句或if-else语句,这种设计方法称为嵌套。嵌套if语句格式如下:if(表达式)if语句;或者if(表达式)if-else语句;elseif-else语句;4.4循环结构循环是我们周围存在的最普遍的现象之一,许多复杂的问题往往需要做大量雷同的重复处理。可见,循环结构是程序设计中的一个常用结构。Java语言提供了3种循环语句来实现循环结构的程序设计,分别为for循环语句、while循环语句和do-while循环语句。一般情况下,for循环用于处理确定次数的循环,while和do-while循环用于处理不确定次数的循环。4.4.1while循环语句while循环的一般格式:while(表达式)/表达式为循环条件语句组;/循环体表达式可以是关系表达式或逻辑表达式,它产生一个布尔值。语句组是循环体,是要重复执行的语句序列。当表达式的值是true时,重复执行循环体(语句组)操作,当表达式的值是false时,结束循环操作,执行while循环体下边的程序语句。4.4.2do-while循环语句do-while循环的一般格式:do语句组;/循环体while(表达式);while与do-while之间的差别在于:while循环先判断表达式的值,如果表达式的值为true则执行循环体,否则跳过循环体的执行,因此如果一开始布尔表达式的值就为false,那么循环体一次也不被执行;do-while循环是先执行一次循环体,然后再判断表达式的值,若其值为true则再次执行循环体,否则执行后边的程序语句。无论布尔表达式的值如何,do-while循环都至少会执行一次循环体语句。4.4.3for循环语句for循环语句的一般格式如下:for(表达式1;表达式2;表达式3)语句组;/循环体表达式1一般用于设置循环控制变量的初始值,例如:inti=1;。表达式2一般是关系表达式或逻辑表达式,用于确定是否继续进行循环体语句的执行。例如:i100;。表达式3一般用于循环控制变量的增减值操作。例如:i+;。语句组是要被重复执行的语句,称为循环体。语句组可以是空语句、单个语句或多个语句。4.4.4循环语句的嵌套如果一个循环语句的循环体中又包含一个循环语句,则称之为循环语句的嵌套,也称为多重循环。前面学习的三种循环语句,每一种语句的循环体部分都可以再包含循环语句,所以多重循环很容易实现。循环的嵌套,按照嵌套层数,分别称为二重循环、三重循环等。处于内部的循环称为内循环,处于外部的循环称为外循环。执行过程以二重循环为例。从最外层开始执行,外循环变量每取一个值,就判断一次循环条件,如果为真,内循环就执行一次循环体,内循环结束后,再回到外循环,外循环变量取下一个值,如果循环条件依然为真,内循环又开始执行一次循环体。依此类推,直到外循环结束。JavaJava程序设计基础与实践程序设计基础与实践第5章数组与字符串学习目标掌握一维数组的声明、分配空间的方法,熟练使用一维数组解决实际问题掌握二维数组的声明、分配空间和使用方法,熟悉二维数组输入/输出方法掌握字符串常量对象的创建和使用方法掌握字符串的一些常用方法,并能熟练运用这些方法解决相关问题理解String类和StringBuffer类的区别,并能进行实际应用重点难点一维数组的实际应用String类和StringBuffer类的区别及使用5.1典型案例【案例描述】使用Eclipse编写程序,从控制台输入10个学生Java课程的成绩,计算并输出这10个学生的平均成绩及最高分与最低分,运行结果如下图所示。【运行结果】5.2一维数组数组是一种构造类型。数组中的每个元素都具有相同的数据类型,且可以用数组名和下标来唯一地确定。数组是有序数据的集合。和其他变量一样,数组必须先声明定义,然后赋值,最后再使用。5.2.1一维数组的声明一维数组声明的一般格式如下:数据类型数组名;或数据类型数组名;数据类型说明数组元素的类型,可以是Java中任意的数据类型。数组名是一个标识符,应遵照标识符的命名规则。例如:inta;/声明一个整型的一维数组a若数组的类型一样,则可以一次定义多个数组。例如:intx,y,z;Java语言在对数组进行声明时,并不会为数组分配存储空间。因此在对数组进行声明时,是不允许指明数组长度的,而且声明后的数组必须通过分配存储空间来创建数组对象后,才可以访问数组中的元素。5.2.2一维数组的初始化一般情况下,使用new运算符定义数组大小,格式如下:数组名=new数据类型size;size指数组的长度。例如:intarray1;/声明一个整型数组array1=newint5;/定义数组可以存放5个整型元素此时,整型数组array1的长度为5,即包含5个整型数组元素:array10、array11、array12、array13、array14。每一个元素都可以存放一个整型的数据,相当于5个整型变量。当用new关键字为一个数组分配内存空间后,可以为每个数组元素赋值,例如:array10=1;/数组下标从0开始array11=2;array12=3;array13=4;array14=5;通常也可以采用如下方式为数组元素赋初值并由初值的个数确定数组的大小。intarray1=1,2,3,4,5;上述语句声明并创建了数组array1,并且为数组中的每个元素赋值,使得array10=1,array11=2,array12=3,array13=4,array14=5。系统将根据所给初值的个数计算出数组的长度并分配相应的存储空间。5.2.3访问一维数组数组元素的使用数组元素的使用 为数组分配好内存空间后,就可以像普通数据类型的变量一样在程序中使用数组元素,即可以在任何允许使用变量的地方使用数组元素。数组元素的访问方式为:数组名下标;下标可以为整型常量或表达式,下标值从0开始。数组是作为对象处理的,它具有长度(length)属性,用于指明数组中包含的元素个数。因此数组的下标从0开始到length-1结束。如果在引用数组元素时,下标超出了此范围,系统将产生数组下标越界异常(ArrayIndexOutOfBoundsException)。5.2.3访问一维数组 数组的使用数组的使用-当数组创建后,数组名就存储了数组存储空间的起始地址,也可以使用该数组名给其他同类数组名赋值,这样使得多个数组共享一组内存空间和数据。5.3多维数组在Java语言中,多维数组是建立在一维数组基础之上的,以二维数组为例,可以把二维数组的每一行看作是一个一维数组,因此可以把二维数组看作是以一维数组为元素的数组。同样也可以把三维数组看作二维数组的数组,依此类推。在通常的应用中一维、二维数组最为常见,多维数组只应用于特殊的场合。5.3.1二维数组的声明声明二维数组的一般格式如下:数据类型数组名;或数据类型数组名;数据类型可以是Java中的任意数据类型。例如:inta;/声明一个整型的二维数组adoubleb;/声明一个实型的二维数组b注意:和一维数组类似,二维数组的声明只是说明了二维数组元素的数据类型,并没有为其分配存储空间。5.3.2二维数组的初始化二维数组初始化也是为数组元素指定初始值,同时为数组分配相应的内存空间。可以采用如下的方式。先声明后定义最后再赋值例如:intmatrix;/声明整型二维数组matrixmatrix=newint33;/定义matrix包含33=9个元素matrix00=1;/为第1个元素赋值matrix01=2;/为第2个元素赋值matrix22=9;/为第9个元素赋值直接定义大小后赋值例如:intmatrix=newint33;matrix00=1;/为第1个元素赋值matrix22=9;/为第9个元素赋值由初始化值的个数确定数组的大小在元素个数较少并且初值已确定时通常采用如下方式赋值:intmatrix=1,2,3,4,5,6,7,8,9;/由初值个数确定3行3列5.3.3访问二维数组二维数组在分配好内存空间后,可以像一维数组一样使用。每个数组元素的识别方式都是:数组名下标1下标2;其中,下标1和下标2与一维数组的下标要求是一样的。5.4数组的应用排序数组冒泡排序搜索数组折半查找5.4.1排序数组将下面的数列排序:54382。将相邻两个数进行比较,不断地将小数调到前面。第1趟排序后结果为:43528。可以看出,第1趟排序后最大值已经沉底,得到我们预想的结果,它将不会参与下一趟排序。第2趟排序后结果为:34258。依此继续,共进行4趟排序,就可以完成对5个数的冒泡排序。5.4.2搜索数组折半查找是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。5.5字符串的应用字符串是字符的序列,字符串中可以包含字母、数字和其他各种特殊字符,如+、?、*、/等。在Java语言中字符串是被当作对象来处理的,它提供了一系列的字符串操作方法,使字符串的处理更加简单和规范。Java语言的java.lang包中封装了final类String和StringBuffer。其中String类的对象是字符串常量,建立后不能改变其值。而StringBuffer类的对象类似于一个字符缓冲区,建立后其值可以修改。5.5.1字符数组字符数组中的每个元素都是char类型的数据,它的创建方法与一般数组相似。字符数组的声明和创建例如:chara=newchar8;该语句声明并创建了字符数组a,数组中可以存储8个字符。字符数组可以被初始化例如:chara=g,i,r,l;其中,a是一个字符数组,共有4个元素,a0为g,a1为i,a2为r,a3为l。也可以通过for语句给字符数组循环赋值例如:chara=newchar50;for(inti=0;i26;i+);ai=A+i;上述循环语句执行后,数组a中存放了26个大写英文字母。5.5.1字符数组字符串不是字符数组,但是可以转换为字符数组,反之亦然。字符串和字符数组之间的转换有以下两种方式。(1)字符串转换为字符数组toCharArray()方法。例如:将字符串“school”中的字符转换为数组a中的数组元素。chara=school.toCharArray();(2)字符数组转换为字符串String(char)构造方法或者valueOf(char)方法。例如:Stringstr=newString(newcharj,a,v,a);Stringstr=String.valueOf(newcharj,a,v,a);5.5.2String类的使用在Java中,每个字符串常量对应一个String类的对象,String类是字符串常量类,它用于生成字符串对象,String对象建立后不能修改。String类提供了如下一些常用的构造方法用来构造字符串对象:(1)String():构造一个空的字符串对象。(2)String(charchars):以字符数组chars的内容构造一个字符串对象。(3)String(charchars,intstartIndex,intnumChars):以字符数组chars中从startIndex位置开始的numChars个字符构造一个字符串对象。5.5.2String类的使用String类也提供了众多的方法用于操作字符串,以下列出一些常用的方法:(1)publicintlength():返回字符串的字符个数。(2)publiccharcharAt(intindex):返回字符串中index位置上的字符,其中index值的范围是0length-1。(3)publicintindexOf(charch):返回字符ch在字符串中第一次出现的位置。(4)publicintlastIndexOf(charch):返回字符ch在字符串中最后一次出现的位置。(5)publicintindexOf(Stringstr):返回子串str在字符串中第一次出现的位置。(6)publicintlastIndexOf(Stringstr):返回子串str在字符串中最后一次出现的位置。(7)publicStringsubstring(intbeginIndex):返回字符串中从beginIndex位置开始的子串。5.5.2String类的使用String类也提供了众多的方法用于操作字符串,以下列出一些常用的方法:(8)publicStringsubstring(intbeginIndex,intendIndex):返回字符串中从beginIndex位置开始到endIndex位置(不包括该位置)结束的子串。(9)publicStringcontact(Stringstr):用来将当前字符串与给定字符串str连接起来。(10)publicStringreplace(charoldChar,charnewChar):用来把字符串中所有由oldChar指定的字符替换成由newChar指定的字符以生成新字符串。(11)publicStringtoLowerCase():把字符串中所有的字符变成小写且返回新字符串。(12)publicStringtoUpperCase():把字符串中所有的字符变成大写且返回新字符串。(13)publicStringtrim():去掉字符串中前导空格和拖尾空格且返回新字符串。5.5.3StringBuffer类的使用在字符串处理过程中,String类生成的对象是不变的,StringBuffer类对字符串的运算操作是在源字符串本身上进行的,运算操作之后源字符串的值发生了变化。StringBuffer类采用缓冲区存放字符串的方式提供了对字符串内容进行动态修改的功能,即可以在字符串中添加、插入和替换字符。StringBuffer类被放置在java.lang包中。StringBuffer类常用的构造方法如下:(1)StringBuffer():用于创建一个空的StringBuffer类对象。(2)StringBuffer(intlength):以length指定的长度创建StringBuffer类对象。(3)StringBuffer(Stringstr):用指定的字符串初始化创建StringBuffer类对象。与String类不同,必须使用StringBuffer类的构造方法创建对象,不能直接定义StringBuffer类型的变量。5.5.3StringBuffer类的使用StringBuffer类对象的常用方法(1)插入字符串方法。insert()方法是一个重载方法,用于在字符串缓冲区中指定的位置插入给定的字符串。它有如下形式:1)insert(intindex,类型参量名):可以在字符串缓冲区中index指定的位置处插入各种数据类型的数据(如int、double、boolean、char、float、long、String、Object等)。2)insert(intindex,charstr,intoffset,intlen):可以在字符串缓冲区中index指定的位置处插入字符数组中从下标offset处开始的len个字符。(2)删除字符串方法。StringBuffer类提供了如下常用的删除方法:1)delete(intstart,intend):用于删除字符串缓冲区中位置在startend之间的字符。2)deleteCharAt(intindex):用于删除字符串缓冲区中index位置处的字符。5.5.3StringBuffer类的使用StringBuffer类对象的常用方法(3)字符串添加方法。append()方法是一个重载方法,用于将一个字符串添加到一个字符串缓冲区的后面,如果添加字符串的长度超过字符串缓冲区的容量,则字符串缓冲区将自动扩充。它有如下形式:1)append(数据类型参量名):可以向字符串缓冲区添加各种数据类型的数据(如int、double、boolean、char、float、long、String、Object等)。2)append(charstr,intoffset,intlen):将字符数组str中从offset指定的下标位置开始的len个字符添加到字符串缓冲区中。(4)字符串的替换操作方法。replace()方法用于将一个新的字符串去替换字符串缓冲区中指定的字符。它的形式如下:replace(intstart,intend,Stringstr):用字符串str替换字符串缓冲区中从位置start到end之间的字符。5.5.3StringBuffer类的使用StringBuffer类对象的常用方法(5)获取字符方法。StringBuffer提供了如下从字符串缓冲区中获取字符的方法:1)charAt(intindex):取字符串缓冲区中index指定位置处的字符。2)getChars(intstart,intend,chardst,intdstStart):取字符串缓冲区中startend之间的字符并放到字符数组dst中以dstStart下标开始的数组元素中。(6)其他几个常用方法。1)toString():将字符串缓冲区中的字符转换为字符串。2)length():返回字符串缓冲区中字符的个数。3)reverse():将字符串缓冲区中的字符串翻转。4)substring(intstart):取子串。返回字符串缓冲区中从start位置开始的所有字符。5)substring(intstart,intend):取子串。返回字符串缓冲区中从位置start开始到end之前的所有字符。JavaJava程序设计基础与实践程序设计基础与实践第6章基于对象的程序设计基础基于对象的程序设计基础重点难点构造方法的作用各种访问控制修饰符的使用学习目标掌握类和对象的基本概念及关系掌握类的创建方法掌握对象的创建和使用理解成员变量和成员方法的特性掌握构造方法的定义掌握访问控制修饰符的使用方法了解类库中常用类的使用6.1典型案例【案例描述】使用Eclipse编写程序,定义Student学生类,包含姓名、性别、年龄、所在学校四个属性,创建一个学生对象并初始化,输出相应的信息。运行结果如图所示。【运行结果】6.2类的定义基于对象的方法将系统看作是现实世界对象的集合,现实世界中包含被归类的对象。属性代表类的特性,行为代表由类完成的操作。为了模拟真实世界,更好地解决问题,我们需要创建解决问题所必需的数据类型,基于对象编程为我们提供了解决方案。类实际上是我们根据需要创建的复合数据类型。6.2.1类的基本概念对象面向对象的程序设计方法就是将现实世界中的对象抽象为程序设计语言中的对象。在信息世界中,用数据(变量)来描述对象的状态,用方法来实现对象的行为。类类是组成Java程序的基本元素,类把不同对象具有的共性抽象出来,类是同一类对象的原型。对象和类的关系类封装了一类对象的状态和方法。类是用来定义对象的模板。对象是类的具体实现。6.2.2类的定义单一if语句的格式如下:访问控制符非访问控制符class类名extends父类名implements接口名列表/类声明/类体开始标志类的成员变量声明/属性说明类的成员方法定义类的构造方法定义/行为定义/类体结束标志6.2.2类的定义说明:n访问控制符:public、friendlyn非访问控制符:abstract、abstractnclass是关键字,定义类的标志。n类名是该类的名字,是一个Java标识符,一般情况下单词首字母大写。n父类名跟在关键字“extends”后,说明所定义的类是该父类的子类。n接口名列表,跟在关键字“implements”后。6.2.3成员变量的声明声明或定义成员变量一般常在类体的开始部分。一般定义格式如下:访问控制符访问控制符 非访问控制符非访问控制符 数据类型数据类型 成员变量名成员变量名=初始值初始值;(1)访问控制符:public、private、protected、friendly(2)非访问控制符:static、final、transient、volatile(3)数据类型:可以是简单数据类型,也可以是对象、接口、数组、字符串等类型。6.2.4成员方法的定义成员方法包含在类中,用来实现类的行为,完成不同的功能。定义方法也包含两部分,方法声明和方法体。成员方法定义的一般格式如下:访问控制符访问控制符 非访问控制符非访问控制符 返回值类型返回值类型 方法名方法名(形形式参数列表式参数列表)throws 异常表异常表 变量声明变量声明 /方法内使用的变量,即局部变量方法内使用的变量,即局部变量 程序代码程序代码 /方法的主体代码方法的主体代码 return(表达式表达式)/返回语句返回语句 6.2.5构造方法的定义Java语言允许对象在它们被创建时就被初始化。这种自动的初始化是通过一种特殊的方法构造方法来完成的。它是一种特殊的成员方法,其特点是:(1)构造方法的方法名必须与它所在的类同名。(2)构造方法没有返回值,也没有返回类型。(3)每一个类可以有零个或多个构造方法,只要它们的参数不同即可。(4)构造方法在创建对象时由Java编译器自动调用执行,一般不能显式地直接调用。6.2.5构造方法的定义构造方法的作用就是在创建对象时对对象的实例变量单独进行初始化。如果在类中没有构造方法,在创建对象时,系统使用默认的构造方法。定义构造方法的一般格式如下:public 类名类名(形式参数列表形式参数列表)方法体方法体 6.3对象的使用我们已经定义了立方体(Box)类,即创建了一种新的数据类型,但它只是从“立方体”类中抽象出来的模板,要处理一个立方体的具体信息,必须按这个模板构造出一个具体的立方体来,它就是Box类的一个实例。创建类的变量称为类的实例化,类的变量也称为类的对象、类的实例等。类的对象是在程序运行中创建生成的,其所占的空间在程序运行中动态分配。6.3.1对象的创建1声明对象声明对象声明对象的一般格式如下:类名类名 对象名对象名;2创建对象创建对象对象只有在创建后才能被使用,创建对象的一般格式如下:对象名对象名=new 类名类名(实参表实参表);注意:声明对象和创建对象也可以合并为一条语名,其一般格式为类名对象名=new类名(实参表);6.3.2对象的引用创建了类的对象后,就可以对对象的成员变量或方法进行访问,完成各种处理。访问对象成员的通用形式为:类对象名类对象名.成员变量名成员变量名;类对象名类对象名.成员方法名成员方法名(实参列表实参列表);运算符“.”称为对象运算符,在对象名和成员变量、成员方法之间起到连接的作用,以指明是哪个对象的成员。6.3.3对象数组Java中的数组元素也可以使用对象来创建。数组元素为对象的数组称为对象数组。对象数组首先作为数组定义,用new为该数组分配内存,然后用new为每个作为数组元素的对象分配内存。对象数组和基本数据类型的数组一样,可以作为方法的返回值。注意:对象数组声明后,不能立刻存放数据。因为对象数组的声明只会生成对象的引用,并没有产生对象的实例。6.4修饰符的使用修饰符的目的是用来对类和成员的使用做某些限定。在Java语言中,一般将修饰符分为两类:访问控制符和非访问控制符。其中,访问控制符有public、protected、private等,它们的作用是给予对象一定的访问权限,实现类和类中成员的信