面向对象程序设计-Java(第四版)课件 第1章 Java系统环境概述_第1页
面向对象程序设计-Java(第四版)课件 第1章 Java系统环境概述_第2页
面向对象程序设计-Java(第四版)课件 第1章 Java系统环境概述_第3页
面向对象程序设计-Java(第四版)课件 第1章 Java系统环境概述_第4页
面向对象程序设计-Java(第四版)课件 第1章 Java系统环境概述_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

Java程序设计

张白一

2021年8月编程语言排行榜

编程语言排行榜每月更新一次,来自于下面网站计算。

/tiobe-index/programming-languages-definition/

排行信息基于全球技术工程师、课程和第三方供应商的数量,流行的搜索引擎,如谷歌、必应、维基百科、亚马逊和百度等的统计。Java版本的更新我们使用的版本是2022年Java18版Java三大平台

1.JavaSE标准版:

JavaSE是Java平台标准版的简称(JavaPlatform,StandardEdition),适用于桌面系统,用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。JavaSE为JavaEE提供了基础。

2.JavaEE企业版:

JavaEE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持EJB,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。JavaSE标准版和JavaEE企业版的应用包括:

(1)Web应用:网络游戏、各类网站等。

(2)企业级应用:各种行业应用、企业信息化、电子政务等。涉及领域:办公自动化OA,客户关系管理CRM,人力资源HR,企业资源计划ERP、知识管理KM、供应链管理SCM、企业设备管理系统EAM、产品生命周期管理PLM、面向服务体系架构SOA、商业智能BI、项目管理PM、营销管理、流程管理WorkFlow、财务管理……等等几乎所有你能想到的应用。

(3)桌面系统。

3.JavaME微型版(J2ME,Java2PlatformMicroEdition)适用于小型设备和智能卡。

JavaME目前分为两类配置:

(1)面向小型移动设备的CLDC(ConnectedLimitedDeviceProfile)。嵌入式设备及消费类电子产品应用:无线手持设备、智能卡、通信终端、医疗设备、信息家电(如数字电视、机顶盒、电冰箱)、汽车电子设备等。

(2)面向功能更强大的移动设备如智能手机和机顶盒,称为CDC(ConnectedDeviceProfileCDC)。例如:手机上的Java应用程序和Java游戏、

1.1Java的发展历程

1.1.1Java的产生

1991年初,美国加州的Sun公司成立了一个以JamesGosling为首、名为Green的项目研发小组,其目标是开发一个面向家用电器市场的软件产品,用软件实现一个对家用电器进行集成控制的小型控制装置。要求这个产品具有高度的简洁性和安全性,而C++ 在这方面显然无法胜任。因此,Gosling决定自行开发一种新的语言,并将该语言命名为Oak(橡树)。

Oak是Green项目小组开发名为“*7”(StarSeven)产品中的一个组成部分。StarSeven是一个集成了Oak、GreenOS(一种操作系统)、用户接口模块和硬件模块四个部分的设备。第一个原型于1992年8月问世。尽管这个原型非常成功,但在竞争激烈的家用电器市场上却败给了竞争对手。失败的原因固然是多方面的,这与Sun公司的主业是计算机产品而不是家用电器产品这一因素密切相关。当时Internet上广为流行的WWW浏览器Mosaic1.0版,虽然内容丰富,声、图、文并茂,但它却是静态的,若想使它有动感,必须嵌入一种既安全可靠,又非常简练的语言。Oak完全能满足这一要求,但是要将它推向市场,为人们所广泛接受,还必须采用一种合适的策略。1994年,Sun公司的创始人之一BillJoy介入,促成Oak成为Java并得以走红。

BillJoy不仅指定Gosling继续完善Oak(发布时改名为Java),同时要求Naughton用Oak编写一个真正的应用程序——WebRunner,后被命名为HotJava的WWW浏览器。1994年底,两人均出色地完成了各自的任务。在这个产品的发布问题上,BillJoy力排众议,采取了“让用户免费使用来占领市场份额”的策略,促成了Java与HotJava于1995年初在Internet上的免费发布。由于Java是一种分布式、安全性高、内部包含编译器又非常小的适合网络开发环境的语言,因而一经发布,立即得到包括Netscape在内的各WWW厂商的广泛支持。工业界一致认为:“Java是(20世纪)80年代以来计算机界的一件大事。”微软总裁BillGates认为:“Java是长期以来最卓越的程序设计语言”。Java已成为最流行的网络编程语言。

