天津职业技术师范大学1面向WEB的JAVA语言程序设计天津职业技术师范大学2019年4月11日天津职业技术师范大学第2章类与数组1抽象、封装与类1.1抽象与封装1.2Java的类1.3类的修饰符1.4域1.5方法1.6访问控制符2数组对象天津职业技术师范大学概念面向对象面向对象编程也叫做OOP(ObjectOrientedProgramming),它是一种创建计算机程序的方法,是新一代的程序开发模式。它模拟显示世界的事物,把软件系统抽象成各种对象的集合,以对象为最小系统单位,这更接近于人类的自然思维,给程序开发人员更灵活的思维空间,使得开发大型复杂业务程序所用的代码量更小,并且成本更低、效率更高而且运行得更加健壮。天津职业技术师范大学概念对象在面向对象编程模式出现之前,开发程序传统的采用过程化的编程方式,即将程序考虑成一个顺序执行的指令串。所以采用过程化开发方式的程序员首先要做的事,就是针对需求,自顶向下、逐步细化,将问题分解成一连串的简单步骤。天津职业技术师范大学概念类在现实世界中,会经常发现许多单独的对象都是同一类型。例如,也许有成千上万的单个的自行车存在,它们都是同样地模型,以相同的方式被制造。每一个自行车都是构建于同一模板并因此包含同样的组件。在面向对象术语中,就可以说,某个人的具体的自行车是自行车这个对象类的一个实例。一个类就是一个模板,从它那里个体对象被创建。天津职业技术师范大学概念继承不同类型的对象,相互之间经常有一定数量的共同点。例如,吉普车,小轿车,卡车,都共享汽车的特性。同时,每一个对象还定义了额外的特性使得它们与众不同。例如吉普车的底盘高度;小轿车的载人量;而卡车有额外的载重量。天津职业技术师范大学1.1抽象与封装1.1.1抽象抽象是科学研究中经常使用的一种方法,即去除掉被研究对象中与主旨无关的次要部分,或是暂时不予考虑的部分,而仅仅抽取出与研究工作有关的实质性的内容加以考察。在计算机技术的软件开发方法中所使用的抽象有两类:一类是过程抽象,另一类是数据抽象。天津职业技术师范大学过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤。面向过程的软件开发方法采用的就是这种抽象方法。使用过程抽象有利于控制、降低整个程序的复杂度,但是这种方法本身自由度较大,难于规范化和标准化,操作起来有一定难度,在质量上不易保证。数据抽象是与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型既包含了数据,也包含了针对这些数据的授权操作,是相对于过程抽象更为严格、也更为合理的抽象方法。天津职业技术师范大学面向对象的软件开发方法的主要特点之一,就是采用了数据抽象的方法来构建程序的类、对象和方法。实际上,所讲的面向对象软件开发过程中的面向对象的分析,就是对实际问题进行抽象,从而建立物理模型的过程。在面向对象技术中使用这种数据抽象方法,一方面可以去除掉与核心问题无关的细枝末节,使开发工作可以集中在比较关键、主要的部分;另一方面,在数据抽象过程中对数据和操作的分析、辨别和定义可以帮助开发人员对整个问题有更深入、准确的认识。最后抽象形成的抽象数据类型,则是进一步设计、编程的基础和依据。天津职业技术师范大学比如,要处理一个有关银行日常业务的问题,最核心的问题就是所有的资金、账目往来。根据与此核心问题有关的操作,就可以建立一个表示账户的抽象数据类型,作为考察的重点。而银行的其他业务和日常工作,则不在此列。相反,如果面对的是一个旨在提高银行服务水平和工作效率的综合管理系统,那么上述几项被第一个系统忽略的工作就应该成为第二个系统的抽象数据类型中的一部分。抽象可以帮助人们明确工作的重点,理清问题的脉络。面向对象的软件开发方法能够游刃有余地处理大规模、高复杂度的系统,也离不开这个特性发挥的重要作用。天津职业技术师范大学1.1.2封装面向对象方法的封装特性是一个与其抽象特性密切相关的特性。具体地,封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流和交互。天津职业技术师范大学在面向对象的程序设计中,抽象数据类型是用“类”这种面向对象工具可理解和操纵的结构来代表的,每个类里都封装了相关的数据和操作。在实际的开发过程中,类多用来构建系统内部的模块,由于封装特性把类内的数据保护得很严密,模块与模块间仅通过严格控制的界面进行交互,使它们之间耦合和交叉大大减少,从而降低了开发过程的复杂性,提高了效率和质量,减少了可能的错误,同时也保证了程序中数据的完整性和安全性。天津职业技术师范大学例如,在银行日常业务模拟系统中,账户这个抽象数据类型把账户金额和交易情况封装在类的内部,系统的其他部分没有办法直接获取或改变这些关键数据,只有通过调用类内的方法才能做到。如调用查看余额的方法来获知账户的金额,调用存取款的方法来改变金额。只要给这些方法设置严格的访问权限,就可以保证只有被授权的其他抽象数据类型才可以执行这些操作,影响当前类的状态。这样,就保证了数据的安全和系统的严密。天津职业技术师范大学面向对象技术的这种封装特性还有另一个重要意义,就是使抽象数据类型,即类或模块的可重用性大为提高。封装使得抽象数据类型对内成为一个结构完整、可自我管理、自我平衡、高度集中的整体;对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的有机的单元。这样的有机单元特别有利于构建、开发大型标准化的应用软件系统,可以大幅度地提高生产效率,缩短开发周期和降低各种费用。例如,在“银行日常业务系统”中使用的抽象数据类型“账户”,如果设计合理的话,就可以直接应用在业务性质相似的“保险公司投保理赔管理系统”或“邮政储蓄业务系统”中。封装特性的这个优点目前已经越来越为广大的开发人员所重视。天津职业技术师范大学1.2Java的类如前所述,抽象和封装这两个面向对象程序设计的重要特点主要体现在类的定义与使用上,本节将讨论如何定义Java中的类。1.2.1系统定义的类Java程序设计就是定义类的过程,但是Java程序中定义的类的数目和功能都是有限的,编程时还需要用到大量的系统定义好的类,即Java类库中的类。天津职业技术师范大学类库是Java语言的重要组成部分。Java语言由语法规则和类库两部分组成,语法规则确定Java程序的书写规范;类库,或称为运行时库,则提供了Java程序与运行它的系统软件(Java虚拟机)之间的接口。Java类库是一组由其他开发人员或软件供应商编写好的Java程序模块,每个模块通常对应一种特定的基本功能和任务,这样当自己编写的Java程序需要完成其中某一功能的时候,就可以直接利用这些现成的类库,而不需要一切从头编写。所以,学习Java语言程序设计,也相应地要把注意力集中在两个方面:一是学习其语法规则,例如前面提到的基本数据类型、基本运算和基本语句等,这是编写Java程序的基本功;另一个是学习使用类库,这是提高编程效率和质量的必由之路。天津职业技术师范大学这些系统定义好的类根据实现的功能不同,可以划分成不同的集合。每个集合是一个包,合称为类库。Java的类库是系统提供的已实现的标准类的集合,是Java编程的API(applicationprograminterface),它可以帮助开发者方便、快捷地开发Java程序。Java的类库大部分是由它的发明者SUN公司提供的。这些类库称为基础类库(JFC),也有少量则是由其他软件开发商以商品形式提供的。由于Java语言诞生的时间不长,还处于不断发展、完善的阶段,所以Java的类库也在不停地扩充和修改,前后有1-6等多个几个版本,几个版本的主要内容相同,但也有一定差别。天津职业技术师范大学根据功能的不同,Java的类库被划分为若干个不同的包,每个包中都有若干个具有特定功能和相互关系的类和接口。下面列出了一些经常使用的包。1.java.lang包java.lang包是Java语言的核心类库,包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。每个Java程序运行时,系统都会自动地引入java.lang包,所以这个包的加载是缺省的。天津职业技术师范大学2.java.io包java.io包是Java语言的标准输入/输出类库,包含了实现Java程序与操作系统、用户界面以及其他Java程序做数据交换所使用的类,如基本输入/输出流、文件输入/输出流、过滤输入/输出流、管道输入/输出流、随机输入/输出流等。凡是需要完成与操作系统有关的较底层的输入输出操作的Java程序,都要用到java.io包。3.java.util包java.util包包括了Java语言中的一些低级的实用工具,如处理时间的Date类,处理变长数组的Vector类,实现栈和杂凑表的Stack类和HashTable类等,使用它们开发者可以更方便快捷地编程。天津职业技术师范大学4.java.awt包java.awt包是Java语言用来构建图形用户界面(GUI)的类库,它包括了许多界面元素和资源,主要在三个方面提供界面设计支持:低级绘图操作,如Graphics类等;图形界面组件和布局管理,如Checkbox类、Container类、LayoutManager接口等;以及界面用户交互控制和事件响应,如Event类。利用java.awt包,开发人员可以很方便地编写出美观、方便、标准化的应用程序界面。5.java.awt.image包java.awt.image包是用来处理和操纵来自于网上的图片的Java工具类库。天津职业技术师范大学6.java.awt.peer包java.awt.peer包很少在程序中直接用到,它的作用是使得同一个Java程序在不同的软硬件平台上运行时,具有基本相同的用户界面。java.awt.peer包是程序代码与平台之间的中介,它将不同的平台包裹、隐藏起来,使这些平台在用户程序面前呈现相同的面貌。java.awt.peer包是实现Java语言跨平台特性的手段之一。7.java.applet包java.applet包是用来实现运行于Internet浏览器中的JavaApplet的工具类库,它仅包含少量几个接口和一个非常有用的类:java.applet.Applet。天津职业技术师范大学8.java包java包是Java语言用来实现网络功能的类库。由于Java语言还在不停地发展和扩充,它的功能,尤其是网络功能,也在不断地扩充。目前已经实现的Java网络功能主要有:底层的网络通信,如实现套接字通信的Socket类、ServerSocket类;编写用户自己的Telnet、FTP、邮件服务等实现网上通信的类;用于访问Internet上资源和进行CGI网关调用的类,如URL等。利用java包中的类,开发者可以编写自己的具有网络功能的程序。天津职业技术师范大学9.java.corba包和java.corba.orb包这两个包将CORBA(commonobjectrequestbrokerarchitecture,是一种标准化接口体系)嵌入到Java环境中,使得Java程序可以存取、调用CORBA对象,并与CORBA对象共同工作。这样,Java程序就可以方便、动态地利用已经存在的由Java或其他面向对象语言开发的部件,简化软件的开发。10.java.lang.reflect包java.lang.reflect包提供了用于反射对象的工具,反射允许程序监视一个正在运行的对象并获得它的构造函数、方法和属性。天津职业技术师范大学11.java.rmi包、java.rmi.registry包和java.rmi.server包这三个包用来实现RMI(remotemethodinvocation,远程方法调用)功能。利用RMI功能,用户程序可以在远程计算机(服务器)上创建对象,并在本地计算机(客户机)上使用这个对象。