第2章 Java开发工具及环境设置
Java是很出色的面向对象高级语言,面向对象技术将在第7章介绍,这里只需要读者知道这个概念。正如C语言、C++语言、C#语言一样,任何高级语言都需要一个运行平台,即编写Java语言的计算机应用程序,需要一个编辑、编译和运行的环境,这里将详细介绍Java高级语言的开发工具及相应的环境设置。本章将讲述应用程序的一个开发流程,另外还要讲述开发Java程序所要使用的开发工具,最后会编写一个最简单的Java程序,并通过对程序的具体分析,使读者能够对编写Java代码有一个初步的认识。
本章重点:
□ 开发工具的下载和安装。
□ JDK的组成和配置。
□ 编写并运行简单的Java程序。
2.1 Java开发工具简介
Java语言是一种解释型的语言,即读一句程序执行一句,这样就需要一个解释器完成源程序到机器语言的翻译过程。同时Java是跨平台的语言,跨平台是指Java程序可以在安装任何操作系统的计算机上运行,其前提是需要安装Java虚拟机(JVM),而虚拟机和解释器都是JDK的一部分,JDK是Java开发工具集,它包含一套工具,如刚才讲的源程序解释器、JVM,还包括编译工具(Javac.exe)、执行程序(Java.exe)等。如果想让运行程序的计算机知道这些工具的位置,并找到这些工具,就需要下载、安装、配置并测试JDK工具。
2.1.1 下载并安装JDK
与Java相关的基础平台都是由Sun公司提供的,开发人员可以通过http://www.oracle.com/ technetwork/java/index.html网站了解有关Java的最新技术,并可以下载相关的软件。Java网站的首页如图2-1所示。
图2-1 Java网站的首页
注意
之所以是Oracle公司网站,而不是Sun公司网站,是因为在2009年8月21日Oracle公司收购了Sun公司。
本书中的代码采用JDK 7.0版本进行开发,因此在Java网站的首页右侧,单击“Java SE 7”链接,进入关于Java SE 7的下载界面,如图2-2所示。
图2-2 Java SE 7的下载界面
在Java SE 7的下载界面中,单击“JDK Platform(JDK) 7”上面的图片按钮,即可进入JDK 7.0的下载界面,如图2-3所示。在JDK 7.0的下载界面中,首先选择“Accept License Agreement”单选按钮,本书采用Windows 32位平台,因此选择“jdk-7-windows-i586.exe”,如图2-4所示。在该界面中,单击“jdk-7-windows-i586.exe”链接,即可下载JDK,如图2-5所示。
图2-3 JDK 7.0的下载界面
图2-4 页面根据前面的选择内容跳转到要下载的界面
图2-5 下载JDK
下载到本地的JDK大约为120MB。下载完就可以进行安装,具体安装步骤如下:
1)双击执行jdk-7-windows-i586.exe安装程序,便可自动解压缩进行安装。首先出现的是安装程序准备界面,如图2-6所示。
图2-6 安装程序准备界面
2)单击“下一步”按钮,准备过程完成后,安装程序会自动打开“自定义安装”界面,在该界面中单击“更改”按钮,就会出现“更改文件夹”界面,如图2-7所示。
图2-7 “更改文件夹”界面
3)选择好相应的路径(如D:\Java\jdk1.7.0),单击“确定”按钮,配置好的“自定义安装”界面如图2-8所示。
图2-8 “自定义安装”界面
4)然后单击“下一步”按钮,JDK即可开始安装。JDK安装完毕后,系统会打开JRE自定义安装界面,在该对话框中同样也可以进行路径的修改,如图2-9所示。
图2-9 JRE自定义安装界面
5)默认JRE的安装路径,也可以将安装路径改为D:\Java\jre7,然后单击“下一步”按钮,即可完成安装。JDK安装完成的界面如图2-10所示。
图2-10 JDK安装完成的界面
2.1.2 设定环境变量
JDK安装完毕后,还不能马上使用。如果想使用JDK实现编译运行Java文件等操作,还需要设定系统的环境变量Path与ClassPath,操作步骤如下:
1)在Windows桌面中,用右键单击“我的电脑”图标,弹出快捷菜单。
2)在弹出的快捷菜单中选择“属性”,弹出“系统属性”对话框。
3)在“系统属性”对话框中,选择“高级”标签下的“环境变量”按钮,弹出“环境变量”对话框,如图2-11所示。
图2-11 “环境变量”对话框
4)单击“系统变量”区域中的“编辑”按钮,在弹出的“编辑系统变量”对话框中,设定系统变量名为Path,变量值为D:\Java\jdk1.7.0\bin,如图2-12所示。
图2-12 编辑系统变量Path
5)单击“系统变量”区域中的“新建”按钮,在弹出的“新建系统变量”对话框中,设定变量名为ClassPath,变量值为D:\Java\jdk1.7.0\lib\dt.jar;D:\Java\jdk1.7.0\lib\tools.jar,如图2-13所示。
图2-13 新建系统变量ClassPath
6)单击“系统变量”区域中的“新建”按钮,在弹出的“新建系统变量”对话框中,设定变量名为JAVA HOME,变量值为D:\Java\jdk1.7.0,如图2-14所示。
图2-14 新建系统变量JAVA HOME
2.1.3 验证JDK环境是否配置成功
为了验证JDK是否配置成功,打开DOS窗口,在命令提示符下输入“java”,然后按Enter键,若输出Java的相关信息,则表示JDK配置成功,如图2-15所示。
图2-15 输出Java的相关信息
2.2 JDK内置工具
Java程序需要运行环境的支持,同时编译、解释Java程序,执行Java应用程序和Java小程序也需要必要的工具,本节重点讲解JDK中包含的5种常用工具,即Javac.exe、Java.exe、appletviewer.exe、Javadoc.exe和Javap.exe。在JDK中还集成了Java虚拟机(JVM),JVM提供了Java程序的运行环境,它负责解释.class文件(Java源程序经过编译后的文件),并提交给机器执行。
注意
这里对JVM不再做过多的说明,读者只要知道它的作用就足够了。
2.2.1 JDK常用工具
JDK是一个开发工具集合,作为实用程序,工具库有5种主要程序。
1)Javac:Java编译器,将Java源代码转换为字节码(生成与源文件名同名的.class文件)。
2)Java:Java解释器,执行Java源程序的字节码。
3)appletviewer:小应用程序浏览器,执行嵌入HTML文件中的Java小程序的Java浏览器。
4)Javadoc:依据Java源程序和说明语句生成各种HTML文档。
5)Javap:Java反汇编器,显示编译类文件中可访问的功能和数据,显示字节码的含义。
2.2.2 JDK常用工具的使用实例
2.2.1节已经详细介绍了各种实用工具的含义,这里就依次介绍如何使用这些工具。
Javac和Java工具在2.3节通过一个Java应用程序详细说明了其用法。这里介绍2.2.1节所列的其他工具的使用,借用2.4节中的Java应用程序JavaApplet.java。图2-16说明如何使用appletviewer。
图2-16 使用appletviewer
说明
这里仅仅说明如何使用该工具,即该工具的语法规则,至于Java Applet如何使用,可以参考2.4节的例子。
图2-17说明如何使用Javadoc。
图2-17 使用Javadoc
说明
这里借用了2.4节中的JavaApplet.java源程序,在图2-17中可以清楚地看到Javadoc工具的 执 行 过 程,首 先 是 加 载 源 文 件JavaApplet.java,创建相关Javadoc信息,然后产生各种html文件,这些文件保存在执行Javadoc命令的当前目录下。至于文件内容,读者只要自己实践一次,打开观察一下就很清楚了,这里不再做过多介绍。
图2-18为在D盘根目录下通过各种Javadoc生成的html文件。图2-19说明如何使用Javap。
图2-18 Javadoc生成的各种html文件
图2-19 使用Javap
说明
这里使用Javap反编译MyFirstJavaProgram.class(源程序可参见2.3节的代码)文件,反编译的结果是该类提供的可访问的方法和属性,这里可访问是指具有public访问权限的方法或静态属性,如在MyFirstJavaProgram.java源文件中,有一个public访问权限的String testString和具有public访问权限的main()方法,同时Java默认的构造函数也具有public访问权限,所以这些都可以通过反编译工具Javap体现出来。
本节详细介绍了JDK的几种常用工具,读者一定要用心体会,自己操作一遍,就可以很快掌握这些工具的用法,尤其是Javac.exe和Java.exe,它们是最常用的两种工具,在2.4节有具体的操作实例,读者可以参考。随着学习的深入,还会附带介绍其他工具(如jar打包工具等),对于初学者首先掌握本节介绍的基本工具是最重要的,这样不会耽误下面的学习内容,同时为深入学习JDK的其他工具打下良好的基础。
2.2.3 Java应用程序的发布工具
jar文件被打包成ZIP文件格式,所以可以使用jar工具实现压缩和解压缩数据。jar工具可以实现应用程序的发布,把应用程序所需要的资源(如类、视频、音频、图片等)打包成.jar文件,该文件具有跨平台特性,可以在任何运行虚拟机的操作系统平台上执行。
jar工具是JDK的一部分,使用该工具实现jar文件的基本功能。jar命令将启动打包工具软件,根据自己的需要调用不同的参数实现资源文件打包。表2-1为jar工具的操作命令格式和功能。
表2-1 jar工具的操作命令和功能列表
2.3 一个简单的Java应用程序
【实例2-1】现在已经完成了JDK的安装和相应的环境设置,下面用Windows下自带的记事本编辑一个Java应用程序,并执行该程序,读者可以通过该程序的编译和执行对Java程序的执行有一个直观的认识。
1)编写源程序:打开记事本,编写如下的Java程序,并保存在D盘根目录下,即D:\MyFirstJavaProgram.java。以下是一个Java应用程序,只输出一句“Hello Java!!!”。
01 //定义一个类
02 public class MyFirstJavaProgram{
03 //程序执行的入口,每个Java应用程序都有一个main()函数
04 public static void main(String args[ ]){ //程序的入口函数
05 //在DOS窗口打印一行字符串:Hello Java!!!
06 System.out.println("Hello Java!!!");
07 }
08 }
【代码说明】第4行的程序很关键,是Java程序中应用程序的入口函数main()。第6行是输出的关键,通过println()方法输出相应的内容。
说明
在初学者编写源代码时,最好选择无格式的文本编辑器,如Windows下的记事本,存储源程序时其扩展名必须是.java。
2)编译源程序:单击“开始”|“运行”命令,在“运行”对话框中输入“cmd”命令,如图2-20所示。
图2-20 “运行”对话框
单击图2-20中的“确定”按钮,打开DOS窗口,进入D盘根目录,在当前目录下输入“javac MyFirstJavaProgram.java”,编译有两个作用:一是检查程序的语法错误,二是导入源程序中需要的类库,编译的结果是.class文件,该文件可以被JVM直接运行。如果编译正确,显示结果如图2-21所示。
图2-21 编译Java源程序
注意
在读者开始使用记事本编辑Java源程序时,可能会出现一些输入法错误,造成程序无法编译,如字符串的双引号使用了中文输入法,则无法通过编译,并提示出现非法字符。
【运行效果】执行程序:在DOS窗口中输入“java MyFirstJavaProgram”,则程序执行结果如图2-22所示。
图2-22 执行Java程序的结果
注意
在使用Java.exe工具执行编译过的Java程序时,需要执行的文件名就是源文件名,但不需要文件后缀(如.class)。执行MyFirstJavaProgram时,只需要输入java MyFirstJavaProgram,而不是java MyFirstJavaProgram.class。
2.4 一个简单的Java Applet应用程序
还有一种小应用程序,即Applet,其实它就是一段Java代码,但这段代码可以以适当的方式嵌入到HTML页面。这里举一个简单的例子,让读者对Java语言在网络上的应用有直观和初步的认识。
2.4.1 编写一个Java Applet
首先打开记事本,编写代码如下所示。将文件保存在D盘根目录下,文件名设置为JavaApplet.java。这是一个简单的Applet应用程序,只输出一句话“This is my first Java Applet!”。
01 //下面两行导入实现Applet需要的类库 02 import java.applet.Applet; 03 import java.awt .*; 04 //通过继承方式定义并实现一个Applet类JavaApplet 05 public class JavaApplet extends Applet{ 06 public void paint(Graphics g){ 07 //调用Graphics对象g的drawString方法,在html页面的指定位置打印一行字符串 08 g.drawString(“This is my first Java Applet!”,20,10); 09 } 10 }
【代码说明】第2~3行导入实现Applet需要的类库,通过import关键字执行导入。第5行创建一个类Java Applet。第8行输出用户能看到的结果。
2.4.2 编写承载Java Applet的HTML文件
打开一个记事本,编写如下代码,同样保存在D盘根目录下,文件名为Applet.html,这是一个HTML页面文件。
01 <html> <!--HTML文件标签--> 02 <title> My Applet Test</title> 03 <h1>My Applet Test</h1> 04 <applet 05 //JavaApplet.class就是JavaApplet.Java经过编译后的类,该类在这里得到调用 06 code =”JavaApplet.class” 07 width=250 08 height=250 09 name=”MyApplet”> <!—在HTML文件中插入一个<applet>标签--> 10 </applet> 11 </html>
【代码说明】第1行和第11行的<html></html>是HTML文件的标识。第4~10行在HTML文件中插入了一个<applet>标签,注意第6行的code属性为JavaApplet.class,是编译后的JavaApplet.java。
2.4.3 Java Applet运行过程
编译JavaApplet.java,在DOS窗口中该文件所在的目录下输入“javac JavaApplet.java”,如果编译成功,效果会如图2-23所示。在同样的目录下输入“appletviewer applet.html”,效果如图2-24所示。按Enter键后是Java Applet的运行结果,如图2-25所示。
图2-23 编译JavaApplet.java程序的结果
图2-24 执行Applet.html
图2-25 Java Applet运行结果
说明
只要读者认真体会上述过程,再实际运行一下,就会很快理解并掌握本节的基本内容。
2.5 Java程序员的编码规则
软件工程发展到现在已经非常成熟。对于程序员编码的规则也限定得越来越多。早年天马行空的编程与企业的要求渐行渐远。每个公司都会对程序员的编码习惯进行限制,包括命名、格式等。有的可以说是相当苛刻,当然每个公司的要求也是不同的,没必要每个要求都知道。
如果读者进入公司,按照公司要求的编码规范去做即可。这里是笔者搜集的一些基本要求,主要是一些常识和编码思想,也是大家都比较认同的编码规则。如果新入门读者有的地方不明白也没有太大关系,等学完后面的知识再回来看这节内容就可以了。
(1)注释
注释是用来提供源代码自身没有提供的附加信息,主要包含对代码的总体说明、步骤说明、设计决策信息和其他一些代码中不容易看出来的信息。
注意
注释并不是越多越好,过多且容易过时的注释往往会影响代码的更新和阅读。
(2)命名规范
命名规范提供一些有关标识符功能的信息,有助于理解代码,使程序更易读。
在标识符中,所有单词的首字母大写,被称为驼峰标识。字段、方法以及对象的首字母小写。例如:类名可以写作MyFirstClass,而方法名则要写成getName()。
如果是常量,则static final基本类型标识符中的所有字母大写。这样就可以标志出它们属于编译期的常量,如MAX LENGTH。
Java包(Package)的包名全部小写,首字母也不例外。例如,com.java.java.util。
(3)类的测试
每当创建一个类时,考虑在该类中写主方法进行测试,以保证类的正确性和功能的完整性。测试代码也可以作为如何使用类的示例来使用。
(4)类的设计
设计类时要尽量使其功能单一,只解决某些特定的问题;不要设计方法众多且差别较大的类。
注意
设计类时要考虑该类的维护和发展,考虑代码复用和多态。
(5)方法的设计
方法的设计与类一样,都是尽量明确其功能,简明扼要,功能单一。当方法过长时,尽量考虑将其分解成几个方法。
(6)封装
对代码进行封装时,出于安全方面的考虑,尽可能将方法和属性“私有”。
(7)采用内部类
当类和类之间关系非常紧密时,可以考虑采用内部类来实现,以改善编码和维护的工作。
(8)接口编程
接口主要描述了可能完成哪些功能和方法,而类描述的是具体的实施细节。故当需要某个类作为基础类时,尽量考虑将其变成一个接口。如果不得不使用方法或成员变量,才将其变成一个抽象类。
(9)继承
对于继承的使用应该谨慎,尽量采取实现接口的方法来达到目的。只有在必须继承的情况下才考虑继承。
(10)分析的顺序
对于项目的分析要从宏观到微观,从整体到局部。首先把握项目的整体概况,掌握全局之后再考虑细节的实现。
(11)性能的优化
性能的优化是考察一个项目好坏的一个方面,但并不是最重要的方面。正确的方法是先让程序运行起来,只有在确实存在性能瓶颈才进行优化。如果很小性能提升的代价是代码的难于理解和维护,将得不偿失。
(12)设计与编码
对于一个项目而言,分析设计和编码的时间比例大约是8∶2,通常会在拥有完善的设计和解决方案以后才进行编码工作,此时的编码工作将非常简单。如果只是花很少的时间进行分析和设计,那么编码工作必定困难重重,甚至延长项目时间,造成违约。
2.6 常见疑难解答
2.6.1 Java文件扩展名是否区分大小写
如果用记事本写了一个很短的程序,如下所示:
01 //定义一个类 02 public class FirstJava{ 03 //程序执行的入口,每个Java应用程序都有一个main()函数 04 public static void main(String args[]){ //主方法 05 //在DOS窗口打印一行字符串:Hello Java!!! 06 System.out.println(“Hello!!!”); 07 } 08 }
将这个文件保存在D盘根目录下,名字为Hello.Java,那么在DOS中的D盘根目录下执行javac命令,根本就不会编译这个文件。将扩展名改为小写的Hello.java,则再执行javac命令,就可以编译通过了。所以说Java文件的扩展名区分大小写。
2.6.2 Javac xxx.java顺利通过,但Java xxx显示 “NoClassDefFoundError”
Java命令在一定的范围(ClassPath)内搜索要用的Class文件,但是未能找到。遇到这类问题,首先请确认没有错误输入成java xxx.class,其次,检查ClassPath环境变量,如果设置的该变量没有包含“.”(代表当前目录),就会遇到这个问题,处理的方法就是在ClassPath环境变量中加入Java命令的当前目录这一项。
2.6.3 导致错误“Exception in thread main java.lang.NoSuchMethodError:main”的原因
首先,在程序中,每个Java文件有且只能有一个public类,这个类的类名必须与文件名的大小写完全一样;其次,在要运行的类中,有且只能有一个“public static void main(String[] args)”方法,这个方法就是主运行程序。
根据上面的这种Java结构,当遇到Path问题时,操作系统会在一定的范围(Path)内搜索javac.exe。如果没有找到,那么编辑操作系统环境变量,新增一个“JAVA HOME”变量,设为JDK的安装目录,再编辑Path变量,加上一项“%JAVA HOME%\bin”,然后关闭当前DOS窗口,再新开一个DOS窗口,就可以使用javac和java命令了。
2.7 小结
在学习本章时,读者一定要注意带有“说明”和“注意”字样的内容,忽视这些细节往往会造成程序编译、运行的异常,会给初学者带来理解上的困惑。读者一定要动手编写本章提供的例子,只有自己动手实践,才能有所收获。
2.8 习题
一、填空题
1.JDK安装完毕后,还不能马上使用。如果想使用JDK实现编译、运行Java文件等操作,还需要设定系统的环境变量__________和__________。
2.JDK是一个开发工具集合,作为实用程序,工具库有5种主要程序:__________、__________、__________、__________ 和__________。
3.在Java中,__________工具可以实现应用程序的发布,把应用程序所需要的资源(如类、视频、音频、图片等)打包成__________。
4.有一种小应用程序,其实它就是一段Java代码,但这段代码可以以适当的方式嵌入到HTML页面,这种应用程序是__________。
二、上机实践
1.如何把一个Java Applet程序嵌入到一个网页上?
【提示】可以仿照2.4节的例子来编写。
2.编写一个简单的Java程序,测试Java源代码的扩展名是否区分大小写?
【提示】Java源代码的扩展名为“.java”。