由于Oak这个名称与其他产品的名称雷同,因此开发小组为这个新语言取了一个新名称——Java。据说研发小组成员经常在公司附近的一家咖啡厅喝咖啡,而咖啡的原产地是Java(爪哇),于是就将这一新语言取名为Java。1.1.2面向对象的语言Java编程语言的发展与“语言的鸿沟”的变化1.1.3面向对象的语言

面向对象的编程语言(Object-OrientedProgrammingLanguage,OOPL)的设计出发点是为了能更直接地描述问题域中客观存在的事物(即对象)以及它们之间的关系。面向对象技术追求的是软件系统对现实世界的直接模拟,是将现实世界中的事物直接映射到软件系统的解空间。它希望用户最大程度地利用软件系统,花费少量的编程时间来解决需要解决的问题。

在面向对象的程序设计语言中,可以把程序描述为:

程序 = 对象 + 消息把客观世界的这一事实映射到面向对象的程序设计语言中,则需把问题域中的事物抽象成对象,用一组数据描述该对象的静态特征(即属性,在Java中称之为数据成员),用一组方法来刻画该对象的动态特征(即行为)。

面向对象的语言对现实世界的直接模拟体现在下面几个方面:

(1)对象(object)。程序设计所面对的问题域——客观世界,客观世界是由一些具体的事物构成的,每个事物都具有自己的一组静态特征(属性)和一组动态特征(行为)。

例如:一辆汽车具有颜色、型号、马力、生产厂家等静态特征,也具有行驶、转弯、停车等动态特征。

(2)类(class)。客观世界中的事物既具有特殊性又具有共同性。人类认识客观世界的基本方法之一就是对事物进行分类,即根据事物的共同性把事物归结为某些类。考虑一下所有的汽车和一辆汽车之间的关系就很容易理解这一点。OOPL很自然地用类(class)来表示一组具有相同属性和方法的对象。

(3)继承(inheritance)。在同一类事物中,每个事物既具有同类的共同性,又具有自己的特殊性。OOPL用父类与子类的概念来描述这一事实。在父类中描述事物的共性,通过父类派生(derive)子类的机制来体现事物的个性。考虑同类事物中每个事物的特殊性时,可由这个父类派生子类,子类可以继承父类的共同性,又具有自己的特殊性。(4)封装(encapsulation)。客观世界中的事物是一个独立的整体,它的许多内部实现细节是外部所不关心的。例如,对于一个只管开车的驾驶员来说,他可能根本不知道他所驾驶的这辆汽车内部用了多少根螺钉以及它们是怎样组装的。OOPL用封装机制把对象的属性和方法结合为一个整体,并且屏蔽了对象的内部细节。

(5)关联(association)。客观世界中的一个事物可能与其他事物之间存在某种行为上的联系。例如,一辆行驶中的汽车遇到红色信号灯时要刹车停止,OOPL便通过消息连接来表示对象之间的这种动态联系,也称之为关联。

(6)组合体(composite)。拥有其他对象的对象被称为组合体。客观世界中较为复杂的事物往往是由其他一些比较简单的事物构成的。例如,一辆自行车是由车架、车轮、把手等构件构成的。OOPL也提供了描述这种组合体的功能。

综上所述,面向对象的编程语言使程序能够比较直接地反映客观世界的本来面目,并且使软件开发人员能够运用人类认识事物所采用的一般思维方法来进行软件开发。1.2Java的特性

Sun公司对Java的定义是:Java是一种具有“简单、面向对象的、分布式、解释型、健壮、安全、与体系结构无关、可移植、高性能、多线程和动态执行”等特性的语言。

1.简单性

Java语言简单而高效,基本Java系统(包含编译器和解释器)所占空间只有250KB左右。语言风格类似于C++,保留了C++ 语言的优点;摈弃了C++ 中不安全且容易引发程序错误的指针;消除了C++ 中可能给软件开发、实现和维护带来麻烦的地方,包括其冗余、二义性和存在安全隐患之处,如操作符重载、多重继承和数据类型自动转换等;简化了内存管理和文件管理——Java提供了C++ 中不具备的自动内存垃圾搜集机制,从而减轻了编程人员进行内存管理的负担,有助于减少软件错误。Java的简单性是以增加运行时系统的复杂性为代价的。以内存管理为例,自动内存垃圾处理减轻了面向对象编程的负担,但Java运行时系统却必须内嵌一个内存管理模块。。

