




已阅读5页,还剩217页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章Java语言概述,Java语言是当前非常流行的开发语言,广泛应用于信息技术、科学研究、军事工业、航空航天等各个领域。Java语言发展到今天,互联网的快速发展起了很大的推动作用。下面将对Java语言的发展、特点、运行环境等方面做个简要介绍,使读者对Java语言有个全面了解。本章包括以下知识点。Java语言简介;运行环境的搭建;编写第一个Java程序。通过学习本章内容,读者可以对Java语言有个全面的了解,并且掌握Java程序运行环境的搭建过程。,1.1Java语言简介,Java语言是当前非常流行的开发语言,不过发展到今天也走过了非常曲折的道路。下面就从语言的发展、特点、工作原理几个方面详细介绍一下Java语言。,1.1.1Java语言的发展,计算机编程语言不断发展,Java语言发展到今天,可以说互联网的快速发展起了很大的推动作用。现在谈到Java,已不仅仅表示一门程序语言,更是一种软件开发平台。Java已经演化出了J2SE、J2EE、J2ME三个版本,分别面向不同领域的应用开发。1Java2Platform,StandardEdition(J2SE)2Java2Platform,EnterpriseEdition(J2EE)3Java2Platform,MicroEdition(J2ME),1.1.2Java语言的特点,Java语言是一种分布式的面向对象编程语言,在各个行业领域开发中得到了广泛的应用。Java具有面向对象、平台无关、简单、健壮、多线程、安全等诸多特性。下面就这些方面特性分别进行讨论。1面向对象2平台无关性3简单性4解释执行5网络的6分布式7健壮性8.可扩展性9.安全性,1.1.3工作原理,虚拟机(JVM)与垃圾回收是Java语言工作的两种重要机制,下面对其分别进行详细介绍。1Java虚拟机(JVM)2垃圾回收机制,1.2Java程序运行环境,在使用一门语言之前,首先需要搭建相关的运行环境。下面就从JDK的安装、环境变量设置、开发工具几个方面介绍如何搭建Java语言的运行环境。,1.2.1下载、安装JDK,要进行Java应用程序开发,首先需要安装JDK(JavaDevelopmentKits)。JDK是Sun公司提供的一套Java开发环境,具有多种操作系统的多个版本。自从Java诞生以来,JDK的版本一直在不断升级,如JDK1.3、JDK1.4、JDK1.5。下面以J2SE6.0DevelopmentKits在Windows操作系统下的安装为例,逐步搭建Java程序的运行环境。,1.2.2设置环境变量,Java程序运行的环境变量主要包括Path和Classpath。Path用于指定JDK包含的工具程序所在的路径,这与设置操作系统中其他应用程序的Path是一样的。Classpath是Java程序运行所特需的环境变量,用于指定运行的Java程序所需的类的加载路径。设置Java运行环境变量有命令行和图形界面两种形式,下面分别进行介绍。1设置Path2设置Classpath,1.2.3开发工具介绍,Eclipse是一个流行的针对Java编程的集成开发环境(IDE)。它还可以用作编写其他语言(比如C+和Ruby)的环境,合并各种种类工具的框架,以及创建桌面或服务器应用程序的富客户端平台。Eclipse是开放源代码的项目,可以免费下载。它的官方网址是http:/www.E,目前最新的版本号是3.4。,1.3第一个Java程序,在全面学习一门编程语言之前,最快的对该语言进行大致了解的方式就是编写一个简单的程序。下面就以第一个Java程序为例,详细介绍Java程序的编写、编译、运行等过程。,1.3.1编写程序,配置好程序运行环境后就可以动手编写Java程序了。通过编写第一个简单的Java程序,能够对Java有个快速的体验,也能验证运行环境配置的正确与否。学习一门程序语言,通常都是以一个“HelloWorld”的程序开始。为了让读者能够更深的体会Java程序的编写、执行过程,下面的实例先是采用文本编辑器编写、命令行方式执行。最后将会介绍使用Eclipse编写该实例的过程。,1.3.2编译、运行,程序编写完成后,在执行前首先需要进行编译。编译Java源程序需要使用Javac命令程序。命令行方式编译、运行Java源程序的步骤如下所示。,1.3.3使用Eclipse编写、执行程序,在掌握了用命令行方式编译、执行程序的方法后,下面详细介绍一下如何使用Eclipse编写、执行上面列举的HelloWorld程序。,1.3.4程序结构说明,第一个Java程序比较简单,但毕竟是一个完整的程序,能够正确执行。下面对这个程序的整个结构做个简单说明,以便对Java程序结构有个最初步的简单认识。01publicclassHelloWorld/定义类HelloWorld02/定义main()方法03publicstaticvoidmain(Stringargs)04System.out.println(HelloWorld!);/输出字符串0506,1.3.5Java程序调试技巧,程序调试是程序开发过程中很重要的一项工作,即时熟练的开发人员也是如此。不过,对于初学者来说有时更容易犯一些入门级的错误。很小的一个错误往往使初学者费尽周折,为此花费大量精力。下面给出一些编写程序过程中经常遇到的一些问题及调试技巧,以便在遇到问题时能够快速饩觥1Path、Classpath的问题2注意大小写3主文件名与类名一致4全角与半角5使用Eclipse调试程序,第2章简单数据类型及运算,在Java语言中定义了一组简单数据类型,这些数据类型是构成其他数据类型的基础。简单数据类型类似结构化编程语言中的数据类型。定义了数据类型的变量与常量,与运算符进行组合,可以形成各种复杂的表达式,从而构成程序中的基本运算单元。在各种编程语言中,可以说数据类型、运算符及表达式等都是程序基础。会同标识符、关键字、变量与常量,这些基础知识又互相衔接,密不可分。本章针对这些基础知识逐一详细介绍。,2.1标识符与关键字,程序中的标识符与关键字都具有一定的含义。标识符是用户定义的程序中类、变量、常量、方法等的标识,关键字是语言本身留作特殊用途的专用符号。关于标识符与关键字的具体知识,下面分别进行介绍。,2.1.1标识符,标识符是指程序中类、变量、常量、方法等的名字。类、变量、常量、方法等进行定义和引用时需要利用一定的标识进行识别,这就需要使用标识符。标识符的命名必需符合一定的规范,Java语言的标识符命名规则如下。首字符必需是字母、下划线_、美元符号$、或者人民币符号¥。标识符由数字09、大写字母AZ、小写字母az和下划线_、美元符号$以及所有在十六进制0 xc0前的ASCII码等组成。不能把关键字和保留字作为标识符。标识符对大小写敏感,也就是需要区分大小写。标识符没有长度限制。,2.1.2关键字,语言本身专门使用的标识符为关键字,在程序代码中有其特殊的含义。Java常用的关键字有package、class、interface、public、private、protected、default、int、byte、double、boolean、char、if、else、while、switch、case、do、break、continue、try、catch、finally、throw、throws、new、this、super等。所有的关键字都为小写,每个都有其特殊的作用,比如:用于包、类、接口定义:package、class、interface。访问控制修饰符:public、private、protected、default。数据类型:int、byte、double、boolean、char。关于流程控制:if、else、while、switch、case、do、break、continue。关于异常处理:try、catch、finally、throw、throws。创建对象:new。引用:this、supe。,2.2基本数据类型,程序中的主要数据元素为变量与常量,每一个变量与常量必须属于一种数据类型。数据类型指定了该类数据所占内存空间的大小、取值范围及其可以进行的操作。Java语言中的数据类型可分为基本数据类型和复合数据类型。基本数据类型可称为“原始数据类型”,是其他数据类型的基础。复合数据类型以基本数据类型为基础,通常以类的形式进行封装。复合数据类型的概念后续章节会详细说明。基本数据类型主要包括布尔类型、字符型、整型、实型,下面分别进行介绍。,2.2.1布尔类型,布尔类型用关键字boolean表示,只有true和false两个值。布尔类型通常用在流程控制中进行逻辑判断。布尔型数据在机器中占1个字节,系统默认初始值为false。,2.2.2字符型,字符型用关键字char表示。Java中的字符属于Unicode编码(一种类似于ASCII码的国际标准编码,采用二字节编码)。由于计算机底层只能处理二进制数据,要想使用字符,就需要对字符进行编码,转换成一系列二进制数来表示特定的字符。目前有多种编码字符集,如Unicode、ISO-8859-1、GBK、ASCII等。不同的字符集收录的字符不尽相同,Unicode属于国际标准字符集,收录了世界上所有各国语言文字的字符。字符型数据在机器中占2个字节,默认初始值为u0000。,2.2.3整型,整型用来表示不含小数部分的数字。Java语言中共有四种整数类型,分别是byte、short、int和long。这四种整数类型占用的内存空间各不相同,从而取值范围也不同。,2.2.4实型(浮点型),实型用来表示含有小数的数字。Java语言中共有float和double两种实数类型。这两种实数类型占用的内存空间、取值范围各不相同。,2.2.5数据类型转换,在程序编写过程中,不同数据类型的变量之间经常需要赋值或运算,这就需要进行数据类型转换。各种数据类型根据分配空间大小、取值范围不同,划分为一定的优先级关系。再根据优先级,数据类型转换分为自动类型转换和强制类型转换。1自动类型转换2强制类型转换,2.3运算符与表达式,运算符与表达式的概念是紧密联系在一起的。运算符与操作数组成表达式来完成相应的运算。不同类型的运算符,组成不同的表达式,可以完成不同类型的运算。表达式是具有确定值的语句,由操作数和各种运算符按照一定的规则组成。表达式的值可以作为操作数,进而形成更复杂的表达健Java语言中的运算符主要包括如下类别:算术运算符。赋值运算符。关系运算符。逻辑运算符。位运算符。条件运算符。,2.3.1算术运算符及表达式,算术运算符和操作数组成算术表达式,完成基本的算术运算。算术运算符按照操作数的个数可以分为二元运算符和一元运算符,下面分别进行介绍。1二元算术运算符2一元算术运算符,2.3.2赋值运算符及表达式,由赋值运算符组成的表达式为赋值表达式。赋值运算符只有一个,即=。赋值运算符用于运算符右边的值赋值给左边的变量。,2.3.3关系运算符及表达式,由关系运算符及两个操作数组成关系表达式。关系运算符都是二元运算符,用来比较两个操作数,执行结果为布尔型。关系运算符共有六种,分别是(大于)、=(大于等于)、(位右移)、(无符号位右移)、其中,参数type表示变量的类型,可以是基本类型,也可以是复杂类型。关于数据类型,下面会详细说明。参数Variablename表示变量名称,需要符合标识符的命名规范。参数=为赋值运算符,这里用于初始化,运算符的概念后续章节会详细说明。参数initialvalue表示初始化值。,2.4.2变量的作用域,变量的作用域规定了变量能被使用的范围,只有在作用域范围内,变量才能够被调用。作用域在变量声明时即被指定。根据作用域的不同,变量可以分为不同的类型:类变量、局部变量、方法参数变量、异常处理参数变量。下面分别对这几类变量进行详细介绍。1类变量2局部变量3方法参数变量4异常处理参数变量,2.4.3定义常量,常量可以说是一种特殊的变量,一旦初始化以后,不能再对其进行赋值。也就是说,常量在初始化后,其值不再改变,只能进行访问。定义常量的语法如下所示。finaltypeConstantname=initialvalue;其中,参数final为关键字,代表不可更改。参数type表示常量的类型。参数Constantname表示常量名称,可以任意取,不过需要符合标识符的命名规范。参数=为赋值运算符,这里用于初始化,运算符的概念后续章节会详细说明。参数initialvalue表示初始化值。,2.5本章实例,本章主要讲解了简单数据类型及各种运输符与表达式,还有变量与常量的定义。下面给出一个较完整的实例,进一步加深掌握本章内容。1编写程序2程序说明3执行结果,第3章流程控制,为了解决现实问题,程序的执行流程应该是多种多样的。流程应该既可以自上而下的顺序执行,又应该能够遇到某些条件进行跳转,还应该能够对某些操作重复执行。为了控制程序的执行流程,需要使用流程控制语句。流程控制主要包括顺序结构、选择结构、循环结构以及跳转语句,本章针对这些基础知识逐一详细介绍。本章包括以下知识点。顺序结构;选择结构;循环结构;跳转语句;注释语句。,3.1顺序结构,顺序结构是程序中最常见的流程结构,语句按照出现的先后顺序自上而下执行。顺序语句执行的过程中没有跳转和判断,直到程序执行结束为止。,3.2选择结构,选择结构也称为分支结构,根据一个判断表达式的结果选择不同的分支语句执行。选择结构提供了程序跳转机制,根据选择的结果,有些语句可能被跳转过去不被执行。选择结构主要包含两种语句,if语句和switch语句,下面分别进行介绍。,3.2.1if语句,If语句是最经常使用的选择结构。它包含两个分支,根据指定布尔类型表达式的结果true或false,选择不同的分支执行。If语句根据复杂程度,可以具有多种形式,如if、if-else、if-else-if。下面分别进行介绍。1if形式2if-else形式3if-else-if形式,3.2.2switch语句,switch语句属于多分支结构,通常可以替代复杂的if-else-if形式的语句。switch语句根据表示的值选择一个分支来执行,表达式的结果类型只能为byte、short、int或char型。switch语句的语法格式如下所示。switch(表达式)casevalue1:/处理语句1break;casevalue2:/处理语句2break;casevalue3:/处理语句3break;default:/处理语句n,3.3循环结构,要重复执行一段代码,需要使用循环结构。循环结构可以重复执行指定的处理语句,直到不再满足循环条件为止。循环结构主要有for和while两种循环语句,下面分别进行介绍。,3.3.1for循环语句,for语句通常用于重复次数确定的循环。for循环的语法格式如下所示。for(初始化;循环条件;迭代部分)循环体其中,参数for为关键字。参数“初始化”表示循环的初始化语句,只在循环开始前执行一次,通常用于迭代变量的定义。参数“循环条件”为布尔类型表达式,结果为true时执行循环体,结果为false时结束循环体。参数“迭代部分”在循环体执行完毕时执行。执行完迭代部分,再次判断循环条件,如此反复执行,直到循环条件不再满足。,3.3.2while循环语句,while语句通常用于重复次数不确定的循环。该语句包含两种形式,while形式和dowhile形式。下面分别进行介绍。1while形式2dowhile形式,3.3.3多重循环,各种循环语句可以嵌套使用,从而构成更加复杂的多重循环。比如for语句中还有for语句,while语句中还有while语句,for语句中包含while语句等。,3.4跳转语句,要进行流程跳转,需要使用跳转语句。Java语言包括三种跳转语句,分别是break、continue、return,下面分别进行介绍。,3.4.1break语句,在switch语句中,break语句用于结束switch语句的执行。这在上面switch章节已经介绍,在此不再赘述。在循环结构中,break用于强行终止循环。,3.4.2continue语句,continue语句用于循环结构中,作用是跳过本次循环,执行下一次迭代。,3.4.3return语句,return语句用于终止当前方法运行,返回到调用该方法的语句处。如果方法需要有返回值,return语句后就应该提供相应返回值。有关方法的概念,在后续章节中会详细介绍。,3.5注释语句,在介绍了Java语言的流程控制语句之后,现在来介绍一下Java程序中注释的使用。在Java程序的任意位置都可以加入注释语句,Java编译器会忽略这些注释语句。Java语言主要包括单行和多行两种注释,下面分别进行介绍。,3.5.1单行注释,在Java程序中使用“/”符号来进行单行注释。从“/”符号开始,到本行结束的所有字符均被编译器作为注释而忽略。,3.5.2多行注释,多行注释的方法是以“/*”符号为开头,以“*/”为结尾,中间为注释的内容。注释的内容没有数量限制,可以为任意多行数目,当然也可以是单行。,3.6本章实例,意大利著名数学家列奥纳多斐波纳契曾经在其著作算法之书中提出了“著名的兔子问题”:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?答案是一组非常特殊的数字,即:1、1、2、3、5、8、13、21、34以上这些数字就是著名的“斐波纳契数列”。1编写程序2程序说明3执行结果,3.7上机实践,1编写程序,实现求解以下分段函数:y=2编写程序,用*号打印出金字塔图形,3.8小结,本章介绍了Java语言中的各种流程控制语句,包括选择结构的if/switch语句,循环结构的for/while语句及程序跳转语句break、continue、return。另外还介绍了注释语句的使用方法。本章最后给出了一个完整的实例。其中各种控制语句的综合运用是本章的难点。在编写程序解决现实问题时,常常需要综合运用各种流程控制语句,从而实现较复杂的处理逻辑。在掌握了基本语法后,读者应该多学习一些相关的算法知识,从而能够解决更加复杂地问题。下一章将介绍Java语言面向对象编程中类和对象的相关知识。,3.9本章习题,1.某市不同车牌的出租车3km的起步价和计费分别为:夏利5元,3km以外2.1元/km;富康8元,3km以外2.4元/km;桑塔纳10元,3km以外2.7元/km。分别用if语句和switch语句编程实现:根据乘车的车型及行车公里数输出应付车资。2.用循环实现求100的阶乘。3.break语句和continue语句的区别是什么?,第4章类与对象,类与对象是进行面向对象编程的基础。类是具有相同属性特征和行为规则的多个对象的一种统一描述,对象是对类的实例化。在Java语言中,类是一种最基本的复合数据类型,是组成Java程序的基本要素。下面详细介绍Java语言中有关类与对象的定义方法。本章包括以下知识点。类的创建;创建类的成员及方法;关键字this;对象的创建、使用及清除。,4.1创建类,面向对象的编程从创建类开始。创建了类,才谈得上封装、继承、多态,才能实例化生成对象。类的整体结构主要包括声明和类成员两大部分。本节详细介绍如何声明类及类成员的访问控制。,4.1.1声明类,要使用一个类,必须先声明类。声明类就是创建一种新的数据类型,利用声明的类可以定义类实例,也就得到了一个对象。声明类的语法如下所示。publicabstract|finalclassextendsimplements/类主体其中,参数public、abstract、final表示类修饰符是可选项,下面会详细说明。参数class是关键字。参数Classname表示类名。参数extendsClassname表示继承自其他类。参数implementsInterface表示实现了某些接口。继承和接口方面在后续章节会详细介绍。,4.1.2类成员的访问控制,对于类的成员,不管是成员变量还是成员方法,都有一定的访问控制权限。访问控制权限限定了指定对象可以被访问的范围。类成员的访问控制符有public、private、protected和default。public:用public修饰的成分表示是公有的,也就是它可以被其他任何对象访问(前提是对类成员所在的类有访问权限)。private:类中限定为private的成员只能被这个类本身访问,在类外不可见。protected:用该关键字修饰的成分是受保护的,只可以被同一类及其子类的实例对象访问。default:public、private、protected这三个限定符不是必须写的。如果不写则表明是default,相应的成分可以被所在的包中各类访问。,4.2创建类的成员,类的成员变量定义了类的属性。所定义的成员变量,可以被类内的所有方法访问。比如,如果把电视机看作一个类,则电视机的颜色就是这个类的一个成员变量。该变量用来描述电视机的颜色。声明成员变量的语法如下所示。public|protected|privatestaticfinaltransientvolatiletypevariableName;其中,参数public、private、protected表示成员变量的访问权限。参数static表示限定该成员变量为类变量。参数final表示声明为常量。参数transient表示声明为暂时性变量。参数volatile表示声明一个共享变量。参数type表示变量的类型。参数variableName表示变量名称。,4.3创建类的方法,除了成员变量,方法也是类的重要成员。成员方法描述了对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块。本节详细介绍如何创建类的方法以及类的特殊方法,即构造方法和main()方法。,4.3.1定义类的成员方法,成员方法描述对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块。它与过去所说的子程序、函数等概念相当。一个类或对象可以有多个成员方法,对象通过执行它的成员方法对传来的消息作出响应,完成特定的功能。成员方法一旦被定义,便可在不同的程序段中多次调用,故可增强程序结构的清晰度,提高编程效率。1成员方法的返回值2形式参数与实际参数3方法体中的局部变量,4.3.2构造方法,Java中的每个类都有构造方法,它是类的一种特殊的方法。构造方法用来初始化类的一个新的对象。它必须具有和类名相同的名称,而且不指出返回类型,它的默认返回类型就是对象类型本身。每个类可以具有多个构造方法,它们各自包含不同的方法参数。构造方法的语法如下所示。publicabstract|finalclassextendsimplementsClassname(paramList);/定义构造方法Classname(paramList);/定义其他构造方法/类主体其中,类声明部分的参数在前面已经介绍。最大的特点是存在一到多个与类同名的方法,这些方法就是构造方法。,4.3.3main()方法,main()方法是Java程序执行的入口。作为application执行的Java程序,有且只能有一个类具有main()方法。main()方法定义的语法如下所示。publicstaticvoidmain(Stringargs)/方法体其中,访问控制权限是公有的(public),并且是类的静态成员方法(static),没有返回值(void)。这些特性对main()方法来说是指定的且不能改变的。main()方法具有一个字符串数组参数,用来接收执行Java程序时的命令行参数。命令行参数作为字符串,按照顺序依次对应字符串数组中的元素。,4.3.4方法的可变参数,以上几节介绍了类中方法的创建。在具体实际开发过程中,有时方法中参数的个数是不确定的。为了解决这个问题,在J2SE5.0版本中引入了可变参数的概念。声明可变参数的语法格式如下所示。methodName(paramList,paramTypeparamName)其中,参数methodName表示方法名称。参数paramList表示方法的固定参数列表。参数paramType表示可变参数的类型。参数是声明可变参数的标识。参数paramName表示可变参数名称。可变参数必须定义在参数列表的最后。,4.4关键字this,在示例4-4中,出现了Java关键字this。this是Java语言中一个特殊的关键字,用来代表当前对象。关键字this是与对象密切相关的,在容易混淆的地方使用this会使程序设计变得规范、简单、灵活。,4.5对象,对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java对象的生命周期包括创建、使用和清除。本节详细介绍对象的整个声明周期过程。,4.5.1对象的创建,要使用一个对象,首先要创建它。通常创建对象的语法如下所示。typeobjectNmae=newtype(paramList);其中,参数type表示对象的类型。参数objectName表示对象的名称。参数new为Java的关键字,下面会详细介绍。参数type(paramList)是对类型type构造方法的调用。,4.5.2对象的使用,对象定义好了之后,才可以使用对象。对象的使用即是调用对象的变量或方法。使用对象的语法如下所示。objectNmae.memberVariableName/调用对象的变量objectNmae.memberMethodName/调用对象的方法其中,参数objectNmae表示对象的名称。参数memberVariableName表示对象的成员变量名称。参数memberMethodName表示对象的成员方法名称。,4.5.3对象的清除,对象使用完之后需要进行对象的清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用new操作符为对象分配内存。不过,在清除对象时,由系统自动进行内存回收,不需要用户额外处理。这也是Java语言的一大特色,某种程度上方便了程序员对内存的管理。Java语言的内存自动回收称为垃圾回收(GarbageCollection)机制,简称GC。垃圾回收机制是指JVM用于释放那些不再使用的对象所占用的内存。Java语言并不要求JVM有GC,也没有规定GC如何工作。不过常用的JVM都有GC,而且大多数GC都使用类似的算法管理内存和执行收集操作。具体的垃圾收集实现策略有好多种,在此不再详细赘述。,4.6本章实例,在开发某图书管理系统时,其中有三个类,即图书类Book、图书类别类BookType和图书管理类BookManager。图书类Book用于管理图书本身的相关信息,包括编号、书名、作者、出版社等;图书类别类BookType用于表示图书分类,包括类别编号、类别名称等;图书管理类BookManager用于管理所有图书,主要是针对数据库进行操作,包括增加、删除、修改等。下面是这几个类的类图及源代码。,4.7上机实践,1编写程序,创建一个汽车类(Car)。该类包含颜色和型号属性,并为其创建两个构造函数:第一个为无形参的构造函数,其过程是将颜色和型号初始化为红色轿车。第二个须定义两个形参,并将形参的值分别赋给颜色和型号。另外,为该类创建两个方法,分别用来获得颜色和型号。在该类中定义一个main()方法,分别用上面的两个构造函数创建两个对象,并显示相关对象的各个属性。汽车类(Car)类图如图4-8所示。,4.8小结,本章介绍了Java语言面向对象编程中有关类与对象的相关知识。主要包括类及成员变量、成员方法的创建,以及对象的创建、使用、清除等方面的知识。本章最后给出了一个完整的实例。其中类的成员变量、成员方法的定义和使用是本章的难点。在实际编程过程中,应该多通过具体实例加深理解。下一章徊缴钊虢樯Java语言面向对象编程方面的知识,包括类的继承、封装、多态以及接口和包等。,4.9本章习题,1定义一个类,包含成员变量、构造方法、成员方法。2构造方法与成员方法有哪些不同?3类和对象之间是什么关系,用具体实例说明如何创建一个类的对象。,第5章深入面向对象编程,除了基本的类和对象,Java语言的面向对象编程还包括抽象类、接口、内部类、包等高级特性。通过对这些高级特性的支持,Java语言全面实现了面向对象的编程。下面进一步深入介绍Java语言面向对象编程方面的知识。本章包括以下知识点。类的封装、继承、多态;抽象类与接口;内部类及匿名内部类;包的创建及使用。,5.1类的封装、继承与多态,上一章介绍了有关类定义的基本知识。面向对象中的类还具有封装、继承与多态的特性,这也是面向对象编程所具有的重要特点。Java语言对类的封装、继承、多态均有很好的体现,下面分别进行介绍。,5.1.1封装,封装是指隐藏对象的属性及实现细节,对外仅提供接口可见。封装实现了信息隐藏,有利于软件复用。这种技术带来的好处是达到了模块化的标准,从而提高了代码的复用程度。在某种程度上,封装也大大改善了软件开发的可维护性,降低了构建复杂软件系统的风险。在Java语言中,对象的属性和方法均可以进行访问控制。使用前面介绍的访问控制修饰符public、private、protected、default,可以实现不同程度的信息封装。下面通过一个具体的示例来介绍Java语言中封装的实现。,5.1.2继承,继承是指一个类是从另一个类派生而来,派生类自动具有了被继承类的所有特性。其中被继承的类称为“父类”,继承父类的类称为“子类”。继承可以使子类具有父类的各种属性和方法,而不需要再次编写相同的代码。继承也极大地促进了软件的复用,而且继承的形式可以更加复杂。Java语言中类继承的语法格式如下所示。classClassNameextendsSuperClassName/类体其中,参数class是关键字。参数Classname表示类名,可以由用户任意定义,但需要符合Java标识符的命名规范。参数extends是关键字,表示该类继承自其他类。参数SuperClassName表示被继承的父类的名字,可以由用户任意定义,但需要符合Java标识符的命名规范。,5.1.3多态,多态是指对于一种服务功能,可以具有不同的实现方式,即多种形态。多态形象的描述了现实世界的复杂形态,使程序具有良好的扩展性。在继承的基础上,方法重载是实现多态的方式之一。,5.2抽象类与接口,抽象类是Java语言中一种特殊的类,其中包含只进行了声明没有具体实现的抽象方法。而接口更像是一种特殊的抽象类,其中所有方法都只进行了声明没有具体实现。抽象类和接口有着相似之处,不过也有许多区别。下面分别对它们进行详细地介绍。,5.2.1抽象类,抽象类是指包含了抽象方法的类。其中,抽象方法是一种只声明了方法名称,而没有指明方法体的方法。当需要表示对问题域进行分析、设计中得出的抽象概念时需要使用抽象类。抽象类比类的继承更高一层,是对类的抽象。抽象类拥有未实现的方法,不能被实例化,只能被继承扩展。Java语言中通常抽象类的语法格式如下所示。abstractclassClassNameabstractReturnTypeabstractMethodName(paramList);/其他类成员其中,参数abstract是关键字,表示此类为抽象类。参数class是关键字。参数Classname表示类名,可以由用户任意定义,但需要符合Java标识符的命名规范。类体中至少包含一个抽象方法。其中,参数abstract是关键字,表示此方法为抽象方法。参数ReturnType表示抽象方法的返回类型,为合法的Java数据类型。参数abstractMethodName表示抽象方法的名子,可以由用户任意定义,但需要符合Java标识符的命名规范。参数paramList表示抽象方法的参数列表。,5.2.2接口,接口是面向对象编程中又一重要概念。在实际问题中,有些互不相关的类具有某种相同的行为,这时可以采用接口来定义这种相同的行为。接口只定义提供什么功能,而不定义功能的具体实现,这一点与抽象类有些类似。在Java语言中,不提供类的多继承,一个子类只能继承自一个父类。为了解决多继承的问题,在Java中可以采用接口来实现。一个类虽然不能同时继承多个类,却可以同时实现多个接口,从而可以解决现实中的多继承问题。有关接口的知识包括接口定义、接口实现,下面分别进行介绍。1接口定义2实现接口,5.3内部类,内部类指的是在类的内部嵌套定义的类。内部类本身的结构同普通类没什么不同,只不过定义的位置是在另一个类的内部。定义的内部类同样可以在被外部引用。内部类可以只定义类体,没有名称,这就是匿名内部类。关于内部类的这些知识下面分别进行介绍。,5.3.1内部类,根据内部类的概念,内部类定义的位置是在类的内部。在一个类的任意代码块内,均可以进行内部类的定义。如可以直接作为类成员定义,可以定义在类的成员方法内、循环体内等。,5.3.2匿名内部类,匿名内部类是一种没有类名的特殊内部类。就像仅使用一次的变量可以不定义名称一样,匿名内部类也是用作定义仅使用一次的类。匿名内部类通常具有特殊的用途,也能使程序显得更加简洁。,5.4包,在面向对象编程中,包是Java语言所特有的概念。包用来将相关的一组类组织在一起进行管理,类似操作系统中的文件管理。包在外在形式上就是操作系统中的文件夹,包的内容就是类文件。不同的包可以包含同名的类,包机制有效解决了命名冲突问题。有关包的知识包括创建包和使用包,下面分别进行介绍。,5.4.1创建包,在使用包之前,首先需要创建包。创建包的语法格式如下所示。packagePackageName;其中,参数package是关键字表示包。参数PackageName表示包名,可以由用户任意定义,但需要符合Java标识符的命名规范。,5.4.2使用包,创建了包之后,经常需要使用不同包中的类。使用不同包中的类主要具有两种形式:包名加类名形式、import导入形式。另外,在J2SE5.0版本之后,还提供了静态导入功能。对这些内容,下面分别进行介绍。1包名加类名2import导入3静态导入,5.5本章实例,下面的实例采用面向对象的方法设计一个简单的学生管理系统。某高校在校的学生主要包括成人教育生、本科生、研究生这三类。每年新入学的学生要进行注册,毕业的学生要予以注销,三类学生注册、注销的方式可能略有不同。经过对系统进行需求分析,识别出系统中主要包括成人教育学生类、本科生类、研究生类,另外还要包括学生管理类。由于本章实例主要为巩固面向对象方面的知识,所以系统中涉及到的对象持久化方面的内容这里进行省略。对系统进行面向对象设计,该系统主要包括如下两个包:(1)entity包:用于包含实体类。(2)business包:用于业务操作,这里只定义了一个StudentManager类。,5.6上机实践,1编写程序,定义一个汽车类。它有两个子类,一个是卡车类,一个是轿车类。2编写程序,首先定义一个接口,在接口中声明计算面积的功能方法。然后定义两个类,一个为正方形类,一个为三角形类,分别实现接口中定义的计算面积方法。,5.8小结,本章进一步深入地介绍了Java语言中面向对象编程的相关知识,包括类的封装、继承、多态以及抽象类、接口、内部类、包等。本章最后给出了一个完整的实例。其中抽象类与接口的具体运用是本章的难点。抽象类与接口是面向对象编程中更加抽象的概念,要想能真正发挥它们的特点需要多结合具体需求反复实践。下一章将介绍Java语言中复合数据类型相关的内容,如数组、字符串、集合等。,5.9本章习题,1举例说明如何实现类的继承与扩展。2抽象类与接口都有哪些区别?3包有什么作用?,第6章复合数据类型,除了简单数据类型外,Java语言还定义了许多复合数据类型,如数组、字符串、集合等。这些复合数据类型都是以类的形式进行定义的,包含许多属性和方法。综合使用简单数据类型和这些复合数据类型,可以处理实际需求中遇到的各种数据形式,能够编写更加复杂的程序。另外,自J2SE5.0版本以来,Java语言又增加了许多新的特性,如增加的for循环、泛型、枚举等。本章包括以下知识点。数组的定义、使用;字符串的各种操作;集合的各种知识;增强的for循环及泛型、枚举、自动装箱与拆箱。,6.1数组,数组是Java语言中的一种复合数据类型,是具有相同数据类型的数据集合。数组中的每个数据称为数组元素,数组元素是有序的。关于数组的知识主要包括数组的定义、创建数组、数组的使用及多维数组,下面分别进行介绍。,6.1.1数组的定义,要使用数组,首先需要定义数组。定义数组的语法格式有两种,如下所示。datatypearrayName;或:datatypearrayName;其中,参数datatype表示数据类型,可以是Java语言中的各种数据类型。参数arrayName表示数组名称,可以由用户任意定义,但需要符合Java标识符的命名规范。参数表示声明的为数组类型,可以放在数据类型后或数组名称后。,6.1.2创建数组,要想数组能被真正使用,只定义数组是不够的,还需要为数组分配内存空间完成和初始化。下面分别进行介绍。1创建数组2数组初始化,6.1.3数组的使用,数组创建完成后即可使用数组。数组的使用最普遍的就是访问数组的元素。访问数组元素的语法格式如下所示。arrayNamesubscript其中,参数arrayName表示数组名称,可以由用户任意定义,但需要符合Java标识符的命名规范。参数subscript表示数组下标,下标从0开始,到数组长度减1结束。另外,可以通过数组的length属性访问数组的长度。关于属性的概念后续章节会详细说明。,6.1.4多维数组,由于数组的数据类型可以是各种Java数据类型,当然也包括数组。这种数组类型的数组就构成了多维数组。比如二维数组是一个数组元素为数组的一维数组。如此递归,可以形成更多维数组。下面以二维数组为例进行讲解,多维的情形与二维类似。二维数组的定义、创建、初始化与一维数组类似。语法格式如下所示:datatypearrayName;/二维数组的定义arrayName=newdatatype;/二维数组的创建arrayNamesubscriptsubscript/二维数组的使用其中,参数意义与一维数组中的一致,这里不再赘述。,6.2字符串,字符串是Java中经常使用的复合数据类型。在本质上,字符数实际上为char型数组。字符串由Java.lang.String类来表示,该类具有一系列的属性和方法,提供对字符串的各种操作。除了String类,Java还提供了StringBuffer类用来处理可变长度的字符串。下面分别进行介绍。,6.2.1创建字符串,同其他类型数据一样,要想使用字符串数据,首先需要创建字符串。创建字符串的语法格式如下所示。StringvariableName=newString();其中,参数String为关键字。参数variableName表示字符串变量名称,可以由用户任意定义,但需要符合Java标识符的命名规范。参数new为关键字。=号右边表示为字符串变量分配内存空间。,6.2.2字符串连接,字符串连接是程序中经常进行的操作,用来将多个字符串连接在一起形成一个字符串。字符串连接使用+加法运算符进行。在Java语言中,采用+运算符还可以直接连接字符串和基本数据类型中的数值类型。此时,+运算符是作为字符串连接操作处理,其他数值类型自动转换为字符串。,6.2.3字符串比较,在实际编程过程中,经常需要对两个字符串变量的内容进行比较。Java语言中的String类提供了几个方法分别适合不同情况的字符串比较,如表6-1。,6.2.4字符串其他常用操作,字符串String作为数组和类,本身提供了许多方法用来进行各种复杂操作。表6-2列出了字符串一些常用方法及简单说明。,6.2.5StringBuffer类,由于String对象的长度是不可改变的,如果使用String类进行频繁的字符串拼接操作,那么会产生很多的对象。针对此类性能问题,Java语言提供了另一个类StringBuffer类可以特别用来处理此类问题。StringBuffer类主要包含如下一些方法。StringBuffer类常用方法如表6-3所示。,6.3集合,集合是多个对象的容器,容器里聚集了一组对象。前面介绍了数组类型,数组类型是有相同数据类型的数据集合。如果需要将不同数据类型的多个对象组织在一起,就需要使用集合。在Java语言中,集合本身一个框架体系,包含各种集合类。下面分别进行介绍。,6.3.1集合框架,在Java语言中,各种集合类通过集合框架进行组织。集合框架包括各类集合接口、接口实现类、集合操作,通过继承关系形成自上而下的体系结构。集合框架的核心接口为Collection、List、Set和Map,其继承关系如图6-1所示。,6.3.2访问集合元素,对所有集合类最经常的操作就是访问集合中的元素。在Java语言中定义了迭代器Iterator接口用于访问集合中的元素。下面列出了Iterator接口中定义的方法,如表6-4所示。,6.3.3列表(List),List提供了对象的有序存放,其中存放的对象允许重复。List接口的具体实现类主要有ArrayList和LinkedList。其中ArrayList以一种类似数组的形式存储对象,对象的随机访问速度较快。LinkedList实现机制是采用链表,适合于在链表中间需要频繁进行插入和删除对象的操作。在实际的编程过程中,可以根据具体需要进行相应选择。,6.3.4集合(Set),Set中存放的对象不允许重复,没有顺序。Set接口的具体实现类有HashSet和TreeSet类。其中HashSet能快速定位一个元素,但是放到HashSet中的对象需要实现hashCode()方法。TreeSet将放入其中的元素按顺序存放,要求放入其中的对象是可排序的。,6.3.5映射(Map),Map提供了一种“键-值”对映射的方式存放对象。其中键和值也都可以是对象。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复。这就保证了键的唯一性,可以根据键对象快速定位值对象。对于值对象来说,则没有唯一性的要求,可以将任意多个键都映射到一个值对象上。Map接口的具体实现类有HashMap和TreeMap。其中HashMap也用到了哈希码的算法,以便快速查找一个键。TreeMap则是对键按序存放,要求放入其中的对象是可排序的。,6.4增强for循环,在J2SE5.0版本以后,Java语言为迭代集合和数组提供了增强的for循环。增强的for循环提供了一个简单、兼容的语法,采用for-each语句形式。增强for循环的语法格式如下所示。for(typeelementName:array|collection)其中,参数type表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论