第1章 开发环境搭建

熟悉Java的开发运行环境是成为一个Java程序员的第一步,也是学好Java的第一步。本章详细介绍如何安装并配置JDK,以及如何编译Java源程序并运行经编译生成的字节码类文件,解决初学者在学习Java时碰到的各种常见问题。通过本章的学习,你会发现,通向Java殿堂的大门已经为你打开。

实例1 下载、安装并配置JDK

JDK中包含了Java开发中必需的工具和Java运行环境(Java Runtime Environment,JRE)。可以从http://java.sun.com下载JDK,笔者使用的JDK的版本为1.6。

技术要点

在使用之前,需要在环境变量中对JDK进行相应的配置。下面将以Windows操作系统为例来讲解配置JDK的要点:

• 在安装JDK时需要将有关杀毒软件关闭,否则在安装时出现无法更新的错误。

• 设置JAVA_HOME环境变量。

• 设置CLASSPATH环境变量。

• 更新PATH环境变量的值。

实现步骤

(1)双击可执行文件jdk-6-windows-i586.exe,安装JDK。安装程序先要进行初始化,初始化完成后的界面如图1-1所示。

(2)选择接受许可证协议,继续安装,如图1-2所示。

图1-1 JDK安装向导

图1-2 接受许可证协议

(3)选择要安装的目录,如图1-3所示。

(4)自定义安装程序的功能,除“源代码”外建议安装其他全部功能,如图1-4所示。

图1-3 选择安装目录

图1-4 自定义安装

(5)显示安装进度,如图1-5所示。

(6)显示安装完成界面,单击“完成(F)”按钮,JDK安装完成,如图1-6所示。

图1-5 显示安装进度

图1-6 JDK安装完成

(7)接下来在做第一个Java程序之前,先配置一下开发的环境变量。首先在桌面上用鼠标右键单击“我的电脑”,依次选择“属性“→“高级”→“环境变量”选项。

(8)新建一个系统变量,名称为JAVA_HOME,值为JDK的安装目录,如图1-7所示。单击“确定”按钮。也可以在控制台中通过下列命令来设置:

set JAVA_HOME=D:\JDK1.6

(9)CLASSPATH表示搜索Java类的路径,这个路径可以包含一些Jar归档文件,也可以是一个目录。设置如图1-8所示。

图1-7 设置JAVA_HOME

图1-8 设置CLASSPATH

PATH变量是系统搜索可执行程序的路径。编辑PATH系统变量,在最后添加“;%JAVA_HOME%\bin”字符串。也可以这样设置:

set PATH=%PATH%;%JAVA_HOME%\bin;

实例2 第一个Java程序

Java的程序有两类:一类是只能嵌入在网页文件中,通过浏览器运行的程序,被称为Applet,即小应用程序。除此之外的Java程序,都被称为Application,即应用程序。开发环境搭建完毕,下面开始编写第一个Java程序,并讲解DOC命令下编译和运行的方法。

技术要点

本节通过一个实例讲述Java程序编写规范及格式。技术要点如下:

• Java程序是在JDK基础上开发的,Java程序中的类必须编过编译才能在JDK虚拟机上运行,否则将出现找不到类文件的错误。

• Java源程序是区分大小写的,如该程序中的System单词必须以大写字母开头,否则编译无法通过。

实现步骤

(1)使用记事本或具有编辑功能的工具编写一个Java程序,名为HelloWorld.java。

(2)代码如下所示:

public class HelloWorld                           //定义一个类,名为HelloWorld
{
    public void sayHelloWorld(){                  //声明一个方法
          System.out.println("hello world");      //为打印语句,要显示的内容
    }
    public static void main(String []args){       //Java程序的主入口方法
          HelloWorld hello=new HelloWorld();      //创建HelloWorld类的实例
          hello.sayHelloWorld();                  //调用方法
    }
}