2.面向对象

Java语言是纯面向对象的,它的设计集中于对象及其接口,提供了简单的类机制以及动态的接口模型。对象中封装了它的属性和行为,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。

3.可移植性(平台无关性)

程序的可移植性指一次编写,到处运行的特性。可移植性分为两个层次:源代码级可移植性和二进制代码级可移植性。C和C++ 只具有一定程度的源代码级可移植性,其源程序要想在不同平台上运行,必须重新编译。而Java不仅是源代码级可移植的,甚至经过编译之后形成的二进制代码——字节码,也同样是可移植的。

Java采用了多种机制来保证可移植性,其中最主要的有两条:

第一,Java既是编译型的,又是解释型的。第二,Java采用的是基于国际标准——IEEE标准的数据类型。Java的数据类型在任何机器上都是一致的,它不支持特定于具体的硬件环境的数据类型。它还规定同一种数据类型在所有实现中必须占据相同的空间大小(C++ 的数据类型在不同的硬件环境或操作系统下占据的内存空间是不同的)。通过在数据类型的空间大小方面采用统一标准,Java成功地保证了其程序的平台独立性。此外,Java的可移植性还体现在Java的运行环境上。Java编译器是用Java语言本身编写的,而其他编程语言运行的环境则是用ANSIC(美国标准C语言)编写的,Java的整个运行环境体现了一个定义良好的可移植性接口。Java语言规范还遵循POSIX(可移植操作系统接口)标准,这也是Java具有良好可移植性的重要原因。4.高性能

一般情况下,可移植性、稳定性和安全性几乎总是以牺牲性能为代价的,解释型语言的执行效率一般也要低于直接执行源码的速度。但Java所采用的措施却很好地弥补了这些性能差距。这些措施包括:

(1)高效的字节码。Java字节码格式的设计充分考虑了性能因素,其字节码的格式非常简单,这使得经由Java解释器解释执行后可产生高效的机器码。Java编译器生成的字节码和机器码的执行效率相差无几。据统计,Java字节码的执行效率非常接近于由C和C++生成的机器码的执行效率。

(2)多线程。C和C++ 采用的是单线程的体系结构,均未提供对多线程的语言级支持。Java却提供了完全意义的多线程支持。

Java的多线程支持体现在两个方面:首先,Java环境本身就是多线程的,它可以利用系统的空闲时间来执行诸如必要的垃圾清除和一般性的系统维护等操作;其次,Java还提供了对多线程的语言级支持,利用Java的多线程编程接口,编程人员可以很方便地编写出支持多线程的应用程序,提高程序的执行效率。必须注意的是,Java的多线程支持在一定程度上可能会受其运行时支撑平台的限制,并且依赖于其他一些与平台相关的特性。比方说,如果操作系统本身不支持多线程,Java的多线程就可能只是“受限”的或不完全的多线程。(3)及时编译和嵌入C代码。Java的运行环境还提供了另外两种可选的性能提高措施:及时编译和嵌入C代码。及时编译是指在运行时把字节码编译成机器码,这意味着代码仍然是可移植的,但在开始时会有一个编译字节码的延迟过程。嵌入C代码在运行速度方面效果当然是最理想的,但会给编程人员带来额外的负担,同时将降低代码的可移植性。5.分布式

分布的概念包括数据分布和操作分布两个方面。数据分布是指数据可以分散存放于网络上不同的主机中,以解决海量数据的存储问题;操作分布则是指把计算分散到不同的主机上进行处理,这就如同由许多人协作共同完成一项大而复杂的工作一样。

Java是面向网络的语言。它拥有广泛的能轻易地处理TCP/IP协议的运行库,例如HTTP与FTP类库等等。这使得在Java中比在C或C++ 中更容易建立网络连接。对于数据分布,Java应用程序可以利用URL通过网络开启和存取对象,就如同存取一个本地文件系统一样简单。

对于操作分布,Java的客户机/服务器模式可以把计算从服务器分散到客户端,从而提高整个系统的执行效率,避免瓶颈制约,增加动态可扩充性。6.动态特性

