Java应用程序编程过程中你的兴趣与该模块内容的关系 页头图—页头图可帮助你及时而轻松的跟上教师的进度。它并不是在每一页都出现 教程——教师将为你提供有关模块的特有信息,这些信息将有助于你掌握做练习所需要的知识和技能 练习——练习将为你提供测试你的技能和应用所学概念的机会。本教程中所提供的例题代码亦有助于你完成练习。 检査你的进度——在这一部分,模块的目标被重新提及,有时是以问题形式出现。这样,在你进入下一模块之前, 就可以检查你是否已完成了目前这一模块所要求达到的目标 ●思考题——具有挑战性的问题有助于你应用所学模块内容或预测待学模块的内容。 十一、图表和印刷体例说明 下列图表及印刷体例代表着不同的含义 辅助资源——表示可获取辅助参考资料。 讨论一一表示此时建议以小组或班级形式进行讨论 练习目标——一表示练习的目标,这个练习适合于正在讨论的内容。 注意——附加重要信息、强调信息、有趣或特殊信息 警告——对数据或机器的潜在损坏 印刷体例 字体 Courier系用来表示命令名称、文件名及目录名,同时也表示计算机屏幕输出。例如: Use ls -al to all files System器 You have mai1 黑体 courier bold系用来表示你打印的字符和数字。 system% su 斜体 courier italic系用来表示变量和命令行,它可以被实际名称或值所代替。 例如: To delete a file, type rm filename 斜体 Palatino系用来表示书名、新词或术语或需强调的词 Read Chapter 6 in User's Guide These are called class options You must be root to do this
6 Java 应用程序编程过程中你的兴趣与该模块内容的关系 ⚫ 页头图──页头图可帮助你及时而轻松的跟上教师的进度。它并不是在每一页都出现 ⚫ 教程──教师将为你提供有关模块的特有信息,这些信息将有助于你掌握做练习所需要的知识和技能 ⚫ 练习──练习将为你提供测试你的技能和应用所学概念的机会。本教程中所提供的例题代码亦有助于你完成练习。 ⚫ 检查你的进度──在这一部分,模块的目标被重新提及,有时是以问题形式出现。这样,在你进入下一模块之前, 就可以检查你是否已完成了目前这一模块所要求达到的目标。 ⚫ 思考题──具有挑战性的问题有助于你应用所学模块内容或预测待学模块的内容。 十一、图表和印刷体例说明 下列图表及印刷体例代表着不同的含义: 辅助资源──表示可获取辅助参考资料。 讨论──表示此时建议以小组或班级形式进行讨论。 练习目标──表示练习的目标,这个练习适合于正在讨论的内容。 注意──附加重要信息、强调信息、有趣或特殊信息 警告──对数据或机器的潜在损坏 印刷体例 字体 Courier 系用来表示命令名称、文件名及目录名,同时也表示计算机屏幕输出。例如: Use ls –al to all files. System% You have mail 黑体 courier bold 系用来表示你打印的字符和数字。 例如: system% su Password: 斜体 courier italic 系用来表示变量和命令行,它可以被实际名称或值所代替。 例如: To delete a file, type rm filename. 斜体 Palatino 系用来表示书名、新词或术语或需强调的词。 例如: Read Chapter 6 in User’s Guide. These are called class options You must be root to do this
第一章起步 本模块对Java编程语言做了一般性描述,包括Java虚拟机、垃圾收集和安全性等, Exception Handling Developing Graphical user Interfaces Huairou mathers casemate,maGenta SwnDNtavoings 第一节相关问题 讨论—一下列问题与本模块相关 Java编程语言是一种完整的语言吗?它是不是仅用于编写web程序 -你为什么需要另一种编程语言 Java平台是如何在其它语言平台上提高性能的? 第二节目标 完成本模块的学习后,你应该能够 描述Java编程语言的主要特性 描述Java虚拟机的主要功能 描述垃圾收集是如何进行的 列举由处理代码安全性的Java平台所执行的三大任务 定义 Class 和 application 编写、编译并运行简单Java应用程序 利用Java技术应用程序编程界面(AP)的在线文档来标识 Java. lang包的方法。 参考资料 辅助资源—一下列参考资料可为本模块所讨论的问题提供更详细的补充 Lindholm and Yellin. 1997. The Java Virtual Machine Specification. Addison-Wesley Yellin, Frank. Low-Level Security in Java, white paper. [Online]. Available 第三节什么是Java编程语言?
7 第一章 起 步 本模块对 Java 编程语言做了一般性描述,包括 Java 虚拟机、垃圾收集和安全性等。 第一节 相关问题 讨论──下列问题与本模块相关 - Java 编程语言是一种完整的语言吗?它是不是仅用于编写 Web 程序 ? - 你为什么需要另一种编程语言 ? - Java 平台是如何在其它语言平台上提高性能的 ? 第二节 目 标 完成本模块的学习后,你应该能够: - 描述 Java 编程语言的主要特性 - 描述 Java 虚拟机的主要功能 - 描述垃圾收集是如何进行的 - 列举由处理代码安全性的 Java 平台所执行的三大任务 - 定义 Class,Package,Applets 和 Applications - 编写、编译并运行简单 Java 应用程序 - 利用 Java 技术应用程序编程界面(API)的在线文档来标识 Java. lang 包的方法。 参考资料 辅助资源──下列参考资料可为本模块所讨论的问题提供更详细的补充 - Lindholm and Yellin. 1997. The Java Virtual Machine Specification. Addison-Wesley. - Yellin, Frank. Low-Level Security in Java, white paper. [Online]. Available: http://www.javasoft.com/sfaq/verifier.html. 第三节 什么是 Java 编程语言 ?
什么是Java编程语言 Java是 种编程语言 种开发环境 种应用环境 ·种部署环境 句法与C++相似,语义与 Small Talk相似 Java是 种编程语言 种开发环境 应用环境 -一种部署环境 Java编程语言的句法与C++的句法相似,语义则与 Small Talk M的语义相似。Java编程语言可被用来创建任何常规 编程语言所能创建的应用程序。 在 World wide Web(www)和能够运行称为 applets程序的浏览器的有关介绍中,人们经常提及Java编程语言。 Applets是一种贮存于www服务器的用Java编程语言编写的程序,它通常由浏览器下载到客户系统中,并通过浏览器运 行。 Applets通常较小,以减少下载时间,它由超文本标识语言(HIML)的web页来调用 Java applications是一种独立的程序,它不需要任何Web浏览器来执行。它们是一种典型的通用程序:可运行于任 何具备Java运行环境的设备中。 1.3.1Java编程语言的主要目标 Java编程语言的主要目标 提供一种解释环境为 提高开发速度 代码可移植性 使用户能运行不止一个活动线程 当程序运行时,能动态支持程序改变 提供更好的安全性 设计Java编程语言的主要目标是 提供一种易于编程的语言,从而 消除其它语言在诸如指针运算和存储器管理方面影响健壮性的缺陷。 利用面向对象的概念使程序真正地成为可视化程序 ˇ为使代码尽可能清晰合理、简明流畅提供了一种方法 Java编程语言的主要目标 设计Java编程语言的主要目标是 提供一种易于编程的语言 消除其它语言在诸如指针运算和存储器管理方面影响健壮性的缺陷 利用面向对象的概念使程序真正地成为可视化程序 Java编程语言的主要目标(续) 为获得如下两点益处提供一种解释环境 提高开发速度——一消除编译一链接一装载一测试周期。 ˇ代码可移植性——使操作系统能为运行环境做系统级调用 为运行不止一个活动线程的程序提供了一种方式
8 什么是 Java 编程语言 Java 是: - 一种编程语言 - 一种开发环境 - 一种应用环境 - 一种部署环境 - 句法与 C++相似,语义与 Small Talk 相似 - 用来开发 applets,又用来开发 applications Java 是: - 一种编程语言 - 一种开发环境 - 一种应用环境 - 一种部署环境 Java 编程语言的句法与 C++的句法相似,语义则与 Small Talk TM的语义相似。Java 编程语言可被用来创建任何常规 编程语言所能创建的应用程序。 在 World Wide Web(WWW)和能够运行称为 applets 程序的浏览器的有关介绍中,人们经常提及 Java 编程语言。 Applets 是一种贮存于 WWW 服务器的用 Java 编程语言编写的程序,它通常由浏览器下载到客户系统中,并通过浏览器运 行。Applets 通常较小,以减少下载时间,它由超文本标识语言(HTML)的 Web 页来调用。 Java applications 是一种独立的程序,它不需要任何 Web 浏览器来执行。它们是一种典型的通用程序;可运行于任 何具备 Java 运行环境的设备中。 1.3.1 Java 编程语言的主要目标 Java 编程语言的主要目标 提供一种解释环境为 - 提高开发速度 - 代码可移植性 - 使用户能运行不止一个活动线程 - 当程序运行时,能动态支持程序改变 提供更好的安全性 设计 Java 编程语言的主要目标是 提供一种易于编程的语言,从而 消除其它语言在诸如指针运算和存储器管理方面影响健壮性的缺陷。 利用面向对象的概念使程序真正地成为可视化程序 为使代码尽可能清晰合理、简明流畅提供了一种方法 Java 编程语言的主要目标 设计 Java 编程语言的主要目标是 提供一种易于编程的语言 - 消除其它语言在诸如指针运算和存储器管理方面影响健壮性的缺陷。 - 利用面向对象的概念使程序真正地成为可视化程序 - 为使代码尽可能清晰合理、简明流畅提供了一种方法 Java 编程语言的主要目标(续) - 为获得如下两点益处提供一种解释环境 提高开发速度──消除编译─链接—装载—测试周期。 代码可移植性──使操作系统能为运行环境做系统级调用 - 为运行不止一个活动线程的程序提供了一种方式
通过允许下载代码模块,从而当程序运行时也能动态支持程序改变。 为那些保证安全性而装载的代码模块提供了一种检查方法 Java编程语言的主要目标 下列特性使这些目标付诸实现: Java虚拟机(JVM) 垃圾收集 代码安全性 Java编程语言的主要目标(续 精心开发的Java技术体系结构为上述目标的实现提供了保证。Java的如下特性使这些目标得以实现 -Java虚拟机 垃圾收集 代码安全性 1.3.2Java虛拟机 Java虚拟机 提供硬件平台规范 解读独立于平台的已编译的字节码 可当作软件或硬件来实现 可在Java技术开发工具或Web浏览器上实现 Java虚拟机规范为Java虚拟机(JVM)作了如下定义: 在真实机器中用软件模拟实现的一种想象机器。Java虚拟机代码被存储在 class文件中;每个文件都包含最多一个 public类 Java虚拟机规范为不同的硬件平台提供了一种编译Jawa技术代码的规范,该规范使Java软件独立于平台,因为编译 是针对作为虚拟机的“一般机器”而做,这个“一般机器”可用软件模拟并运行于各种现存的计算机系统,也可用硬件 来实现。 Java虚拟机 JVM为下列各项做出了定义 指令集(中央处理器[CPU]) 注册集 类文件格式 -垃圾收集堆 存储区 Java虚拟机(续) 编译器在获取Java应用程序的源代码后,将其生成字节码,它是为JM生成的一种机器码指令。每个Jαva解释器, 不管它是Java技术开发工具,还是可运行 applets的web浏览器,都可执行JVM JVM为下列各项做出了定义 指令集(相当于中央处理器[CPU]) 注册集 类文件格式 -垃圾收集堆 存储区
9 - 通过允许下载代码模块,从而当程序运行时也能动态支持程序改变。 - 为那些保证安全性而装载的代码模块提供了一种检查方法。 Java 编程语言的主要目标 下列特性使这些目标付诸实现: - Java 虚拟机(JVM) - 垃圾收集 - 代码安全性 Java 编程语言的主要目标(续) 精心开发的 Java 技术体系结构为上述目标的实现提供了保证。Java 的如下特性使这些目标得以实现 - Java 虚拟机 - 垃圾收集 - 代码安全性 1.3.2 Java 虚拟机 Java 虚拟机 - 提供硬件平台规范 - 解读独立于平台的已编译的字节码 - 可当作软件或硬件来实现 - 可在 Java 技术开发工具或 Web 浏览器上实现 Java 虚拟机规范为 Java 虚拟机(JVM)作了如下定义: 在真实机器中用软件模拟实现的一种想象机器。Java 虚拟机代码被存储在 .class 文件中;每个文件都包含最多一个 public 类。 Java 虚拟机规范为不同的硬件平台提供了一种编译 Java 技术代码的规范,该规范使 Java 软件独立于平台,因为编译 是针对作为虚拟机的“一般机器”而做,这个“一般机器”可用软件模拟并运行于各种现存的计算机系统,也可用硬件 来实现。 Java 虚拟机 JVM 为下列各项做出了定义 - 指令集(中央处理器[CPU] ) - 注册集 - 类文件格式 - 栈 - 垃圾收集堆 - 存储区 Java 虚拟机(续) 编译器在获取 Java 应用程序的源代码后,将其生成字节码,它是为 JVM 生成的一种机器码指令。每个 Java 解释器, 不管它是 Java 技术开发工具,还是可运行 applets 的 Web 浏览器,都可执行 JVM。 JVM 为下列各项做出了定义 - 指令集(相当于中央处理器[CPU] ) - 注册集 - 类文件格式 - 栈 - 垃圾收集堆 - 存储区
Java虚拟机 由保持适当类型约束的字节码形成代码 大部分类型检查在编译代码时完成 由SUNM批准的JVM必须能够运行任何从属类文件 Java虚拟机(续) JVM的代码格式由紧缩有效的字节码构成。由JM字节码编写的程序必须保持适当的类型约束。大部分类型检查 是在编译时完成。 任何从属的Java技术解释器必须能够运行任何含有类文件的程序,这些类文件应符合Java虚拟机规范中所指定的类 文件格式。 1.3.3垃圾收集 圾收集 不再需要的分配存储器应取消分配 在其它语言中,取消分配是程序员的责任 Java编程语言提供了一种系统级线程以跟踪存储区分配 垃圾收集 可检查和释放不再需要的存储器 可自动完成上述工作 可在JVM实现周期中,产生意想不到的变化 许多编程语言都允许在程序运行时动态分配存储器,分配存储器的过程由于语言句法不同而有所变化,但总是要将 指针返回到存储区的起始位置 当分配存储器不再需要时(存储器指针己溢出范围),程序或运行环境应取消分配存储器 在C,C++或其它语言中,程序员负责取消分配存储器。有时,这是一件很困难的事情。因为你并不总是事先知道 存储器应在何时被释放。当在系统中没有能够被分配的存储器时,可导致程序瘫痪,这种程序被称作具有存储器漏洞。 Java编程语言解除了程序员取消分配存储器的责任,它可提供一种系统级线程以跟踪每一存储器的分配情况。在Java 虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的存储器 垃圾收集在Java技术程序的生命周期中自动进行,它解除了取消分配存储器的要求,并避免了存储器漏洞。然而, 垃圾收集可在JⅥM实现的周期中,产生意想不到的变化。 13.4代码的安全性 概述 下图显示了Java技术的运行环境及其加强代码安全性的方法。 Runtime Class loader Byte code )avac Hello.]ava Network verifier Hella class Interpret JIT code Runtime generator/ Hardw
10 Java 虚拟机 - 由保持适当类型约束的字节码形成代码 - 大部分类型检查在编译代码时完成 - 每个由 SUN TM批准的 JVM 必须能够运行任何从属类文件 Java 虚拟机(续) JVM 的代码格式由紧缩有效的字节码构成。由 JVM 字节码编写的程序必须保持适当的类型约束。大部分类型检查 是在编译时完成。 任何从属的 Java 技术解释器必须能够运行任何含有类文件的程序,这些类文件应符合 Java 虚拟机规范中所指定的类 文件格式。 1.3.3 垃圾收集 许多编程语言都允许在程序运行时动态分配存储器,分配存储器的过程由于语言句法不同而有所变化,但总是要将 指针返回到存储区的起始位置 当分配存储器不再需要时(存储器指针已溢出范围),程序或运行环境应取消分配存储器。 在 C,C++ 或其它语言中,程序员负责取消分配存储器。有时,这是一件很困难的事情。因为你并不总是事先知道 存储器应在何时被释放。当在系统中没有能够被分配的存储器时,可导致程序瘫痪,这种程序被称作具有存储器漏洞。 Java 编程语言解除了程序员取消分配存储器的责任,它可提供一种系统级线程以跟踪每一存储器的分配情况。在 Java 虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的存储器。 垃圾收集在 Java 技术程序的生命周期中自动进行,它解除了取消分配存储器的要求,并避免了存储器漏洞。然而, 垃圾收集可在 JVM 实现的周期中,产生意想不到的变化。 1.3.4 代码的安全性 概述 下图显示了 Java 技术的运行环境及其加强代码安全性的方法。 垃圾收集 - 不再需要的分配存储器应取消分配 - 在其它语言中,取消分配是程序员的责任 - Java 编程语言提供了一种系统级线程以跟踪存储区分配 - 垃圾收集 - 可检查和释放不再需要的存储器 - 可自动完成上述工作 - 可在 JVM 实现周期中,产生意想不到的变化