名师讲坛:Java开发实战经典(第2版)
上QQ阅读APP看书,第一时间看更新

1.2 Java开发环境搭建

Java的开发环境主要使用JDK,本书中使用的JDK版本是JDK 1.8版本。读者可以直接从Oracle的官方网站中下载此版本,地址为:http:www.oracle.com,如图1-6所示。

图1-6 Oracle公司首页

1.2.1 JDK的安装与配置

1.JDK版本的选择

图1-7 选择JDK的安装目录

本次配置将在Windows中完成,由于使用的是64位版本的JDK,所以建议也安装64位版本的JDK。同时在安装前为了避免不必要的麻烦建议读者关闭本机的防火墙。在安装过程中除了会安装JDK外,也会安装新的JRE。

2.JDK的安装

启动JDK的安装程序后会首先询问用户安装的JDK目录,为了安装方便,本次将JDK安装在了E:\java目录下,如图1-7所示。在JDK安装完成之后会出现安装JRE的路径选择,本次将JRE也安装在E:\java目录下,如图1-8所示。在安装JRE的过程中可以发现Java的使用范围非常广泛,如图1-9所示。

图1-8 选择JRE的安装目录

图1-9 JRE安装过程

3.JDK的配置

JDK安装完成后,可以看见如图1-10所示的安装文件夹,其中的bin文件夹是将来要使用的各种Java命令,但是这些命令本身并不在Windows环境之中,所以如果要想使用这些命令,则首先必须在Windows中注册此命令。

图1-10 JDK安装目录

设置的流程为:选择【计算机】→【属性】命令,如图1-11所示,打开【高级系统设置】对话框,如图1-12所示,选择【高级】选项卡,单击【环境变量】按钮,打开【系统变量】对话框,在【变量值】文本框的最后加上路径,进行path信息编辑。

图1-11 计算机属性

图1-12 高级系统设置

在编辑path时,可直接设置Java的安装路径。即在【环境变量】对话框中单击【系统变量】栏中的【编辑】按钮,弹出【编辑系统变量】对话框,在【变量值】文本框的最后加上路径,并且使用“;”与其他路径进行分割,如加入内容“E:\Java\jdk1.8.0_74\bin”,如图1-13所示。

设置完后单击【确定】按钮就可以保存设置,然后启动cmd命令行方式,输入javac,如果出现了图1-14所显示的内容,则表示JDK配置成功。

图1-13 配置path属性内容

图1-14 验证JDK是否配置成功

注意

path修改后要重新启动命令行方式。

有些读者在进行环境设置时可能会出现此命令不是系统内部命令的提示,那么有可能造成这种问题的原因是,在配置环境属性前命令行方式已经启动,之后再配置的path路径,则此环境肯定是无法立即生效的,此时可以重新启动命令行方式,即可把新的设置读取进来。

注意

javac命令的作用。

javac.exe是Java本身提供的编译命令,主要目的是用来将*.java文件编译成*.class文件。此命令本身不属于Windows,所以在使用的时候需要单独配置,此命令的具体用法将在后面介绍。

1.2.2 第1个Java程序的实现

Java程序分为两种类型:一种是Application程序,另外一种是Applet程序,其中有main()方法的程序主要都是Application程序,本书主要使用Application程序进行讲解,Applet程序主要应用在网页编程上面,现在已经基本上不再使用,所以本书将不再做任何介绍。

1.打开编程环境
2.程序的编写

本书还是以屏幕上输出“Hello World!!”的提示信息为第1个程序,代码如下所示。

【例1.1】Hello.java

程序执行结果:

3.程序的运行

将上面的程序保存为Hello.java,保存路径为e:\mydemo\Hello.java,之后按照以下的步骤进行操作:

  • 在命令行方式下,进入到程序所在的目录,执行javac Hello.java,对程序进行编译,编译完成之后可以发现在目录之中多了一个Hello.class的文件,此文件就是最终要使用的文件。

图1-15 运行Hello.java程序

  • 程序编译之后,就可以输入java Hello,就可以在JVM上解释Java程序。

具体的操作过程可以参考图1-15完成:

虽然一个小小的信息输出程序并不麻烦,但是需要清楚的是,任何语言都有自己的语法和语义,所以下面针对Java程序代码进行分析。

(1)Java中的程序是以类为单位,所以所有的程序都必须在class定义范畴之内,可是对于类的定义有两种形式:

