Java 程序设计环境
本章主要介绍如何安装 Java 开发工具包( JDK ) 以及如何编译和运行不同类型的程序: 控制台程序、 图形化应用程序以及 applet。运行 JDK 工具的方法是在终端窗口中键入命令。 然而, 很多程序员更喜欢使用集成开发环境。 为此,将在稍后介绍如何使用免费的开发环境 编译和运行 Java 程序。尽管学起来很容易, 但集成开发环境需要吞噬大量资源, 编写小型程 序时也比较烦琐。 一旦掌握了本章的技术,并选定了自己的开发工具,就可以学习第 3 章, 开始研究 Java 程序设计语言。
2.1 安装Java 开发工具包
Oracle 公司为 Linux 、 Mac OS X、Solaris 和 Windows 提供了 Java 开发工具包( JDK ) 的 最新、 最完整的版本。 用于很多其他平台的版本仍处于多种不同的开发状态中, 不过,这些 版本都由相应平台的开发商授权并分发。
2.1.1 下载JDK
要想下载 Java 开发具包,可以访问 Oracle 网站:www.oracle.com/technetwork/java/javase/ downloads, 在得到所需的软件之前必须弄清楚大量专业术语。请看表 2-1 的总结。
你已经看到, JDK 是 Java Development Kit 的缩写。有点混乱的是: 这个工具包的版本 1.2 ~ 版本 1.4 被称为 Java SDK ( 软件开发包, Software Development Kit )。 在某些场合下, 还可以看到这个过时的术语。另外, 还有一个术语是 Java 运行时环境( JRE), 它包含虚拟机 但不包含编译器。这并不是开发者想要的环境, 而是专门为不需要编译器的用户而提供。
接下来,Java SE 会大量出现, 相对于 Java EE ( Enterprise Edition) 和 Java ME ( Micro Edition), 它是 Java 的标准版。
Java 2 这种提法始于 1998 年。当时 Sum 公司的销售人员感觉增加小数点后面的数值改变版本号并没有反映出 JDK 1.2 的重大改进。但是,由于在发布之后才意识到这个问题, 所 以决定开发工具包的版本号仍然沿用 1.2, 接下来的版本是 1.3、 1.4 和 5.0, 但是,Java 平台被重新命名为 Java 2。因此,就有了 Java 2 Standard Edition Software Development Kit ( Java 2 标准版软件开发包)的 5.0 版,即 J2SE SDK 5.0。
幸运的是,2006 年版本号得到简化。Java 标准版的下一个版本取名为 Java SE 6, 后来 又有了 Java SE 7 和 Java SE 8。不过,“内部” 版本号分别是 1.6.0、 1.7.0 和 1.8.0。
当 Oracle 为解决一些紧急问题做出某些微小的版本改变时, 将其称为更新。例如:Java SE 8u31 是 JavaSE 8 的第 31 次更新, 它的内部版本号是 1.8.0_31。 更新不需要安装在前一 个版本上,它会包含整个 JDK 的最新版本。另外, 并不是所有更新都公开发布,所以如果 “ 更新 31” 之后没有“ 更新 32”,你也不用惊慌。
对于 Windows 或 Linux, 需要在 x86 ( 32 位) 和 x64 ( 64 位)版本之间做出选择。应当选择与你的操作系统体系结构匹配的版本。
对于 Linux, 还可以在 RPM 文件和 .tar.gz 文件之间做出选择。我们建议使用后者,可以在你希望的任何位置直接解压缩这个压缩包。
现在你已经了解了如何选择适当的 JDK。下面做一个小结:
•你需要的是 JDK (Java SE 开发包,) 而不是 JRE。
•Windows 或 Linux: 32 位选择 x86,64 位以 x64c
•Linux:选择 .tar.gz 版本。
接受许可协议,然后下载文件。
注释:Oracle 提供了 一个捆绑包, 其中包含 Java 开发包( JDK) 和 NetBeans 集成开发 环境。 建议现在不要安装任何捆绑包, 而只需安装 Java 开发包。如果以后你打算使用 NetBeans, 可以再从 http://netbeans.org 下载。
2.1.2 设置JDK
下载 JDK 之后,需要安装这个开发包并明确要在哪里安装,后面还会需要这个信息。
•在 Windows 上,启动安装程序。会询问你要在哪里安装 JDK。最好不要接受路径名中包含空格的默认位置, 如 c:\Program Files\Java\jdkl.8.0_verj/o«。取出路径名中的 Program Files 部分就可以了。
•在 Mac 上,运行安装程序。这会把软件安装到 /Libraiy/Java/JavaV _ lMachines/jdkl.8.0_ version«.jdk/Contents/Home。用 Finder 找到这个目录。
•在 Linux 上,只需要把 .tar.gz 文件解压缩到你选择的某个位置, 如你的主目录,或者 /opt。如果从 RPM 文件安装, 则要反复检查是否安装在 /usr/java/jdk1.8.0_version。
在这本书中, 安装目录用jdk表示。例如, 谈到jdk/bin 目录时, 是指 /opt/jdkl.8.0_31/ bin 或 c:\Java\jdk1.8.0_31\bin 目录。
在 Windows 或 Linux 上安装 JDK 时, 还需要另外完成一个步骤:将jdk/bin 目录增加到 执行路径中--执行路径是操作系统查找可执行文件时所遍历的目录列表。
•在 Linux 上,需要在 ~/.bashrc 或 ~/.bash_profile 文件的最后增加这样一行: export PATH=/ d/t/bin:$PATH
一定要使用 JDK 的正确路径, 如 /opt/jdkl.8.0_31。
•在 Windows 上, 启动控制面板,选择“ 系统与安全’(System and Security) ,再选择‘ 系 统”(System),选择高级系统设置(Advanced System Settings)(参见图 2-1 。) 在系统属性(SystemProperties) 对话框中,点击“ 高级” (Advanced) 标签页,然后点击“ 环境” ( Environment ) 按钮。
滚动“ 系统变量”(System Variables) 列表, 直到找到名为 Path 的变量。点击“ 编辑”(Edit)按钮(参见图 2-2 )。将jdk\bin 目录增加到路径最前面, 并用一个分号分隔新增的这一项, 如下所示:
jdk\bin\other stuff
注意要把_/成替换为具体的 Java 安装路径, 如 c:\Java\jdkL8.0_31。 如果忽视前面的建议, 想要保留 Program Files 部分, 则要把整个路径用双引号引起来:"c:\ProgramFiles\Java\ jdkl.8.0_31\bin"; 其他目录。
保存所做的设置。之后新打开的所有控制台窗口都会有正确的路径。
可以如下测试设置是否正确:打开一个终端窗口, 键入: javac -version 然后按回车键。应该能看到显示以下信息: javac 1.8.0_31
如果得到诸如“ javac: command not found”(javac:: 命令未找到)或 “ The name specified is not recognized as an internal or external command, operable program or batch file” (指定名不 是一个内部或外部命令、 可执行的程序或批文件,) 就需要退回去反复检査你的安装。
2.1.3 安装库源文件和文档
库源文件在 JDK 中以一个压缩文件 src.Zip 的形式发布,必须将其解压缩后才能够访问源代码。 建议按照下面所述的步骤进行操作。很简单:
1 ) 确保 JDK 已经安装, 并且 jdk/bin 目录在执行路径中。
2 ) 在主目录中建立一个目录 javasrc。 如果愿意,可以在一个终端窗口完成这个步骤。 mkdir javasrc
3 ) jdk 目录下找到文件 src.zip。
4 ) 将 src.zip 文件解压缩到 javasrc 目录。在一个终端窗口中,可以执行以下命令:
cd javasrc
jar xvf yrffc/src.zip
cd . .
提示:src.zip 文件中包含了所有公共类库的源代码。要想获得更多的源代码(例如: 编译器、 虚拟机、本地方法以及私有辅助类) , 请访问网站:http://jdk8.java.net。
文档包含在一个压缩文件中,它是一个独立于JDK 的压缩文件。可以直接从网站 http:// www.oracle.com/technetwork/java/javase/downloads 下载这个文档。操作步骤如下:
1 ) 下载文档压缩文件。这个文件名为 jdk-version-docs-all.zip, 其中的version表示版本号,例如 8u31。
2 ) 解压缩这个文件,将 doc 目录重命名为一个更有描述性的名字, 如 javadoc。如果愿 意, 可以从命令行完成这个工作:
jar xvf Downloads/jdk-version-docs-all.zip
mv doc javadoc
这里 version 是相应的版本号。
3 ) 在浏览器中导航到 javadoc/api/index.html, 将这个页面增加到书签。
还要安装本书的程序示例。 可以从 http://horstmann.com/corejava 下载示例。 这些程序打包在一个 zip 文件 corejava.zip *。可以将程序解压缩到你的主目录。它们会放在目录 corejava 中。如果愿意,可以从命令行完成这个工作:
jar xvf Downloads/corejava.zip
2.2 使用命令行工具
如果在此之前有过使用 Microsoft Visual Studio 等开发环境编程的经验, 你可能会习惯于有一个内置文本编辑器、 用于编译和启动程序的菜单以及调试工具的系统。JDK 完全没有这些功能。所有工作都要在终端窗口中键入命令来完成。这听起来很麻烦, 不过确实是一个基本技能。第一次安装 Java 时, 你可能希望在安装开发环境之前先检査 Java 的安装是否正确。 另外,通过自己执行基本步骤, 你可以更好地理解开发环境的后台工作。
不过, 掌握了编译和运行 Java 程序的基本步骤之后, 你可能就会希望使用专业的开发环 境。下一节会介绍如何使用开发环境。
首先介绍较难的方法:从命令行编译并运行 Java 程序。
1 ) 打开一个终端窗口
2 ) 进入 corejava/vlch02/Welcome目录( CoreJava 是安装本书示例代码的目录,请参看2.1.3)
3 ) 键入下面的命令
javac Welcome.java
java Welcome
然后,在终端窗口中看到图 2-3 所示的输出。
祝贺你!你已经编译并运行了第一个 Java 程序。
那么,刚才都进行了哪些操作呢? javac 程序是一个Java编译器。它将文件 Welcome, java 编译成 Welcome.class。java 程序启动Java 虚拟机。虚拟机执行编译器放在 class 文件中的字节码。
Welcome 程序非常简单。它只是向控制台输出了一条消息。
public class Welcome{ public static void main(String口 args){
String greeting = "Welcome to Core Java!"; System.out.println(greeting); for (int i = 0; i < greeting.lengthO; i ++) System.out.print("=''); System.out.printlnO; } }
在使用可视化开发环境的年代, 许多程序员对于在终端窗口中运行程序已经很生疏了。 常常会出现很多错误,最终导致令人沮丧的结果。
一定要注意以下几点:
•如果手工输入源程序, 一定要注意大小写。尤其是类名为 Welcome, 而不是 welcome 或 WELCOME。
•编译器需要一个文件名 (Welcome.java),而运行程序时,只需要指定类名 (Welcome),不要带扩展名 .java 或 .class。
•如果看到诸如 Bad command or file name 或 javacxommand not found 这类消息, 就要返回去反复检查安装是否有问题, 特别是执行路径的设置。
•如果 javac 报告了一个错误, 指出无法找到 Welcome.java,就应该检查目录中是否存 在这个文件
在 Linux 环境下, 检查 Welcome.java 是否以正确的大写字母开头。
在 Windows 环境下, 使用命令 dir, 而不要使用图形浏览器工具。有些文本编辑器(特别是 Notepad) 在每个文件名后面要添加扩展名 .txt。如果使用 Notepad 编辑 Welcome.java 就 会存为 Welcome.java.txt。 对于默认的 Windows 设置, 浏览器与 Notepad 都隐含 .txt 扩展名, 这是因为这个扩展名属于“ 已知的文件类型”。此时,需要重新命名这个文件, 使用命令 ren, 或是另存一次, 为文件名加一对双引号,如:“ Welcome.java”。
•如果运行程序之后,收到关于 java.lang.NoClassDefFoundError 的错误消息, 就应该仔细地检查出问题的类的名字。
如果收到关于 welcome ( w 为小写)的错误消息, 就应该重新执行命令:java Welcome (W 为大写)。记住,Java 区分大小写。
如果收到有关 Welcome/java 的错误信息,这说明你错误地键人了 java Welcome, java, 应该重新执行命令 java Welcome。
•如果键入 java Welcome, 而虚拟机没有找到 Welcome 类, 就应该检查一下是否有人设 置了系统的 CLASSPATH 环境变量(将这个变量设置为全局并不是一个提倡的做法, 然而,Windows 中有些比较差的软件安装程序就是这样做的)。可以像设置 PATH 环 境变量一样设置 CLASSPATH,不过这里将删除这个设置。
提示: 在 http://docs.oracle.com/javase/tutorial/getStarted/cupojava/ 上有一个很好的教程。 其中提到了初学者经常容易犯的一些错误。
2.3 使用集成开发环境
上一节中,你已经了解了如何从命令行编译和运行一个 Java 程序。这是一个很有用的技能,不过对于大多数日常工作来说, 都应当使用集成开发环境。这些环境非常强大,也很方便, 不使用这些环境有些不合情理。我们可以免费得到一些很棒的开发环境, 如 Eclipse、 NetBeans 和IntelliJ IDEA 程序。这一章中,我们将学习如何从 Eclipse 起步。当然, 如果你喜欢其他开发环境, 学习本书时也完全可以使用你喜欢的环境。
本节将介绍如何使用 Eclipse 编译一个程序。Eclipse 是 一个可以从网站 http://eclipse. org/downloads 上免费下载得到的集成开发环 境。Eclipse 已经有面 向 Linux 、 Mac OS X、 Solaris 和 Windows 的 版 本。 访问下载网站时, 选择“ Eclipse IDE for Java Developers”。 再根据你的操作系统选择 32 位或 64 位版本。
将 Eclipse 解压缩到你选择的位置, 执行这个 zip 文件中的 eclipse 程序。
下面是用 Eclipse 编写程序的一般步骤。
1 )启动Eclipse之后,从菜单选择File->New->Project。
2 ) 从向导对话框中选择 Java Project。
3 ) 点击 Next 按钮, 不选中“ Use default location“ 复选框。点击Browse导航到corejava/ vlch02/Welcome 目录
4 ) 点击 Finish 按钮。 这个工程已经创建完成了。
5 ) 点击工程窗口左边窗格中的三角,直到找到 Welcome.java 并双击„ 现在应该看到带 有程序代码的窗口了。
6 ) 用鼠标右键点击最左侧窗格中的工程名( Welcome ), 选 择 Run—>Run As—>Java Application。 程序输出会显示在控制台窗格中。
可以假定,这个程序没有输入错误或 bug (毕竟, 这段代码只有几行。) 为了说明问题, 假定在代码中不小心出现了录入错误(或者甚至语法错误。) 试着将原来的程序修改一下,让它包含一些录入错误,例如,将 String 的大小写弄错:
string greeting = "Welcome to Core Java!";
注意 string 下面的波折线。点击源代码下标签页中的 Problems, 展 开小角,会看到一个错误消息, 指出有一个未知的 string 类型。点击这个错误消息。 光标会移到编辑窗口中相应的代码行,可以在这里纠正错误。利用这个特性可以快速地修正错误。
提示:通常, Eclipse 错误报告会伴有一个灯泡图标。点击这个图标可以得到一个建议解决这个错误的方案列表。
2.4 运行图形化应用程序
Welcome 程序并不会引起人们的兴奋。接下来, 给出一个图形化应用程序。这个程序是 一个简单的图像文件查看器( viewer), 它可以加载并显示一个图像。首先, 由命令行编译并运行这个程序。
1 ) 打开一个终端窗口。
2 ) 进入 corejava/vlch02/ImageViewe。
3 ) 输入:
javac ImageViewer.java
java ImageViewer
将弹出一个标题栏为 ImageViewer 的新程序窗口。
现在, 选择 File->Open, 然后找到一个图像文件并打开它(我们在同一个目录下提供了两个示例文件)。要 关闭这一程序, 只需要点击标题栏中的关闭按钮或者从菜单中选择 File-> Exit。
下面快速地浏览一下源代码(程序清单 2-2 。) 这个程序比第一个程序要长很多, 但是只要想一想用 C 或 C++ 编写同样功能的应用程序所需要的代码量, 就不会觉得它太复杂了。 本书将在第 10 章 〜 第 12 章介绍如何编写像这样的图形化应用程序
2.5 构建并运行applet
本书给出的前两个程序是 Java 应用程序。它们与所有本地程序一样, 是独立的程序。然 而, 正如第 1 章提到的, 有关 Java 的大量宣传都在炫耀 Java 在浏览器中运行 applet 的能力。 如果你对“ 过去的记忆” 感兴趣, 可以继续阅读下面的内容来了解如何构建和运行一个 applet, 以及如何在 Web 浏览器中显示;如果你不感兴趣, 完全可以跳过这个例子,直接转到第 3 章。(这里直接跳过)