1、JAVA 程序设计,课程的性质、任务 本课程是软件、网络技术专业的一门专业基础课程,是该专业理论与实践紧密结合的一门必修课,课程的任务是使学生掌握Java程序设计语言,理解面向对象的程序设计的思路和方法。培养学生的编程能力。本课程的主要知识点群包括面向对象技术、异常处理、多线程、输入输出流、图形用户界面(GUI)设计、Applet开发、网络通信以及数据库使用等。,第1讲 基本要求 了解Java的发展历史及基本特点 掌握Java虚拟机的概念 掌握Java2 SDK的开发环境的建立 掌握 Java Applet, Java Application的Java应用种类及运行操作,第1章 Java语言概
2、述,1.1 Java的发展历史 1.2 Java的特点 1.3 Java程序的开发过程与运行环境 实训一 安装与熟悉Java开发工具 习题一,1.1 Java的发展历史,1.1.1 Java的产生 1995年5月,Sun公司在“SunWorld95”大会上推出了Java语言。Java语言作为一种网络编程语言,随着国际互联网的飞速发展,很快得到了广泛的支持和实际的应用。,了解内容:Java语言最初并不是为互联网设计的,它来自于Sun公司的一个叫“Green”的项目,目的是为家用消费电子产品开发一个分布式代码系统,这样用户可以把E-mail发给电冰箱、电视机等家用电器,对它们进行控制和信息交流。该
3、项目小组开始准备采用C+,但他们很快意识到C+太复杂,安全性差,最后基于C+开发了一种新的语言Oak(Java的前身)。,Oak是一种用于网络的精巧而安全的语言,Sun公司曾以此投标一个交互式电视项目,但败于SGI,使得Oak几乎夭折。Mark Ardreesen开发的Mosaic和Netscape启发了Oak项目组成员,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官Scott McNealy的支持,Java得以进军互联网。 目前通常所说的Java有三层含义:首先是指一种编程语言;其次是一种开发环境;再者是一种应用环境。,1.1.2 Java的现状 Java作为新一代面向
4、对象的程序设计语言,特别适合于Internet应用程序开发,它的平台无关性使Java作为软件开发的一种革命性技术地位已被确立。计算机产业的许多大公司购买了Java的许可证,包括IBM、Microsoft、Apple、Oracle等。Java开发工具软件日渐丰富,如Borland公司的JBuilder、Sun公司的JavaWorkshop、IBM的VisualAge、微软公司的Visual J+。数据库厂商如Sybase、Versant、Oracle都在开发CGI接口,支持HTML和Java。,按照Java的应用领域,Sun公司将Java分为三个版本: (1) J2SE(Java 2 Platf
5、orm,Standard Edition)。J2SE含有基本的Java2 SDK工具和运行时API,开发者可以用来编写、部署和运行Java应用程序以及Applet(在Web浏览器(如IE)中运行的Java小程序)。,(2) J2EE(Java 2 Platform,Enterprise Edition)。J2EE建立在J2SE的基础上,它是JSP(Java Server Page)、Servlet、EJB、JTS(Java Transaction Service)、Java mail以及JMS(Java Message Service)等多项技术的混合体,主要用于开发分布式、服务器端多层结构的
6、应用系统,如电子商务网站。 (3) J2ME(Java 2 Platform,Micro Edition)。它主要用于开发电子产品,如移动电话、数字机顶盒、汽车导航系统等。,1.2 Java 的 特 点,Java语言从诞生到得到很广泛的应用,只经过了短短的几年,这与它的特点是分不开的。Java作者写了一个非常有影响的“白皮书”,来解释设计目标和已取得的成果。“白皮书”是按下列11个特征来定义的:, 简单的; 面向对象的; 分布式的; 健壮的(Robust); 安全的; 中立结构的; 可移植的; 解释型的; 高效的; 多线程的; 动态的。,图1.1 Java的平台无关性,Java编译器产生的二进
7、制代码称为字节码(Byte Code),字节码与任何具体计算机结构都无关。实际上,这并不是一个新想法,多年前的UCSD Pascal系统就在一个商业产品中做了同样的努力,不过,Java解决了这种技术存在的一个主要缺点,即与通常高级语言采用的编译为机器指令相比,采用这种方式程序执行效率相差很多。,同体系结构无关的特性使得Java应用程序可以在配备了Java虚拟机的任何计算机系统上运行,这成为Java应用软件便于移植的良好基础。 另外,Java系统的基本数据类型不依赖于具体实现,在任何硬件平台上均保持一致。而通常的高级语言数据类型是与平台相关的,如C语言在Windows 3.1中整数(int)为1
8、6位,在Windows 95中整数为32位,在DECAlpha中整数为64位,在Intel486中整数为32位。,1.2.2 面向对象 面向对象可以说是Java最重要的特性,Java语言的设计完全是面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。Java支持静态和动态风格的代码继承及重用。,Java语言程序的基本单位是类class,一个完整的Java语言程序一般由多个类构成。Java语言运行环境还提供了功能强大的类库(或称为应用程序接口API),可以帮助应用程序很容易地实现一些复杂的功能。 有关面向对象方法的基本概念将在第3章介绍。,1.2.3 简单 Java语言的简单性主要体现在
9、以下三个方面: (1) Java的风格类似于C+,因而C+程序员是非常熟悉的。从某种意义上讲,Java语言是C及C+语言的一个变种,因此,C+程序员可以很快掌握Java编程技术。 (2) Java摒弃了C+中容易引发程序错误的地方,如指针、内存管理、运算符重载等。 (3) Java提供了丰富的类库。,1.2.4 分布式 Java包括一个支持HTTP和FTP等基于TCP/IP协议的类库。因此,Java应用程序访问网络上的对象很容易,其访问方式与访问本地文件系统几乎完全相同。为分布环境尤其是Internet提供动态内容无疑是一项非常宏伟的任务,但Java的语法特性却使得程序员可以很容易地实现这项目
10、标。,1.2.5 健壮 Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自已操纵内存,减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能。这些功能特征大大缩短了开发Java应用程序的周期。Java提供null指针检测、数组边界检测、异常出口和字节代码校验。,1.2.6 安全 Java的安全性可从两个方面得到保证:一方面,在Java语言里,指针和释放内存等C+功能被删除,避免了非法内存操作;另一方面,当用Java来创建浏览器时,语言功能和浏览器本身提供的功能会结合起来,使它更安全。,1.2.1 结构中立Java语言编译器产生的二进制
11、代码是一种与具体机器指令无关的指令集合,只要有Java运行时系统存在,编译后的代码便可在许多处理器上运行。Java运行时系统被称为Java虚拟机(Java Virtual Machine,JVM),Java编译器产生的代码由Java虚拟机解释执行,如图1.1所示。由此,Java语言实现了平台独立性,“一次编写,随处运行(Write once,Run anywhere)”。,Java语言程序在机器上执行前,要经过多次测试。它经过代码校验,检查代码段的格式,检测指针操作、对象操作是否错误等。如果字节码通过代码校验后,没有返回错误,则表示代码没有堆栈上溢出和下溢出,所有操作代码参数类型都是正确的,没
12、有发生非法数据转换,如将整数转换成指针,访问对象操作是合法的。,通过校验的代码由类装载器(ClassLoader)装载执行。类装载器通过将本机类与网络资源类的名称分开来保持安全性。因为装入类时要经过检查,所以避免了特洛伊木马现象的出现。,1.2.7 多线程 Java提供的多线程功能使得在一个程序里可同时执行多个小任务。多线程带来的更大的好处是更好的交互性能和实时控制性能。 Java是第一个支持多线程的程序设计语言,而传统的程序设计语言要实现多线程必须调用操作系统提供的有关编程接口。当然,Java虚拟机本身并不实现多线程机制,多线程的实现最终还取决于系统本身(UNIX、Windows等),,1.
13、3 Java程序的开发过程与运行环境,1.3.1 Java程序的开发过程 Java程序的开发过程与其他高级语言相似。首先编写程序,然后采用文本编辑软件输入源程序,再使用Java语言编译器进行编译,生成字节码文件。Java虚拟机直接执行字节码文件,没有连接生成独立的可执行文件的过程,Java类库代码也不像C/C+的函数库或类库那样需要连接到执行文件中去。,Java语言最基本的开发环境是由Sun公司免费提供的JDK(Java Development Kit),它的开发环境比较简单,使用命令行编译源代码,编译调试程序都不是很方便。 Java语言的集成开发工具,集源代码的编辑、编译以及调试于一体,而且
14、这些开发工具可以帮助程序员生成应用程序框架,减少程序员的重复劳动,提高软件开发的效率。常见的集成开发工具有Microsoft公司的Visual J+、Borland公司的Jbuilder、IBM公司的VisualAge for Java等。,1.3.2 Application与Applet Java程序主要有Java应用程序(Java Application)和Applet两种。下面首先给出两个最简单的Java程序,从中可以了解Java语言程序的基本结构。 【程序1.1】 最简单的Java应用程序。,/* HelloWorldApp.java */class HelloWorldApp pub
15、lic static void main (String args) / 输出到标准输出设备 System.out.println(Hello World!); ,程序1.1是一个Java Application,它的功能很简单,向标准输出设备输出字符串“Hello World!”,运行该程序后可以在显示器上看到该字符串。 从程序1.1中首先看到的是注释语句,Java语言的注释语句与C/C+语言中的注释语句类似,有两种基本形式: (1) 以/*开始,以*/结束。其中的所有字符在编译时被忽略。 (2) 行注释。以/开始到本行结束。,程序1.1定义了一个类HelloWorldApp,其中定义了一个
16、方法main,方法类似于C语言的函数。有关类和方法的概念本书第3章将详细描述。 main方法是程序的入口点,Java应用程序从main方法开始执行,main方法执行结束则该程序退出运行。因此,如果一个程序由多个类构成,只能有一个类有main方法。,程序1.1使用了Java API完成字符串的输出功能,System.out为标准输出流对象,相当于C语言中的标准输出文件,println为其方法成员。println方法的功能为输出括号中的字符串或其他类型的数据并换行。类似的还有方法print,它与println的区别是输出数据后不换行。,与C语言中标准输入文件对应,Java语言中也有标准输入流Sys
17、tem.in,不过它的功能与C语言标准输入文件相比较弱,Java语言只提供了从标准输入设备读入字符的方法,而没有提供读入其他类型数据的方法。如果希望直接从键盘输入一个整数或实数,必须用程序将从键盘输入的字符串转换为所需的类型。 程序1.1的结构比较简单,只定义了一个类,在后面的章节中读者将会看到包含多个类的程序。,Java Applet的执行环境与Java应用程序不同,Applet不是独立的应用程序,它是嵌入在HTML文件中使用的,程序被放置在Web服务器上,下载到客户端后,由Web浏览器(如微软的Internet Explorer)执行。,【程序1.2】 最简单的Java Applet。im
18、port java.applet.Applet;import java.awt.Graphics;public class HelloWorld extends Appletpublic void paint(Graphics g)g.drawString (你好,Java世界!,2,20);,程序1.2是一个最简单的Java Applet,下面是一个发布程序1.2的HTML文件的内容,请读者注意其中斜黑体的内容。我的第一个Java Applet程序 ,将上述HTML文件和程序1.2编译得到的字节码文件HelloWorld.class放在Web服务器的同一个目录下,当使用Web浏览器浏览该HT
19、ML文件时,浏览器将下载HelloWorld.class,然后执行。 因为执行环境与Java Application不同,Applet的程序结构与Java Application也有所不同,当然它们有一点是共同的:都是由若干个类组成的。,程序1.2的第1行相当于C语言中的#inlcude,表示该Applet程序需要引用Java的Applet类。不过,Java编译器的处理方法不同于C语言,它并不将该文件读入,而且它引用的是已经编译过的Java字节码文件。在编译阶段,Java编译器将从该字节码文件中读取有关Applet类的信息,检验程序中对Applet的使用是否正确。程序1.2编译生成的Hello
20、World.class文件中也不包含Applet类的代码。,第2行的作用与第1行类似,由于程序中用java.awt.Graphics类的功能来输出字符串,因此引入该类。 第3行开始定义HelloWorld类,注意后面的extends Applet,这是Java类继承语法。一个Applet程序可以由多个类构成,其中只有一个类继承于Applet类,这是Applet程序的入口。,Applet的执行与Java Application不同,从程序中看不到像Application中main方法那样的一个明显的执行流程。实际上这些都已经在Applet中实现了,Applet在执行时一直等待用户的输入或其他的一
21、些事件(如关闭浏览器),根据不同的事件执行不同的功能。在编写Applet时需要做的就是提供各种事件的处理程序, 例如程序1.2类HelloWorld中定义了方法paint,该方法在Applet需要绘制界面时被调用。,Applet类中定义了paint方法的调用形式,它有一个Graphics类的对象作参数,通过它可以在Applet的界面上绘制图形和文字。程序1.2调用drawString方法来输出一个字符串: g.drawString (你好,Java世界!,2,20); drawString方法有三个参数:第一个是要输出的字符串;第二、三个是输出位置,分别为x、y轴的值。 图1.2是程序1.2在
22、IE 6.0中执行的画面。,图1.2 Applet的运行,1.3.3 JDK的安装与使用 JDK(Java Development Kit )是最基本的Java程序开发工具,可以从Java官方站点http:/下载。目前该站点提供的正式版本是Java2 SDK 1.4.2,支持的平台有Windows、Linux、Solaris SPARC和Solaris x86,用户可选择合适的版本下载。J2SE的下载页面为http:/ Java2 SDK 1.4.2的下载页面,下面介绍Windows 98平台下不含集成开发环境的Java2 SDK 1.4.2的安装和使用。 1) 安装 运行下载的可执行文件,出
23、现图1.4所示的画面,选择“I accept the terms in the license agreement”,然后单击“Next”按钮,显示如图1.5所示的选择安装的项目。,图1.4 JDK安装画面1,图1.5 JDK安装画面2,如果不需安装演示程序和类库的源代码,可去掉安装项目中的“Demos”和“Source Code”。如果需要修改JDK安装的目录,点击“Change”按钮选择。最后单击“Next”按钮,进入图1.6所示画面,确定是否为系统当前已安装的Web浏览器安装了Java虚拟机插件。单击“Next”按钮开始复制文件(见图1.7)和配置,最后显示图1.8所示画面,单击“Fin
24、ish”按钮结束安装。,图1.6 JDK安装画面3,图1.7 JDK安装画面4,图1.8 JDK安装画面5,2) JDK的使用 JDK使用命令行方式进行编译。要调试Java程序,首先要使用文本编辑器输入保存Java源程序,然后编译执行。下面以程序1.1为例介绍该过程。 第一步:编辑源程序。使用纯文本的编辑软件,如Windows 98的记事本(Notepad.exe)或MS-DOS的edit.exe。保存文件时注意文件名应与程序中的类名相同,程序1.1的文件名为HelloWorldApp.java(注意大小写)。,第二步:编译源程序。在DOS命令提示符下执行(注意大小写) javac Hello
25、WorldApp.java 如果正常的话,将生成HelloWorldApp.class文件。 第三步:运行程序。在DOS命令提示符下执行(注意大小写) java HelloWorldApp 注意不要输入文件的扩展名class。图1.9为用JDK编译运行程序1.1的过程。,图1.9 用JDK编译运行Java应用程序,用JDK编译运行Java Applet过程与编译运行Java应用程序类似,只是最后运行程序的方式不同。Java Applet可以在支持Java Applet的Web浏览器中运行,也可以使用JDK提供的appletviewer.exe。在DOS命令行中输入 appletviewer P
26、age1.htm 这里,Page1.htm为程序1.2中的HTML文件。图1.10是使用appletviewer运行程序1.2的界面。,图1.10 用appletviewer运行Java Applet,实训一 安装与熟悉Java开发工具,AJDK开发工具 一、实训目的 1学习从网络下载JDK开发工具与帮助文档。 2学习安装JDK开发工具及其文档。 3掌握Java Appllcation程序的开发过程并编写一个Java Application程序。,4掌握Java Applet程序的开发过程并编写一个Java Applet程序。 5学习编写简单的HTML文件,配合Java Applet使用。 6
27、学习使用JDK的帮助文档。,二、实训内容 1从网络下载JDK开发工具与帮助文档。 (1)访问http:/,浏览JDK下载页面,J2SE v 1.4.2的下载页面为http:/ 选择适合本地实验计算机平台的软件版本,运行Windows 95 / 98的计算机,应选择“Windows Installation”版本的JDK开发工具,即单击图1.18所示的链接。,图1.18 J2SE v 1.4.2下载页面,单击此链接后,进入图1.19所示的网页,点击图中指定的链接。在图1.20所示的页面中单击 按钮接受有关软件下载的协议,在图1.21中单击下载链接,如果采用Internet Explorer则出现
28、图1.22所示保存文件的提示,单击 按钮,在图1.23所示的对话框中选择保存的目录。 (3) 按同样的方法下载JDK的帮助文档。下载链接参考图1.24。,图1.19 J2SE v 1.4.2下载页面,图1.20 J2SE v 1.4.2下载协议,图1.21 J2SE v 1.4.2下载链接,图1.22 文件下载保存提示,图1.23 选择保存下载文件的目录,图1.24 J2SE v 1.4.2文档下载链接,2安装JDK开发工具与帮助文档。 (1) 运行下载的可执行文件,按照1.3节介绍的步骤安装JDK。 (2) 为方便运行Java编译器,设置环境变量Path。对于Windows 95/98,修改
29、计算机的C:AUTOEXEC.BAT文件时应在文件末增加一句: set Path=%Path%;C:j2sdk1.4.2bin 这里,C:j2sdk1.4.2为JDK的安装目录。,对于Windows XP及Windows 2000等平台,在控制面板中选择系统,在系统属性对话框中单击 按钮,如图1.25所示。然后在图1.26中“系统变量”列表中选择“Path”,然后单击 按钮,在出现的对话框中仿照上面的set命令将C:j2se1.4.2bin加入到Path环境变量中。,图1.25 系统属性对话框,图1.26 环境变量设置,(3) 使用解压缩工具Winzip将JDK帮助文档j2sdk-1_4_2-
30、doc.zip文件解压,该压缩文件包含一组以HTML文件形式组织的帮助文件,把它们保存在本地的一个目录下,例如保存在C:j2sdk1.4.2document目录下。,3编写并运行一个Java Application程序。 (1) 打开一个纯文本编辑器,例如Windows记事本NotePad.exe或DOS下的edit.exe。 (2) 键入1.2节中的程序1.1。 (3) 检查无误后(注意大小写准确)把文件保存起来,命名为HelloWorldApp.java,可以创建一个目录,如C:Javaprog1_1,保存这个文件。,(4) 进入DOS命令行方式,用cd命令进入(3)中创建的目录,运行Ja
31、va编译器: javac HelloWorldApp.java (5) 如果JDK安装正确、程序输入无误且保存的文件名正确,运行编译器没有任何输出;否则,会输出错误信息,一般的错误都是由于拼写失误引起的。运行dir命令查看是否已在相同目录下生成一个名为HelloWorldApp.class的文件。 (6) 利用Java解释器运行这个Java Application程序,并查看运行结果:java HelloWorldApp,4编写并编译一个Java Applet程序。(1) 打开一个纯文本编辑器。(2) 键入1.2节的程序1.2。(3) 创建一个目录,保存文件,命名为HelloWorld.jav
32、a。(4) 进入DOS命令行方式,在保存有上述Java文件的目录下运行Java编译器: javac HelloWorld.java,(5) 如果程序输入无误且保存的文件名正确,运行编译器将没有任何输出;否则,会输出错误信息。运行dir命令查看是否已在相同目录下生成个名为HelloWorld.class的文件。,5编写配合Applet的HTML文件。(1) 打开一个纯文本编辑器。(2) 键入如下的HTML程序:我的第一个Java Applet程序 ,(3) 检查无误后把文件命名为Page1.htm,保存在与文件HelloWorld.java同一目录下。 (4) 直接双击这个HTML文件的图标,或
33、者打开Web浏览器(例如IE),在地址栏中键入这个HTML文件的全路径名,查看Applet在浏览器中的运行结果。 (5) 利用模拟的Applet运行环境解释运行这个Java Applet程序并观察运行结果。进入DOS环境,在程序所在目录下运行下面的命令: appletviewer Page1.htm,6使用JDK帮助文档。 在Windows中打开JDK文档目录,双击index.html文件,或者在Web浏览器的地址栏中输入这个文件的全路径名,打开这个文件对应的网页,查阅相关内容。 BVisual J+ 6.0集成开发环境,习 题 一,1编译型语言与解释型语言是如何划分的? Java属于哪种类型语言? Java程序的编译和解释有何特点? 这些特点对于Java成为Internet上的编程语言有什么影响? 2JDK的编译命令是什么? 如果编译结果报告说找不到要编译的源代码,通常会是哪些错误?,3运行编译好的字节码文件使用什么命令? 什么是JIT? 什么是JVM? 4Java程序分为哪两大类?它们之间有哪些差别? 5Java程序中有哪几种注释方式? 6分别编写Applet和Application,在屏幕上生成如下图案: * * * *,