Java源程序文件通过“编译”,在你的感觉中,就好象是将它们从程序员编写的文本文件格式转换成了一组字节码 字节码被存储在 class文件中。 构成Jawa软件程序的字节码在运行时被加载、校验并在解释器中运行。当运行 applets时,字节码可被下载,然后由 建于浏览器中的JVM进行解释。解释器具备两种功能,一是执行字节码,二是对底层硬件做适当调用 在一些使用Jawa技术的运行环境中,部分校验过的字节码被编译成原始机器码并直接运行于硬件平台。这就使Java 软件代码能够以C或C艹接近的速度运行,只是在加载时,因为要编译成原始机器码而略有延迟 注意一— SUN Microsystemsˉ通过采用新的技术,使Java虚拟机的性能已经有了进一步的提高。这种新型虚拟机被 称为 Hot Spot虚拟机,它具备了使Java编程语言能象编译C艹一样快速运行的潜力。 Hot spot虚拟机对操作系统具有本 地多线程支持能力,而不是虚拟多线程。因而, Hotspot虚拟机可保证对一个应用程序来说,并不一定有代码才能使用这 能力。 Hot spot技术解决了性能与移植性之间的难题。 Java运行环境 执行三大任务 加载代 校验 执行代码 代码安全性(续) Java运行环境 一个Java技术的运行环境可运行为JVM编译的代码并执行如下三大任务 加载代码一由类加载器执行 校验代码一由字节码校验器执行 执行代码一由运行时的解释器执行 类加载器 类加载器为程序的执行加载所需要的全部类。类加载器将局部文件系统的类名空间与来自网络源的类名空间相分离, 以增加安全性。由于局部类总是首先加载,因而可限制任何“特洛依木马”的应用 当全部类被加载后,可执行文件的存储器格式被确定。这时,特定的存储器地址被分配给符号引用并创建检索表格。 由于存储器格式在运行时出现,因而Java技术解释器增加了保护以防止对限制代码区的非法进入。 字节码校验 可保证 -代码符合JVM规范 -代码不破坏系统完整性 代码不会引起操作数栈上溢或下溢 所有操作代码的参数类型的准确性 无非法数据转换(整数到指针的转换) 代码安全性(续 字节码校验器 Java软件代码在实际运行之前要经过几次测试。JVM将代码输入一个字节码校验器以测试代码段格式并进行规则检 查一一检查伪造指针、违反对象访问权限或试图改变对象类型的非法代码
11 Java 源程序文件通过“编译”,在你的感觉中,就好象是将它们从程序员编写的文本文件格式转换成了一组字节码。 字节码被存储在 .class 文件中。 构成 Java 软件程序的字节码在运行时被加载、校验并在解释器中运行。当运行 applets 时,字节码可被下载,然后由 建于浏览器中的 JVM 进行解释。解释器具备两种功能,一是执行字节码,二是对底层硬件做适当调用。 在一些使用 Java 技术的运行环境中,部分校验过的字节码被编译成原始机器码并直接运行于硬件平台。这就使 Java 软件代码能够以 C 或 C++接近的速度运行,只是在加载时, 因为要编译成原始机器码而略有延迟。 注意--SUN MicrosystemsTM通过采用新的技术,使 Java 虚拟机的性能已经有了进一步的提高。这种新型虚拟机被 称为 HotSpotTM虚拟机,它具备了使 Java 编程语言能象编译 C++一样快速运行的潜力。HotSpot 虚拟机对操作系统具有本 地多线程支持能力,而不是虚拟多线程。因而,HotSpot 虚拟机可保证对一个应用程序来说,并不一定有代码才能使用这 一能力。HotSpot 技术解决了性能与移植性之间的难题。 代码安全性(续) Java 运行环境 一个 Java 技术的运行环境可运行为 JVM 编译的代码并执行如下三大任务: - 加载代码-由类加载器执行 - 校验代码-由字节码校验器执行 - 执行代码-由运行时的解释器执行 类加载器 类加载器为程序的执行加载所需要的全部类。类加载器将局部文件系统的类名空间与来自网络源的类名空间相分离, 以增加安全性。由于局部类总是首先加载,因而可限制任何“特洛依木马”的应用。 当全部类被加载后,可执行文件的存储器格式被确定。这时,特定的存储器地址被分配给符号引用并创建检索表格。 由于存储器格式在运行时出现,因而 Java 技术解释器增加了保护以防止对限制代码区的非法进入。 代码安全性(续) 字节码校验器 Java 软件代码在实际运行之前要经过几次测试。JVM 将代码输入一个字节码校验器以测试代码段格式并进行规则检 查--检查伪造指针、违反对象访问权限或试图改变对象类型的非法代码。 Java 运行环境 执行三大任务 - 加载代码 - 校验代码 - 执行代码 字节码校验 可保证 - 代码符合 JVM 规范 - 代码不破坏系统完整性 - 代码不会引起操作数栈上溢或下溢 - 所有操作代码的参数类型的准确性 - 无非法数据转换(整数到指针的转换)
注意—所有源于网络的类文件都要经过字节码校验器 代码安全性(续) 校验过程 字节码校验器对程序代码进行四遍校验,这可以保证代码符合JVM规范并且不破坏系统的完整性。如果校验器在完 成四遍校验后未返回出错信息,则下列各点可被保证 类符合JVM规范的类文件格式 无访问限制违例 代码未引起操作数栈上溢或下溢 所有操作代码的参数类型将总是正确的 无非法数据转换发生,如将整数转换为对象引用 -对象域访问是合法的 第四节一个基本的Java应用程序 象其它编程语言一样,Java编程语言也被用来创建应用程序。一个共同的小应用程序范例是在屏幕上显示字串“Hel Word!”。下列代码给出了这个Java应用程序 1.4.1 HelloWorldApp 2.// Sample Hello World application 4.public class He lloWorldApp 5.public static void main (String args[])t 6. System. out.println (" Hello World! )i 以上程序行是在你的屏幕上打印“ Hello World!”所需的最少组件 1.4.2描述 Hello worldApp 第1-3行 程序中的1-3行是注释行 2 // Sample HelloWorld application 第4行 第4行声明类名为 Hello worldApp。类名( Classname)是在源文件中指明的,它可在与源代码相同的目录上创建 个 classname class y件。在本例题中,编译器创建了一个称为 Hellowor ldApp class的文件,它包含了公共类 Hello worldApp 的编译代码 4 public class HelloWorldApp i 第5行 第5行是程序执行的起始点。Java技术解释器必须发现这一严格定义的点,否则将拒绝运行程序 其它程序语言(特别是C和C++)也采用manO声明作为程序执行的起始点。此声明的不同部分将在本课程的后几 部分介绍 如果在程序的命令行中给出了任何自变量,它们将被传递给manO方法中被称作ags的 String数组。在本例题中, 未使用自变量
12 注意----所有源于网络的类文件都要经过字节码校验器 代码安全性(续) 校验过程 字节码校验器对程序代码进行四遍校验,这可以保证代码符合 JVM 规范并且不破坏系统的完整性。如果校验器在完 成四遍校验后未返回出错信息,则下列各点可被保证: - 类符合 JVM 规范的类文件格式 - 无访问限制违例 - 代码未引起操作数栈上溢或下溢 - 所有操作代码的参数类型将总是正确的 - 无非法数据转换发生,如将整数转换为对象引用 - 对象域访问是合法的 第四节 一个基本的 Java 应用程序 象其它编程语言一样,Java 编程语言也被用来创建应用程序。一个共同的小应用程序范例是在屏幕上显示字串“Hello World!”。下列代码给出了这个 Java 应用程序。 1.4.1 HelloWorldApp 1.// 2.// Sample HelloWorld application 3.// 4.public class HelloWorldApp{ 5.public static void main (String args[]) { 6.System.out.println ("Hello World!"); 7.} 8.} 以上程序行是在你的屏幕上打印“Hello World!”所需的最少组件。 1.4.2 描述 HelloWorldApp 第 1-3 行 程序中的 1-3 行是注释行 1 // 2 // Sample HelloWorld application 3 // 第 4 行 第 4 行声明类名为 HelloWorldApp。类名(Classname)是在源文件中指明的,它可在与源代码相同的目录上创建一 个 classname·class 文件。在本例题中,编译器创建了一个称为 HelloWorldApp.class 的文件, 它包含了公共类 HelloWorldApp 的编译代码。 4 public class HelloWorldApp{ 第 5 行 第 5 行是程序执行的起始点。Java 技术解释器必须发现这一严格定义的点,否则将拒绝运行程序。 其它程序语言(特别是 C 和 C++)也采用 main ()声明作为程序执行的起始点。此声明的不同部分将在本课程的后几 部分介绍。 如果在程序的命令行中给出了任何自变量,它们将被传递给 main()方法中被称作 args 的 String 数组。在本例题中, 未使用自变量
public static void main (String args [ - public-方法 maino可被任何程序访问,包括Java技术解释器 static-是一个告知编译器 maino是用于类 Hello WorldApp中的函数的关键字。为使 maino在程序做其它事之前就开 始运行,这一关键字是必要的。 -void一表明main0不返回任何信息。这一点是重要的,因为Java编程语言要进行谨慎的类型检查,包括检查调用的 方法确实返回了这些方法所声明的类型。 String args一是一个 String数组的声明,它将包含位于类名之后的命令行中的自变量 java HelloWorldApp args [o args [17 第6行 第6行声明如何使用类名、对象名和方法调用。它使用由 System类的out成员引用的 Printstreamout对象的 printing 方法,将字串“ Hello World!”打印到标准输出上。 System. out. println (Hello Wor ld! 在这个例子中, printIng方法被输入了一个字串自变量并将其写在了标准输出流上。 第78行 本程序的7-8行分别是方法manO和类 Hello WorldApp的下括号。 14.3编译并运行 Hello worldApp 编译并运行 Hello worldApp 编译 Hello WorldApp. java javac HelloworldApp java 运行应用程序 java HelloWor ldApp 判定编译和运行的共同错误 当你创建了 Hello WorldApp. java源文件后,用下列程序行进行编译 c: \student \j avac Hello Worl dApp. java 如果编译器未返回任何提示信息,新文件 Hello WorldApp class则被存储在与源文件相同的目录中,除非另有指定 如果在编译中遇到问题,请参阅本模块的查错提示信息部分 运行 为运行你的 Hello worldApp应用程序,需使用Java解释器和位于bin目录下的java c:\student\ java HelloWorldApp 注意一必须设置PATH环境变量以发现java和 Javac,确认它包括c:\jdk1.2\bin 1.4.4编译查错 编译时的错误 以下是编译时的常见错误 javac: Command not found PATH变量未正确设置以包括 javac编译器。 javac编译器位于JDK目录下的bin目录 HelloWorldApp. java: 6: Method printl(java. lang String) not found in class java. io Printstream System out printl ("Hello Wor ld! 方法名 printin出现打印错误
13 5 public static void main (String args[]) { - public-方法 main()可被任何程序访问,包括 Java 技术解释器。 - static- 是一个告知编译器 main()是用于类 HelloWorldApp 中的函数的关键字。为使 main()在程序做其它事之前就开 始运行,这一关键字是必要的。 - void- 表明 main()不返回任何信息。这一点是重要的,因为 Java 编程语言要进行谨慎的类型检查,包括检查调用的 方法确实返回了这些方法所声明的类型。 - String args - 是一个 String 数组的声明,它将包含位于类名之后的命令行中的自变量。 java HelloWorldApp args[0]args[1]···· 第 6 行 第 6 行声明如何使用类名、对象名和方法调用。它使用由 System 类的 out 成员引用的 PrintStreamout 对象的 println() 方法,将字串“Hello World!”打印到标准输出上。 6 System.out.println (“Hello World!”); 在这个例子中,println()方法被输入了一个字串自变量并将其写在了标准输出流上。 第 7-8 行 本程序的 7-8 行分别是方法 main()和类 HelloWorldApp 的下括号。 7 } 8 } 1.4.3 编译并运行 HelloWorldApp 编译并运行 HelloWorldApp - 编译 HelloWorldApp.java javac HelloworldApp.java - 运行应用程序 java HelloWorldApp - 判定编译和运行的共同错误 编译 当你创建了 HelloWorldApp.java 源文件后,用下列程序行进行编译: c:\student\javac HelloWorldApp.java 如果编译器未返回任何提示信息,新文件 HelloWorldApp.class 则被存储在与源文件相同的目录中,除非另有指定。 如果在编译中遇到问题,请参阅本模块的查错提示信息部分。 运行 为运行你的 HelloWorldApp 应用程序,需使用 Java 解释器和位于 bin 目录下的 java: c:\student\ java HelloWorldApp Hello World! 注意-必须设置 PATH 环境变量以发现 java 和 javac,确认它包括 c:\jdk1.2\bin 1.4.4 编译查错 编译时的错误 以下是编译时的常见错误 - javac:Command not found PATH 变量未正确设置以包括 javac 编译器。javac 编译器位于 JDK 目录下的 bin 目录。 - HelloWorldApp.java:6: Method printl(java.lang.String) not found in class java.io.PrintStream.System. out.printl ("Hello World!"); 方法名 println 出现打印错误
In class HelloWor ldApp main must be public or static 该错误的出现是因为词 static或 public被放在了包含main方法的行之外。 运行时的错误 can't find class HelloworldApp (这个错误是在打印 java Hello worldApp时产生的) 通常,它表示在命令行中所指定的类名的拼写与 filename. class文件的拼写不同。Java编程语言是一种大小写区别对待 的语言。 public class HelloWorldapp 创建了一个 Helllo worldapp class,它不是编译器所预期的类名( Hello WorldApp class) 命名 如果·java文件包括一个公共类,那么它必须使用与那个公共类相同的文件名。例如在前例中的类的定义是 public class HelloWorldapp 源文件名则必须是 -类计数 在源文件中每次只能定义一个公共类。 源文件布局 源文件布局 包含三个“顶级”要素 个可选择的包声明 -任意数量的输入语句 类和界面声明 一个Java源文件可包含三个“顶级”要素 个包声明(可选) 任意数量的输入语句 类和界面声明 该三要素必须以上述顺序出现。即,任何输入语句出现在所有类定义之前:如果使用包声明,则包声明必须出现在 类和输入语句之前 第五节类和包介绍 类和包介绍 1.什么是类和包? Java类库中的几个重要包 Java. lang Java. awt let Java. net 类是描述提供某种功能的模块的一般术语。Java开发集(JDK)给出了一套标准的类(称作类库),这些类可执行 大部分所需的基本行为不仅为编程任务(例如,类可提供基本的数学函数、数组和字符串),而且为图形和网络 类库被组织成许多包,每个包都包含几个类。如下所列为一些重要的包 java. lang包含一些形成语言核心的类,如 String、Math、 Integer和 Thread 14
14 - In class HelloWorldApp:main must be public or static 该错误的出现是因为词 static 或 public 被放在了包含 main 方法的行之外。 运行时的错误 - can’t find class HelloWorldApp (这个错误是在打印 java HelloWorldApp 时产生的) 通常, 它表示在命令行中所指定的类名的拼写与 filename.class 文件的拼写不同。Java 编程语言是一种大小写区别对待 的语言。 例如: public class HelloWorldapp 创建了一个 HellloWorldapp.class,它不是编译器所预期的类名(HelloWorldApp.class)。 - 命名 如果·java 文件包括一个公共类,那么它必须使用与那个公共类相同的文件名。例如在前例中的类的定义是 public class HelloWorldapp 源文件名则必须是 HelloWorldapp.java - 类计数 在源文件中每次只能定义一个公共类。 源文件布局 源文件布局 包含三个“顶级”要素 - 一个可选择的包声明 - 任意数量的输入语句 - 类和界面声明 一个 Java 源文件可包含三个“顶级”要素: - 一个包声明(可选) - 任意数量的输入语句 - 类和界面声明 该三要素必须以上述顺序出现。即,任何输入语句出现在所有类定义之前;如果使用包声明,则包声明必须出现在 类和输入语句之前。 第五节 类和包介绍 类和包介绍 1. 什么是类和包? 2. Java 类库中的几个重要包 java.lang java.awt java.applet java.net java.io java.util 类是描述提供某种功能的模块的一般术语。Java 开发集(JDK)给出了一套标准的类(称作类库),这些类可执行 大部分所需的基本行为 不仅为编程任务(例如,类可提供基本的数学函数、数组和字符串),而且为图形和网络。 类库被组织成许多包,每个包都包含几个类。如下所列为一些重要的包: java.lang 包含一些形成语言核心的类,如 String、Math、Integer 和 Thread
java. awt包含了构成抽象窗口工具包(AWT)的类,这个包被用来构建和管理应用程序的图形用户界面 java applet包含了可执行aplt特殊行为的类 Java.net包含执行与网络相关的操作的类和处理接口及统一资源定位器(URLs)的类 Java. Io包含处理I/O文件的类 java. util包含为任务设置的实用程序类,如随机数发生、定义系统特性和使用与日期日历相关的函数。 第六节使用 Java api文档 使用 Java api文档 组超文本标识语言(HTML)文件提供了有关API的信息 个包包含了对所有类信息的超链接 一组HIML文件以文档的形式提供了有关API的信息,这个文档的布局是等级制的,因而主页列出所有的包为超链 接。如果选中了一个特殊包的热链接,作为那个包成员的类将被列出。从一个包页选中一个类的热链接将提交一页有关 那个类的信息 图1-1显示了这样一个类文档 !积补 Class java. lang Object msm吗 srI2 tte4ANE,t ate 图1-1 一个类文档的主要部分包括 类层次 类和类的一般目的描述 成员变量列表 构造函数列表
15 java.awt 包含了构成抽象窗口工具包(AWT)的类,这个包被用来构建和管理应用程序的图形用户界面。 java.applet 包含了可执行 applet 特殊行为的类。 java.net 包含执行与网络相关的操作的类和处理接口及统一资源定位器(URLs)的类。 java.io 包含处理 I/O 文件的类。 java.util 包含为任务设置的实用程序类,如随机数发生、定义系统特性和使用与日期日历相关的函数。 第六节 使用 Java API 文档 使用 Java API 文档 1. 一组超文本标识语言(HTML)文件提供了有关 API 的信息 2. 一个包包含了对所有类信息的超链接 3. 一个类文档包括类层次、一个类描述、一组成员变量和构造函数等 一组 HTML 文件以文档的形式提供了有关 API 的信息,这个文档的布局是等级制的,因而主页列出所有的包为超链 接。如果选中了一个特殊包的热链接,作为那个包成员的类将被列出。从一个包页选中一个类的热链接将提交一页有关 那个类的信息。 图 1-1 显示了这样一个类文档 图 1-1 一个类文档的主要部分包括: - 类层次 - 类和类的一般目的描述 - 成员变量列表 - 构造函数列表