多数面向对象程序设计语言在系统设计和编程阶段都能充分体现OO思想,但却很难将其延伸到系统运行和维护阶段。这主要是因为多数语言都采用静态链接机制。一个系统是由多个模块组成的,若采用静态链接机制,则在编译时就会将系统的各模块和类链接组合成一个整体,即一个目标文件。如果某个类进行了修改,则整个系统就必须重新编译,这对大型分布式系统(例如,交通信息处理系统、金融机构信息处理系统等)的修改、维护或升级是不利的。如何在系统运行阶段动态地进行系统的修改或升级便成为迫切需要解决的问题。

Java采用“滞后联编”机制,即动态链接机制,解决了上述问题。Java的“滞后联编”技术将OO特点延伸到系统的运行阶段。Java程序的基本组成单位是类,若一个系统是由多个类模块组成的,则编译时每个类被分别编译成相应的类文件,即字节码文件。一个字节码系统由若干个字节码文件组成,使得系统的类模块性得以保留。在系统运行时,字节码文件按程序运行的需要而动态装载(也可以通过网络来载入)。因此,如果在一个系统中修改了某一个类,只需要对此类重新编译,而系统中的其他类不必重新编译。这就保证了系统在运行阶段可以动态地进行类或类库的修改或升级。“滞后联编”机制使得Java程序能够适应不断变化的运行环境,使用户能够真正拥有“即插即用”(plug-and-play)的软件模块功能。

7.健壮性和安全性

Java设计的目的是用于网络/分布式计算环境。为此,Java提供了一系列安全检查机制,使得Java更具健壮性和安全性。Java的安全检查机制分为多级,主要包括Java语言本身的安全性设计、严格的编译检查、运行检查和网络接口级的安全检查等。

(1) Java语言本身的安全性设计

a.不支持窄化类型转换

C++ 支持窄化类型转换,面临信息丢失的危险。

例如,floath=23.89;inti=h

Java不支持窄化类型转换,如需要必须显式地进行类型转换。

例如,floath=23.89;inti=(int)h

b.不支持指针数据类型

C++ 语言支持指针数据类型。病毒利用指针可以进入操作系统的内存空间。

Java语言不支持指针数据类型,一切对内存的访问都必须通过对象的实例变量来实现,从而杜绝了内存的非法访问。

c.数组下标越界检查机制

C和C++ 语言不提供的数组下标越界检查机制。

Java提供数组下标越界检查机制,使得网络“黑客”们无法构造指针访问。

Java通过类型检查、Null指针检测、数组边界检测等方法,可以在开发的早期发现程序中的错误。

d.完善的异常处理机制

Java语言中通过提供异常处理机制来解决异常的处理问题,简化了异常处理任务,增强了程序的可读性和系统容错能力。

e.自动内存垃圾收集机制

C++ 程序缺乏自动的内存管理机制,在C++ 中,必须手工分配、释放所有的动态内存。如果忘记释放原来分配的内存,或是释放了其他程序正在使用的内存,就会出错。

Java提供垃圾收集器,可自动收集闲置对象占用的内存。(2)编译检查

Java编译器对所有的表达式和参数都要进行类型相容性的检查,以确保类型是兼容的。Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时不匹配问题的出现。在编译期间,Java编译器并不分配内存,而是推迟到运行时由解释器决定,这样编程人员就无法通过指针来非法访问内存。(3)运行检查

运行期间,Java的运行环境提供了字节码校验器、运行时内存布局、类装载器和文件访问限制四级安全保障机制。

a.字节码校验器。Java字节码进入解释器时,即使Java编译器生成的是完全正确的字节码,为了防止正确的字节码在解释执行前可能被改动,解释器也必须再次对其进行检查。

b.运行时内存布局和类装载器。Java解释器将决定程序中类的内存布局,“黑客”们将无法预先得知一个类的内存布局结构,从而也就无法利用该信息来破坏系统。类装载器负责把来自网络的类装载到其单独的内存区域,避免应用程序之间的相互干扰或破坏。

c.文件访问限制。客户机端可以限制网络上装载的类只能访问某些允许的文件系统。

(4)网络接口级的安全检查

在网络接口级,用户可按自己的需要来设置网络访问权限。

1.3Java的开发运行环境