(3)编写完HelloWorld.java后需要对其进行编译。笔者将HelloWorld.java放在E:\HelloWorld目录下。单击“开始”→“运行”,输入cmd并单击“确定”按钮,在命令提示符下进入源代码所在目录。命令如下。输入E:,并按回车键;输入cd HelloWorld,并按回车键。然后输入命令javac HelloWorld.java,并按回车键,如图1-9所示。编译成功后,在E:\HelloWorld目录下出现文件HelloWorld.class。这是Java类文件编译后的字节码文件。

(4)运行程序。命令提示符为java HelloWorld,如图1-10所示。其中黑框内容即为运行结果。

图1-9 编译HelloWorld.java

图1-10 运行HelloWorld.java

源程序解读

(1)javac对Java类文件进行编译的命令符。语法:javac 文件名.后缀名。如果环境变量配置不正确,会出现“javac不是内部或外部命令”、“Exception in thread "main" java.lang. NoClassDefFoundError:HelloWorld”的错误。对于错误的解决我们将在后面的常见问题中进行讲解。

(2)用java运行程序输出结果时,不带文件的扩展名。

实例3 在Eclipse中创建第一个Java程序

Eclipse集成开发环境的易用性、扩展性以及开放性,极大地赢得众多开发公司的青睐。

Eclipse是一种通用工具平台—普能适用的开放式扩展IDE。所谓普能适用,是它不仅仅可以用于开发Java程序,也可以用来开发C/C++、PHP;所谓开放式扩展,就是任何人都可以扩展Eclipse的功能。Eclipse的设计思想是:一切皆为插件。其为插件之间的协同工作提供了很好的支持,可以说是无缝结合。Eclipse是动态载入并调用这些插件的。

在JDK基础之上创建Java项目,需要进行一些环境的配置,而且也不利于多项目的开发和应用。为此我们在集成开发工具Eclipse中创建Java项目,以便进行项目的扩展和维护。

技术要点

• 为了便于Java程序开发,需要安装集成开发工具Eclipse。Eclipse下载网址为http://www.eclipse.org。下载后解压缩即可使用,直接下载的Eclipse是英文版的,可以下载中文语言包NLpack1-eclipse-SDK-3.2.1-win32.zip从而完成Eclipse的汉化。双击Eclipse执行文件可以运行Eclipse。笔者的开发空间为F:\delevopSpace。后面都将在这个开发空间开发项目。

• Eclipse中有一个增量编译器,每保存一个Java文件时,它就会自动编译该文件。也称为“自动构建”。如果不需要这种功能,可以在“项目”→“自动构建”命令中取消。

实现步骤

(1)选择“文件”→“新建”→“项目”,或在左边的包资源管理器中用鼠标右击“新建”→“项目”(也可以使用快捷键Ctrl+N)。在弹出的对话框中选择Java项目,如图1-11所示。

(2)单击“下一步”按钮,在弹出的对话框中填写项目名称,如图1-12所示。笔者的项目名为Demo。推荐项目布局选中“创建单独的源文件夹和输出文件夹”。然后配置默认值,创建两个目录:src和bin。前者存放Java源文件,后者存放编译后产生的.class文件。最后单击“确定”按钮。

图1-11 创建Java项目

图1-12 填写项目名称

(3)选中项目下的src右击新建包。不建包也行,可放在默认src包下,但防止类的同名冲突,也不利于管理。输入包名为com.zf.s2。然后选中该包右击新建一个类,并选中public static void main(String[] args)复选框,如图1-13所示。填写完毕后单击“完成”按钮。

图1-13 新建类

(4)在com.zf.s2下面生成HelloWorld.java文件,将文件修改为如下代码:

