面向对象程序设计实用教程 第十五章 基于Windows的面向对象语言Java_第1页
面向对象程序设计实用教程 第十五章 基于Windows的面向对象语言Java_第2页
面向对象程序设计实用教程 第十五章 基于Windows的面向对象语言Java_第3页
面向对象程序设计实用教程 第十五章 基于Windows的面向对象语言Java_第4页
面向对象程序设计实用教程 第十五章 基于Windows的面向对象语言Java_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

第十五章基于Windows的面向对象语言Java本章概要:自从1995年SUN公司推出了Java语言以来,Java以其纯面向对象、高性能、分布式、稳定性迅速风靡世界,特别是Java的跨平台性、安全性等特点使得其在电子商务、Internet网上数据库及多媒体等各个方面表现出强大的魅力。本章将结合实例介绍Java语言中的一些关键技术和主要概念。面向对象程序设计第二版讲义制作:北京信息工程学院信息与计算科学专业05141班曹硕本章快速索引面向对象程序设计第二版15.1Java语言的特点15.2Java语言简介15.3Java语言与C++语言的不同15.4JVM的概念与规范15.5Java语言的应用15.6小结15.1Java语言的特点

Java是目前最好的面向对象语言,主要表现在:⑴Java语言的封装性较强,因为Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。⑵多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法”表示。运算符重载(operatoroverload)一直被认为是一种优秀的多态机制体现,但由于考虑到它会使程序变得难以理解,所以Java最后还是把它取消了。⑶继承是指一个对象直接使用另一对象的属性和方法。与另外一些面向对象编程语言不同,Java只支持单一继承。面向对象程序设计第二版15.1Java语言的特点⒉Java的平台无关性

Java是与平台无关的语言。用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种情况: ⑴源代码级:如C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。 ⑵目标代码级:Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在硬件上实现。JVM是Java平台无关的基础,在JVM上,有一个Java解释器用来解释Java编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码。任何一台机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。面向对象程序设计第二版15.1Java语言的特点⒊

分布式

分布式包括数据分布和操作分布,Java支持客户机/服务器(C/S)计算模式,因此,它支持这两种分布性。数据分布是指数据可以分散在网络的不同主机上。Java提供了一个叫做URL的对象,利用这个对象,你可以打开并访问具有相同URL地址上的对象,访问方式与访问本地文件系统相同。操作分布是指把一个计算分散在不同主机上处理。Java的Applet小程序可以从服务器下载到客户端,即可以把部分计算放在客户端进行,提高系统执行效率。Java提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方便地实现Java的分布式特性。面向对象程序设计第二版15.1Java语言的特点⒋可靠性和安全性Java诞生在面向对象技术和网络编程技术逐渐走向成熟的时期,是比较晚期的一种新型编程语言,它虽然源于C++,但它消除了许多C++中的不可靠因素,同时也兼顾了网络安全方面的问题,表现出较高的可靠性和安全性:⑴Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠。⑵Java不支持指针,这杜绝了内存的非法访问。⑶Java的自动单元收集防止了内存丢失等动态内存分配导致的问题。⑷Java解释器运行时实施检查,可以发现数组和字符串访问的越界。⑸Java提供了异常处理机制,程序员可以把一组处理错误的代码放在一个地方,这样可以简化错误处理任务,便于恢复。⑹Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后,Java解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统。面向对象程序设计第二版15.1Java语言的特点⒌多线程