目前有许多为快速开发Java程序提供的集成开发环境(IDE),它们将编辑、编译、构造、调试和在线帮助集成在一个用户图形界面中,有效地提高了编程速度。IDE排行榜本课选用Eclipse作为开发工具。在此环境下开发Java应用程序,需要下载两个软件:

1.JDKjdk-18_windows-x64_bin

在oracle网站/downloads/

下载:

点击Java点击点击

点击点击2.下载eclipse/downloads/进入一个捐款页面,不用理它,等5秒钟左右会弹出下载的界面,下载到你的文件夹下。点击

该版本是eclipse最基础的版本,适合JavaSE个人开发者、或希望根据自己需求配置插件的开发者使用1.3.1安装

1.安装JDKjdk-18_windows-x64_bin

该版本安装完成之后环境变量已经自动配置

2.在键盘上按+r组合键启动“运行”程序。

3.在“打开”文本框中输入“cmd”之后进入dos命令

4.在窗口输入“java-version”之后就会看到下图内容:

说明此时java已经完成环境变量配置,不需要再进行配置了。

5.安装Eclipse。安装只需要下载压缩包,解压完毕后即可使用,进入文件夹,红线是eclipse的启动程序

1.3.2运行Eclipse

双击启动程序出现,第一次打开需要设置工作环境,可以指定工作目录,或者使用默认的C盘工作目录,点击Launch按钮。

关闭左上角“Welcome”按钮出现此界面,表明Eclipse集成开发环境启动成功。学习创建建立JAVA项目,运行第一个Java程序。即“ch1”文件夹中的例子。

1.4Java程序的运行步骤

1.4.1Java应用程序的建立及运行

Java应用程序的建立及运行可分为下述三个步骤:

(1)在EclipseIDE中创建一个工程

(2)建立Java源程序文件

(3)编译运行Java源程序

【示例程序C1_1.java】编写一个输出字符串“MyfirstJavaApplication!”的Application程序。

packagech1;

publicclassC1_1

{publicstaticvoidmain(Stringargs[ ])

{System.out.println(“MyfirstJavaApplication!”);}

}

1.创建一个IDE项目

启动EclipseIDE后,

①单击图1.8所示菜单栏中的“file”(文件)选项;

②弹出“New”依次选择“JavaProject”文件夹;

③弹出如图1.9所示,创建ch1工程;

④如图1.10,在ch1工程上单击右键,创建C1_1类,如图1.11,1.12;

⑤图1.13是创建好的C1_1类

图1.8建立一个项目的操作界面图1.9“NewJavaProject”工程图1.10建好ch1工程图1.11创建类图1.12创建C1_1类图1.13创建好C1_1类

2.建立JavaApplication源程序

本例建立的C1_1.java源程序如图1.15所示。

图1.15C1_1.java源程序3.编译运行JavaApplication源程序

图1.16第一种运行方式第一种运行方式图1.17在写程序框中单击右键选择“JavaApplication”第二种运行方式图1.18程序C1_1的运行结果运行结果

4.程序分析

(1) packagech1这一行定义了一个名为ch1的包。注意:这个包名就是我们建立的项目名,同时它也是一个文件夹名。在这个包中,系统会自动创建几个文件夹,并将我们建立的源程序文件C1_1.java存放在ch1文件夹下。

(2) publicclassC1_1这一行声明此程序要创建一个名为C1_1的类。public指出这个类是公共类,而这个类定义的内容就在后面紧跟的花括号内。

任何Java程序都必须以类的形式出现,一个程序中可以定义若干个类,但只能定义一个public类。定义类必须用关键字class作为标志。如果在一个程序中只定义了一个public类,那么这个类名也一定是文件名,否则编译会出错。

(3) publicstaticvoidmain(String[ ]args)表明这是C1_1类的main主方法。在Java编程中,每一个应用程序都必须包含一个main主方法,当程序执行时,解释器会找主方法,它是程序的入口点,若无此方法,解释器会显示错误信息。在定义main方法时publicstaticvoid不可缺少,String[ ]args是传递给main方法的参数(见第7章),其中String是参数的类型,args是参数名(可自定义)。main后面紧跟的花括号是main方法的实现内容。本例中只含一条语句:

System.out.println("MyfirstJavaApplication!");此语句的功能是使用JAVAAPI的System.out.println( )方法把消息“MyfirstJavaApplication!”发送到标准输出设备

温馨提示

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

评论

0/150

提交评论