在本次程序中使用的是第2种形式,而“public class Hello{}”代码中的Hello就是类名称。

那么如果将现在的代码修改为public class HelloABC{},而且文件名称依然是Hello.java,则在编译时将出现如下的错误提示信息:

这是因为在开发中如果类的定义使用了public class声明,那么文件名称必须与类名称保持一致。如果现在没有使用public class,而使用了class声明“class HelloABC{}”。此时文件名称与类名称不相同,但是最终生成的*.class文件的名称将为HelloABC.class,如图1-16所示。

图1-16 class定义的类编译后结果

也就是说使用class定义的类,文件名称可以与类名称不同,但是生成的*.class文件的名称就是class定义的类名称,那么执行的一定是*.class的文件名称,即执行java HelloABC。

在一个*.java文件里面可以同时存在有多个class定义,并且在编译后会自动将不同的class保存在不同的*.class文件中。

【例1.2】在一个*.java文件定义多个class

此时程序中一共存在3个class声明,所以编译后会形成3个class文件,包括A.class、B.class、HelloABC.class,如图1-17所示。

通过以上的分析,可以得出下面的结论:

①public class定义要求文件名称与类名称保持一致,而在*.java文件中只允许有一个public class定义。

图1-17 编译后产生多个*.class文件

②class定义的类文件名称可以与类名称不一致,但那是在编译后每一个使用class声明的类都会生成一个*.class文件,也就是说一个Java文件可以产生多个class文件。

提示

实际的开发要求。

从实际的开发来讲一个*.java文件里面一般只会定义一个public class,但是现阶段属于学习阶段,所以会在一个*.java文件里面定义多个类。

需要特别注意的是,类名称要求每个单词的首字母大写,例如HelloDemo、TestDemo,此为Java命名规范,开发者必须严格遵守。

(2)主方法。

主方法(main())是一切程序的起点,所有的程序代码都从主方法开始执行,Java中的主方法定义如下:

在以后的学习中为了方便,将把主方法所在的类称为主类,并且主类都使用publicclass声明。

(3)系统输出。

如果要在屏幕上显示信息,则可以使用:

①System.out.println(),输出之后追加一个换行;

②System.out.print():输出之后不追加换行。

【例1.3】观察输出

程序执行结果:

上面的程序在输出时没有使用换行,所以所有的输出结果都在一行完成。

提示

注意程序中的大小写。

读者在编写以上程序一定要注意字母的大小写问题,因为在Java中是严格区分的。另外,为了读者方便代码的运行,强烈建议在此处的时候按照本书所提供的代码样式进行编写。

1.2.3 classpath属性的作用

在Java中可以使用set classpath命令指定Java类的执行路径。下面通过一个实验来了解classpath的作用,假设这里的Hello.class类位于e:\mydemo目录下。

在任意盘符的命令行窗口执行下面的指令:

然后在E盘根目录下执行java Hello,如图1-18所示。

由上面的输出结果可以发现,虽然在E盘根目录中并没有Hello.class文件,但是也可以用java Hello执行Hello.class文件,之所以会有这种结果,就是因为在操作中使用了set classpath命令,将类的加载路径指向了e:\mydemo目录,所以在运行时,会从e:\mydemo目录查找所需要的类。

提示

classpath与JVM的关系。

classpath主要指的是类的运行路径,实际上在读者执行Java命令时,对于本地的操作系统来说就意味着启动了一个JVM。JVM在运行时需要通过classpath加载所需要的类,而默认情况下classpath是指向当前目录(当前命令行窗口所在的目录)的,所以会从此目录下直接查找。

上述方法实际上并不好用,最好的做法还是从当前所在路径中加载所需要的程序类。在设置classpath时,最好将classpath指向当前目录,即所有的class文件都从当前文件夹中开始查找,路径设置为“.”:

但是这样的操作都属于每一个命令行窗口的单独设置,如果想让CLASSPATH针对全局都起作用,可以在环境属性中添加CLASSPATH配置,如图1-19所示。

图1-18 classpath设置

图1-19 定义CLASSPATH环境属性

常见面试题分析:请解释PATH和CLASSPATH的区别?

  • PATH:是操作系统的环境属性,指的是可以执行命令的程序路径;
  • CLASSPATH:是所有*.class文件的执行路径,Java命令执行时将利用此路径加载所需要的*.class文件。