package com.zf.s2;                                         //创建一个包
public class HelloWorld { //第一个Java程序 public void sayHelloWorld(String str){ //声明一个带参数的方法 System.out.println("传入的参数:"+str); //输出传入的参数 System.out.println(str+" say HelloWorld"); //输出字符串 } public static void main(String[] args) { //Java程序的主入口方法 HelloWorld hello=new HelloWorld(); //创建类实例 hello.sayHelloWorld("ABC"); //调用类的方法 } }

(5)运行结果如下所示:

传入的参数:ABC
ABC say HelloWorld

源程序解读

(1)本实例开发第一个在Eclipse下的Java程序。Java程序必须有个主方法作为程序执行的入口处。主方法的名称必须为main。

(2)在main()方法中实例化HelloWorld对象,并将字符串作为参数传入调用的sayHelloWorld()方法中。

常见问题 javac不是内部或者外部命令

javac工具读取用Java编程语言编写的类和接口定义,并将它们编译成字节码文件。

技术要点

本节常见问题,将根据配置的环境变量这一环节查看错误根源。技术要点如下:

• 有两种方法可将源代码文件名传递给javac。一种是如果源文件数量少,在命令提示行上列出文件名即可。另一种是如果源文件数量多,则将源文件名列在一个文件中,名称间用空格或回车行来进行分隔。然后在javac命令行中使用该列表文件名,文件名前冠以@字符。

• 默认情况下,Java编译器将每个类文件与其源文件放在同一目录中。

实现步骤

图1-14 编译出错

(1)在cmd命令下编译Java文件会出现“javac不是内部或者外部命令,也不是可运行的程序或批处理文件。”提示信息,如图1-14所示。

(2)输入命令提示符path,并按回车键。看是否正确设置JDK的运行程序。如果设置不正确,一种方法是直接更改环境变量;另一种方法是使用命令提示符进行操作。操作如下:

set path=D:\JDK1.6\bin
set classpath=D:\JDK1.6\lib\tools.jar;D:\JDK1.6\lib\dt.jar;D:\JDK1.6\bin

(3)重新单击“开始”→“运行”,输入cmd命令重新进行操作。此时问题解决。

常见问题 找不到类文件

JDK根据命令行中的classpath选项中指定的路径去寻找.class文件,如果找不到再到系统的系统环境变量classpath中去寻找。这种情况下,即使没有设置全局的classpath环境变量,由于已经在命令行中正确地指定类路径,也可以运行。但当找不到指定的字节码类文件,则运行出错。

技术要点

• 编译生成的字节码类文件找不到,一是没有找到所在的目录,二是没有正确配置classpath路径。

• 通过系统的系统变量设置classpath路径即可,或在命令提示符下进行设置。

实现步骤

(1)在cmd命令下运行编译后的文件,有时会出现找不到类文件的错误,如图1-15所示。

(2)找到java源文件所在目录,发现原来没有编译后的字节码类文件。而编译后的字节码类文件的目录在E:\Hello下。有两种解决问题的办法。

第一种:在命令行模式下输入

C:/>D:\JDK1.6\bin\java -classpath E:\Hello HelloWorld

第二种:在命令行模式下输入

c:/>set classpath=E:\Hello
c:/>D:\JDK1.6\bin\java HelloWorld

(3)以上两种方法本质上都是设置classpath,使得Java能够找到自己定义的类。

图1-15 运行出错

常见问题 语法错误

Java语言规范设计了语法规则。如果在编写代码过程中,违反了Java的语法规范,编译器会显示语法错误信息。该信息包含错误类型和发生错误的代码在程序中的位置。

技术要点

• 编码规范包括很多内容,如代码的编写规则、命名规则、代码注释等相关内容。

• 在每行代码结束前要用分号分隔。

• 类的名字必须由以大写字母开头而其他字母都小写的单词组成,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。

实现步骤

(1)将前面编写的第一个Java文件HelloWorld.java中的输出语句后面的分号去掉。

(2)代码如下所示:

public class HelloWorld                             //定义一个类,名为HelloWorld
{
    public void sayHelloWorld(){                    //声明一个方法
          System.out.println("hello world")         //为打印语句,要显示的内容
    }
    public static void main(String []args){         //Java程序的主入口方法
          HelloWorld hello=new HelloWorld();        //创建HelloWorld类的实例
          hello.sayHelloWorld();                    //调用方法
    }
}

(3)在命令提示符中输入javac HelloWorld.java,结果如图1-16所示。

图1-16 语法错误

源程序解读

本示例演示了由于人为原因产生的错误。在编译期间发生任何类型的错误都会导致无法产生.class文件。所以读者需要仔细分析错误类型,细致检查程序中的错误,直到源程序顺利编译。