线程是操作系统的一种新概念,它又被称为轻量进程,是比传统进程更小的可并发执行的单位,是Windows多任务的一种形式。C++采用单线程体系结构,而Java却提供了多线程支持,体现在下面两个方面:⑴一方面,Java环境本身就是多线程的。若干个系统线程分别负责必要的无用单元回收,系统维护等系统级操作。⑵另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序的开发。利用Java的多线程编程接口,开发人员可以方便地写出支持多线程的应用程序,提高程序执行效率。注意,Java的多线程支持在一定程度上受运行时支持平台的限制。如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。面向对象程序设计第二版15.1Java语言的特点编译的语言是指一次性地把一个用高级语言编写的源程序翻译成可以运行的目标程序,以后翻译好的目标程序作为一个独立的文件可以无数次地运行。解释的语言是指对高级语言编写的源程序翻译一句执行一句,翻译和运行过程交叉进行,如果要再运行一次,那就必须重新翻译、重新执行,翻译完即执行完。这类语言最典型的例子是BASIC。

面向对象程序设计第二版15.1Java语言的特点⒍Java是半编译半解释的语言。一个Java语言源程序要运行,必须先由Java编译器编译成字节码。但这个编译过程是不彻底的,因为字节码不是最终的执行程序,不能在具体平台上运行,而必须再由运行系统上的字节码解释器将其翻译成机器语言。Java字节码解释器只占40KB的存储空间,它的工作是边解释边执行程序。面向对象程序设计第二版15.1Java语言的特点⒎Java语言的App1et功能及与此相关的图形功能Applet是Java特有的一种小应用程序。Java系统提供特殊的技术,可以使这种小应用程序的功能很方便地加入Internet的网页上去,从而使Internet网页增加各种图形效果,包括多媒体功能。正是Applet功能及跨平台功能使Java和Internet之间产生了成功的结合。面向对象程序设计第二版15.2Java语言介绍

15.2.1Java中类的定义Java中,定义一个类的语法是:[类的修饰字]class类名{

[成员访问权控制字]成员(数据或方法)}其中,类修饰字可以是abstract,final,public或者没有。在Java中,如果一个类没有说明其父类,就等于是继承了系统的Object这个类。也就是说,在Java中所有的类都可以视作是Object类的子类。面向对象程序设计第二版15.2.1Java中类的定义

类修饰字abstract:当一个类中出现了某个abstract方法,那么这个类之前也必须加上abstract修饰字。需要注意的是,一旦在类前面加上了这个修饰字,就不能直接产生属于这个类的对象(有关内容请参考相关资料)。

类修饰字final:如果一个类前面加上了final修饰字,那么这个类就不能被任何其他的类所继承。这个修饰字的特殊意义是可以避免已经写好的类程序,被别人继承以后修改。这也是Java语言为提高安全性而考虑的。

类修饰字public:如果一个类前面加上了public修饰字,那么这个类不仅可以被同一个程序包(package)中的其他类使用,而且其他程序包中的类也可以使用它。如果一个类没有public修饰字,则只有在同一个包中的类才可以使用它。另外,在一个文件中最多只能有一个类是public。要注意的是,一个类可以有两个以上的修饰字,但是,final和abstract两个修饰字不能同时拥有。面向对象程序设计第二版15.2.2Java类中的数据与方法和C++一样,在Java的类体也是由数据和方法组成的。⒈定义数据的语法数据成员是用来描述对象属性的。定义数据成员和C++相似,但是,在Java中允许在类中给数据成员赋初值,如果没有指定初值,系统会自动给予初值为0。例如:classMyclass{ intm=5,n; floatm-arr[]=newfloat[50]; Stringm-strs=“Java”;}面向对象程序设计第二版15.2.2Java类中的数据与方法⒉定义方法的语法方法是用来描述对象行为的。定义方法和C++相似,其一般格式:[方法修饰字]方法的返回值类型方法名(形参1,形参2,…){ //方法体}例如:classMyShow{ voidshow() {Systemoutptintln(“Java”);}//输出字符串Java intf-add(intx,inty){returnx+y;}}面向对象程序设计第二版15.2.2Java类中的数据与方法⒊

成员访问权限控制

和C++一样,在Java语言中,对每个类成员都进行了访问权的控制,使用的保留字也是public,protected和private。但是,有一种特殊情况要求读者注意,即在类成员前面没有任何修饰字(如前面的例子中),分类如下:⑴public(共有型)在Java语言中,如果一个数据成员或者方法前面加上了public,则允许所有的类访问,即既允许此成员所在的类访问,也允许同一个包中的其他类访问,还允许其他包中的类访问。(续)面向对象程序设计第二版⑵protected(保护型)在Java语言中,保护型成员允许被归属的类、由此类派生的子类以及同一包中的其他类访问。⑶private(私有型)在Java语言中,私有型成员只能被归属的类访问。⑷privateprotected(专用保护型)在Java语言中,成员前面同时冠以privateprotected修饰字,称为专用保护型成员,此类成员只允许它归属的类和由此类派生的子类访问。⑸默认型(成员前面没有任何修饰字)在Java语言中,成员前面没有冠以任何修饰字,称为默认型成员(也称友好型成员),此类成员除了允许它归属的类访问以外,还可以被同一个包中的其他类访问。15.2.2Java类中的数据与方法面向对象程序设计第二版15.2.3Java中的继承性Java语言中构造派生类的格式如下:[类修饰符]子类名extends超类类名{ //子类的成员}关键字extends表示子类是由该字后面的类派生而来的,超类(superclass),又称基类(baseclass)或父类(parentclass)。和C++一样,子类以数据成员和方法的形式继承其超类中属性和行为,子类可以只使用从超类中继承来的项,也可以覆盖或隐藏(Overridding)它,同时子类可以定义自己的类数据和方法,因此,沿着类族(classhierarchy)向下,类的功能变得越来越专用。相反,越向上类的功能就越小,但是,却越来越强地反映了类族的共性。面向对象程序设计第二版15.2.3Java中的继承性例如:publicclassA{ intx; voidshow(){Systemoutpintln(″Java-A″)};}publicclassBextendsA{ intx; voidshow(){Systemoutpintln(″Java-B″)}; voidf-add(inty){returnx+y+superx;}}

其中,是指超类中的x。如果子类的数据成员和超类中的数据成员同名,则称子类隐藏了父类的数据成员,这种情况下,子类直接使用的是它自己的数据成员,而不是父类中的同名数据成员,如上例rerurn中的x,有时为了更加清楚,则采用的形式。面向对象程序设计第二版15.2.4Java中的多态性在面向对象设计中,所谓调用对象的方法实际上是发送消息给对象,让对象来执行某个操作。由于面向对象中允许类之间的继承,同时允许子类中的方法覆盖(子类中的方法和父类中的方法的函数原型完全一致,但函数实现的功能不同,如上例中的show方法)超类中的方法,所以对象需要判断究竟应该使用哪一个方法。和C++不同,Java实现多态性不需要定义虚函数(Virtualfunction),这是系统自动实现的(即系统自动将函数设置成虚函数),如果不希望一个方法被设置成虚方法,那么可以在方法定义时加上修饰符final。面向对象程序设计第二版15.3Java语言与C++语言的不同

Java中对内存的分配是动态的,它采用面向对象的机制,采用运算符new为每个对象分配内存空间,而且,实际内存还会随程序运行情况而改变。程序运行过程中,Java系统自动对内存进行扫描,对长期不用的内存空间作为“垃圾”进行收集,使得系统资源得到更充分地利用。面向对象程序设计第二版15.3Java语言与C++语言的不同(2)⑵

Java不在所有类之外定义全局变量,而是在某个类中定义一种公用静态的变量来完成全局变量的功能。如:classMystaticVar{ publicstaticgloba1-var;};

在MystaticVar这个类中,定义了一个公用静态变量global-var,其他类可以访问或修改这个变量。所以,公用静态变量起到了全局变量的作用。由于进行了较好的封装,所以,避免了C++语言中由于全局变量不加封装而造成的不安全性。面向对象程序设计第二版15.3Java语言与C++语言的不同⑶Java不用goto语句,而用try...catch...final1y异常处理语句来代替goto语句处理出错的功能。⑷Java不支持头文件,而C++语言中都用头文件来定义类的原型、全局变量、库函数等。这种采用头文件的结构使得系统的运行维护相当繁杂。⑸

Java不支持宏定义,而用关键字final来定义常量;而在C++中有时采用宏定义来实现常量定义,这不利于程序可读性。

面向对象程序设计第二版15.3Java语言与C++语言的不同⑹Java对每种数据类型都分配固定长度。比如,在Java中,int总是32位的;而在C+中,对于不同的平台,同一个数据类型分配不同的字节数,同样是int,在不同的平台上分配的字节数有所不同(16位或32位),这对C++应用程序的移植性产生了影响,而Java不必考虑这个问题。⑺Java不使用指针,从而不存在程序员对指针进行编程的问题。总之,Java消除了C++麻烦的内存管理和一些复杂的构造(如多继承等)等问题,使得用Java开发程序比用C++开发程序更加容易、更加安全、更加可靠了。面向对象程序设计第二版15.4JVM的概念与规范⒈JVM的概念

Java虚拟机(JVM,JavaVirtualMachine)是一种假想的计算机。从结构上看,它由一组抽象的部件组成,这些部件包括:⑴指令集指令集采用独立于平台的字节码形式。⑵寄存器组寄存器组中包含程序计数器、堆栈指针、运行环境指针和变量指针。⑶类文件格式规定类文件也独立于平台。⑷堆栈堆栈用来传递参数和返回运行结果。⑸内存垃圾收集器垃圾收集器收集不再使用的内存片段。⑹存储区存储区用来存放字节码。面向对象程序设计第二版15.4JVM的概念与规范⒉JVM的规范只有符合JVM规范的计算机,才可以作为JVM来运行Java软件,所以,符合JVM规范的计算机就可以看成是一种Java平台。JVM的规范如下:⑴指令集规定了Java支持的基本数据类型,它们可以是:1字节、2字节、4字节、8字节,也包括浮点数。⑵JVM只设置了数量很少的寄存器,它们是程序计数器、堆栈栈顶指针、运行环境指针和局部变量指针。这些寄存器全是32位的。⑶JVM的程序代码放在文件中,这种文件称为类文件(.c1ass)。类文件是由编译器编译后的字节码构成的,所以也叫字节码文件,它与平台无关。面向对象程序设计第二版从结构上,类文件的内容可以分为四个部分:①第一部分是标志和版本信息部分,每个类文件都以CAFEBABE开头,这是类文件的标志,接着标明Java编译器的版本号。②第二部分称为常数池,常数池的前两个字节指出当前常数池中的表项数,接下来一个字节叫标签,它指出常数类型。其实,常数池是一系列常数组成的一个表,这些常数可能是字符串、域名、类名以及代码所引用的常数等。③第三部分是对程序中用到的类和方法的说明(有关类和方法将在后面讲述)。④第四部分是由字节码表示的程序主体。15.4JVM的概念与规范面向对象程序设计第二版⑷

JVM采用面向堆栈的机制,这为只设置少量寄存器建立了前提。在JVM中,许多指令的操作数来自堆栈,操作结果也放在堆栈中。⑸

Java的内存垃圾收集器通常是嵌入运行系统的一个附加程序。它的功能就是不断地对内存扫描,将那些不再使用的内存区域释放,使得它们成为可供后面程序使用的区域。⑹存储区是任何一种计算机都必须具备的,JVM也不例外。JVM的存储区用来存放字节码和各种表格,也为程序翻译和运行提供环境。15.4JVM的概念与规范面向对象程序设计第二版15.5Java语言的应用

Java的用户程序分为两类:1.一般形式的应用程序(Application)这类程序通过编译器编译以后,就可以由Java解释器边解释边执行,通常说的应用程序就是指这

温馨提示

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

评论

0/150

提交评论