第1部分 基础篇

第1章 Java概述

本章包括

◆ Java的历史与发展及其应用领域

◆ Java语言的特点

◆ 设置JDK环境变量

◆ 安装Eclipse的方法

◆ 使用Eclipse开发Java应用程序和Applet小应用程序

◆ Sun技术认证简介

◆ 下载与安装JDK

◆ 编写并运行Java应用程序和Applet小应用程序

◆ 第一次编译和运行Java程序时的常见问题

Java作为目前的主流面向对象程序设计语言之一,因其面向对象、跨平台、支持多线程和分布式等特点在Web应用程序开发、网络编程、手机游戏等各个方面都得到了广泛的应用,并且受到了越来越多程序设计者的青睐。本章将从Java的历史与发展开始讲解,然后通过配置Java的开发环境以及编写一个简单的程序让读者了解使用“记事本”和Eclipse开发Java程序和Java小应用程序的过程,最后对在编译和运行Java应用程序时可能出现的问题及解决方法进行讲解。

1.1 Java介绍

Java是由Sun公司于1995年首次推出的一种面向对象的程序设计语言,到现在已经发展了十余年了。本节首先回顾Java的历史与发展,然后介绍Java运行平台中主要的3个版本J2SE, J2EE和J2ME,以及它们各自的应用领域,最后对Sun公司的技术认证进行一个简单的介绍。

1.1.1 Java的历史与发展

Java是由Sun公司开发而成的新一代编程语言。Sun公司的Java语言开发小组成立于1991年,该小组的领导人是James Gosling,他是一位非常杰出的程序员。开发小组开始主要的开发方向是诸如开拓交互式电视、烤面包箱等消费类电子产品市场。由于通过改写C编译器无法满足与系统的平台无关性,所以1991年6月份准备开发一种新的语言,并起名为Oak(这就是Java语言的前身)。但是由于Oak已经被注册过,所以才改名为Java,即太平洋上一个盛产咖啡的岛屿的名字。1995年3月,Sun公司发布了利用Java编写的第一个交互式浏览器HotJava,并引起了世界的关注。

1995年5月Sun公司正式推出Java程序设计语言和Java平台的名称。Java平台由Java虚拟机(Java Virtual Machine,简称JVM)和Java应用编程接口(Application Programming Interface,简称API)构成。经过十余年的发展,目前Java语言已经是一门被广泛使用的编程语言,而且学习和使用Java语言的软件开发人员也在不断地增加。J2SE平台(Java的标准版)的版本也不断地发展,从1996年的JDK 1.0发展到目前的最新版本JDK 1.6。

1.1.2 Java的应用领域

Java运行平台目前主要分为3个版本:J2SE, J2EE和J2ME。其中,J2SE是Java的标准版,J2EE是Java的企业版,J2ME是Java的精简版。这3个版本应用在不同的领域,它们的应用领域如下。

◆ J2SE:Java标准版,包括基础的API、I/O输入输出、Swing图形等,主要开发桌面应用程序,它也是学习J2EE和J2ME的基础。

◆ J2EE:Java企业版,包括JSP, Servlet和EJB等技术,主要开发企业应用程序,例如商务网站、企业级信息管理系统等。

◆ J2ME:Java精简版,主要用于嵌入式开发应用,例如手机游戏、无线设备等。

1.1.3 Sun技术认证简介

对于学习J2SE的程序员,Sun公司提供了两项认证:SCJP和SCJD。SCJP主要考察开发人员Java的基本知识和语法,包括数据库连接、Swing、I/O、网络编程等知识。SCJD主要考察开发人员Java的应用能力,SCJD认证必须在取得SCJP认证后才可以报考。另外,还有针对J2EE的SCWCD, SCBCD和SCEA等认证,以及针对J2ME的SCMAD认证。其中,SCWCD和SCBCD两项认证需要先取得SCJP认证才有资格报考。

1.2 Java语言的特点

Java作为一种高级程序设计语言,与其他高级语言相比,最重要的特点是它的与平台无关性,也就是人们常说的“Write once run anywhere”。另外,Java在安全性、健壮性、分布式、面向对象等方面也有其自身的特点,下面对这些特点进行简单的介绍。

1.2.1 简单

与高级语言C++相比,Java语言是简单的。Java语言丢弃了C++中许多复杂的概念和容易令人感到疑惑的内容。例如,Java语言中没有C++语言里的多重继承和指针、去掉了#include和#define等预处理功能、不再有运算符的重载、不支持C++语言的强制自动类型转换等。

除了去掉C++语言中这些不是很常用而且容易让人混淆的内容以外,Java语言还增加了一些比较实用的功能。例如,可以自动对内存进行管理、自动进行垃圾收集、显式地进行强制类型转换等。而且,由于Java语言在诸如变量声明、流程控制、参数传递等方面与C或者C++语言类似,因此对于已经学习过C或者C++语言的人来说,Java语言更容易学习和掌握。

1.2.2 面向对象

Java语言是一种面向对象的语言,它通过把现实世界中的事物抽象成对象的概念并使用方法实现对对象的操作,将复杂问题抽象化从而更好地解决实际问题。在Java程序设计中,抽象层可以通过使用接口和抽象类来实现。

Java程序将数据和操作数据的方法封装在一起形成类,通过对数据以及对数据进行操作的方法的封装实现了信息的隐藏。在Java程序中可以使用public, protected和private等访问控制符控制类对数据成员的访问权限。封装可以将那些不想被其他成员访问的数据隐藏起来,从而使得程序更易于维护。

通过类的继承,不但使子类可以继承父类的属性和方法,还可以扩展子类自己的功能,很好地实现了代码的复用。在Java语言中,类的继承是通过extends关键字来实现的。例如,对于一个交通工具类Vehicle,可以把汽车、轮船、飞机等交通工具的公共属性定义在该类中,表示汽车、跑车、摩托车、飞机的类可以作为Vehicle的子类,它们除了可以拥有Vehicle类的成员属性和方法外,还可以拥有自己特定的成员属性和方法。

但是需要指出的是Java语言的类只支持单一继承,即一个类只能有一个直接父类。如果想实现类似多继承的功能,可以使用Java语言中的接口来实现。

通过对同一个方法调用不同类型的对象而产生不同行为的多态性,增强了程序的扩展性,而且使得项目的可读性大大提高了。多态性是基于继承的,也就是说,对于父类中的一个属性或者方法,在被多个子类继承之后,可以表现出不同的行为。例如,交通工具类Vehicle有一个表示启动方式的方法startPattern(),表示汽车、轮船的类是Vehicle类的子类,这些子类可以重新定义其父类Vehicle的启动方式。如果汽车的启动方式是“脚踩离合轻给油”,轮船的启动方式是“起锚,下水,驶离海港”,这时可以将表示交通工具的类Vehicle的对象v指向不同的对象。当v指向汽车类的对象时,那么调用v.startPattern()方法就可以表示汽车的启动方式;当v指向轮船类的对象时,那么调用v.startPattern()方法就可以表示轮船的启动方式。可以说Java语言很好地体现了面向对象的封装、继承和多态等特点。

1.2.3 与平台无关性和可移植性

Java语言的与平台无关性是它与其他语言相比最大的特点。Java语言的与平台无关性主要体现在Java虚拟机(JVM)上,Java虚拟机机制是Java语言实现的核心机制之一。和许多语言直接把代码编译成机器可识别的指令不同,Java语言在编译时会把源代码编译成字节码,也就是.class文件。而Java虚拟机可以通过ClassLoader来加载字节码,并最后将其转换成机器可识别的指令进行执行。

可以这样理解:如果是在Windows系统下,JVM会把字节码转换成Windows系统下机器可识别的指令;如果是在Linux系统下,JVM会把字节码转换成Linux系统下机器可识别的指令;如果是在Solaris系统下,JVM会把字节码转换成Solaris系统下机器可识别的指令。这样,通过JVM Java就实现了它的与平台无关性。

由于Java语言具有与平台无关性的特点,所以可以很容易地将Java程序的可执行代码从一台机器上移植到另一台机器上,只要机器上配有可以将字节码转换成机器可识别指令的Java虚拟机就可以。也就是说,Java程序是可移植的。

1.2.4 可靠性和安全性

由于Java语言主要应用于网络程序的开发,所以安全性是很多人担心的问题。事实上,作为Java语言核心机制之一的代码安全检测机制通过对字节码的校验,可使不合法的字节码无法被解释执行。而且Java语言在编译期间需要对表达式和参数进行类型检查,如果在编译期间出现类型不兼容的情况,编译器就会报错。另外,对数组边界是否越界的检查,以及对于不同类型的对象要求进行强制类型转换等措施,都提高了Java程序的可靠性和安全性。

同时,由于Java取消了指针的操作,恶意代码不能通过随意改变指针实现对内存地址的非法访问,因此降低了用户在网络中下载程序时受到恶意代码入侵的危险。Java小应用程序可以通过从本地文件系统加载和网络加载两种加载方法进行加载。通过网络加载小应用程序时,要接受ClassLoader类和SecurityManager类的安全性检查,也保证了Java程序的可靠性和安全性。

1.2.5 多线程并发机制

Java语言提供了对多线程的支持。所谓多线程就是在同一时间内有多个线程在执行,通过多线程可以在同一时间内完成多个任务,提高了程序的执行效率。Java语言通过继承Thread类或者实现Runnable接口就可以编写多线程的程序。同时,Java语言还提供了synchronized关键字保证线程之间的同步,使得线程之间共享的数据能够得到正确的操作。Java语言中的多线程使得网络实时交互行为的实现变得很容易,而C++语言并不支持多线程。

1.2.6 分布式

Java支持网络应用程序,它支持C/S模式,同时在API中提供了一个有关网络的类库,例如net类、socket类、URL类等,使得开发人员可以方便地使用类库中的方法实现分布式的操作。Java程序通过使用URL对象,可以对Internet中的网络资源进行访问。同时Java还提供了一种RMI(Remote Method Invocation,远程方法调用)机制,它使得Java在分布式应用方面的能力得到了增强,它也是开发分布式应用的一个很重要的解决方案。

1.2.7 动态的内存管理机制

Java中动态的内存管理是通过垃圾回收机制来实现的,Java的垃圾回收机制也是Java的核心机制之一。在系统空闲时,它可以对那些程序运行过程中没有用的对象自动进行回收。对于那些不再使用的对象,会自动释放它们所占用的内存空间。也可以将一个对象的句柄设置为null,来通知垃圾收集器对其进行回收。

Java的垃圾收集器是自动运行的。虽然垃圾收集器并不能保证程序中每一个无用的对象都一定会被收集,但与使用C++语言相比,它确实带来了很大的方便。使用Java的程序员在编程时可以不必过多地考虑内存的管理,避免了在C++中由于程序员忘记清除内存而造成的内存溢出问题。调用System.gc()方法也可以运行垃圾收集器,但该方法并不一定会立即得到执行,也无法确定该方法什么时候会被执行。

1.3 Java开发环境介绍

在使用Java语言设计程序之前,首先要安装Java开发工具。Java开发工具JDK是由Sun公司提供的免费软件包,其中包括了编写和运行Java程序所需要的工具。本节将介绍如何下载与安装JDK、如何设置环境变量以及JDK的常用命令行工具有哪些。

1.3.1 下载与安装JDK

JDK(Java Development Kit)是一切Java应用程序的基础,所有的Java应用程序都是构建在这个基础之上的。JDK是由Sun公司提供的,它包含了Java开发所必需的常用库。JDK可以到Sun公司的网站(http://Java.sun.com)下载,本书使用目前的最新版本JDK 1.6.0_10。具体的下载方法可以参考下面的步骤:

step 1 登录到http://Java.sun.com网站。

step 2 在网站右侧显示的“Popular Downloads:”一栏中单击“Java SE”超链接。

step 3 单击“Java SE Development Kit(JDK)6 Update 10”显示信息右侧的“Download”按钮,会出现两个分别用来选择操作平台和语言的下拉列表框。这里在操作平台下拉列表框中选择“Windows”选项,并将下面带有“I Agree”的复选框选中,然后单击“Continue”按钮。

step 4 选中“Windows Offline Installation”复选框,单击“jdk-6u10-windows-i586-p”超链接便可下载了。

注意

由于该网站的内容可能会随时更新,读者看到的网页内容可能与上述内容有一些差别,可以参考上述操作下载不同版本的JDK。

下载完JDK安装程序后即可安装了,具体安装过程如下:

step 1 双击下载的JDK安装文件,在弹出的“许可证协议”对话框中单击“接受”按钮,如图1-1所示。

图1-1 “许可证协议”对话框

step 2 在“自定义安装”对话框中将“安装到”路径更改为“C:\Java\jdk1.6.0_10\”,然后单击“下一步”按钮,如图1-2所示。

图1-2 “自定义安装”对话框

step 3 程序开始自定义安装,在出现“目标文件夹”对话框后,将“安装到”路径更改为“C:\Java\jre6\”,单击“下一步”按钮,如图1-3所示。

图1-3 “目标文件夹”对话框

step 4 在“Java安装进度”对话框中显示JDK的安装进度,安装完成后,会出现提示JDK 1.6已成功安装的对话框,单击“完成”按钮即可完成JDK的安装,如图1-4所示。

图1-4 提示已成功安装对话框

安装完成后,在C:\Java下会多出两个目录:jdk1.6.0_10和jre6。JDK的目录结构如图1-5所示,其中各主要目录中的内容如下:

图1-5 JDK的目录结构

◆ \bin目录是JDK开发工具的可执行文件,包括Java编译器、Java解释器等。

◆ \demo目录包括一些含有源代码的实例程序。

◆ \include目录包含C语言头文件,它支持使用Java本地接口和Java虚拟机调试程序接口的本地代码编程技术。

◆ \jre目录是Java运行环境的根目录,包括DLL、经典虚拟机使用的Windows DLL文件、运行时的代码库、安全管理文件等。

◆ \lib目录包括JDK工具、使用程序非核心类等。其中,dt.jar是BeanInfo文件的DesignTime归档。

1.3.2 环境变量的设置

在成功地安装了JDK后,还需要手动设置JDK环境变量。JDK中提供的Java编译器和Java解释器在C:\jdk1.6.0_10\bin文件夹中。由于运行Java程序时需要用到Java编译器和Java解释器,所以需要在环境变量的path中进行设置。path用于指定操作系统的可执行命令的路径。对于Windows 2000/2003/XP操作系统,设置的方法如下:

step 1 右击“我的电脑”图标,在弹出的快捷菜单中选择“属性”命令,在“系统属性”对话框中单击“高级”选项卡,如图1-6所示。

图1-6 “系统属性”对话框

step 2 在“高级”选项卡中单击“环境变量”按钮,在“环境变量”对话框下部的“系统变量”列表框中找到变量名为“Path”的变量,将其选中并双击,将路径“C:\jdk1.6.0_10\bin; ”写入到变量名为Path对应的变量值中,如图1-7所示。

图1-7 系统变量的设置

注意

在C:\jdk1.6.0_10\bin后需要加一个分号,这个分号是必不可少的。

step 3 设置完成后单击“确定”按钮,完成环境变量的设置。

step 4 选择“开始”→“运行”命令,输入“cmd”后,进入MS-DOS窗口。在DOS界面中输入“javac”或者“java”命令后,会出现javac或者java命令的使用方法,这就表明环境变量已经成功地配置完成了,如图1-8所示。

图1-8 javac命令的使用方法

对于Windows 9x系列的操作系统,需要在MS-DOS窗口或者在autoexec.bat文件中进行设置,设置方法如下:

        set path = C:\jdk1.6.0_10\jre\lib\rt.jar;

1.3.3 JDK的命令行工具

JDK中有许多应用开发的工具,例如在编译和运行Java应用程序时经常用到的javac和java命令,以及运行Java小应用程序所用到的appletviewer命令等。下面是对常用工具的介绍。

◆ javac:Java编译器,Java程序的编译工具,用来将Java程序的源文件编译成字节码文件,也就是.class文件。

◆ java:Java解释器,解释和执行已经转换成字节码的Java应用程序。

◆ jdb:Java调试器,可以设置断点调试Java程序,还可以检查变量,逐行执行程序。

◆ javap:Java反汇编器,显示编译类文件中的方法和变量,还可以显示字节代码的含义。◆ javadoc:API文档生成器,可以生成HTML文档。

◆ appletviewer:Applet小应用程序浏览器,用来解释并执行已经转换成字节码的小应用程序。

◆ jar:JAR文件管理器,可以将类文件打包成一个文件。

1.4 Java程序的开发

在安装和配置好Java的开发环境之后,就可以使用Java语言编写程序了。用Java语言可以编写应用程序和小应用程序,本节将介绍如何使用Java语言来编写应用程序和Applet小应用程序,并对编写程序过程中需要注意的问题加以说明。

1.4.1 编写并运行Java应用程序

安装完JDK并配置好环境变量后,就可以开始编写并运行Java应用程序了。Java应用程序从开始编写到最后的执行完成需要经过如下3个步骤。

step 1 编写Java应用程序代码。编写代码时直接使用“记事本”就可以,当然也可以使用如Editplus这样比较好的编辑软件,它可以在网上免费下载,但不建议使用Word来编写代码。例如,在文本文件中输入下面的这段代码:

            public class FirstJava{
                public static void main(String[] args){
                    System.out.println("This is my first Java program! ");
                                        //打印输出括号中的语句
                }
            }

这里定义了一个名为FirstJava的类,类前面的关键字public说明这个类是一个公共类,要注意的是类名的首字母是大写的。public static void main(String[] args)是这个应用程序的主方法,也是程序的入口点。main()方法里有一个参数,是一个String类型的数组,程序的执行要从类的main()方法开始。System.out.println()是一个打印语句,通过它可以将括号里的字符串打印出来。

注意

编写源文件代码时,只能有一个使用关键字public修饰的类,并且该类的名字要与源文件的名字相同。当然一个源文件中也可以没有使用public修饰的类,此时只要源文件的名字与其中一个类的名字相同就可以了。代码编写完成后,按“Ctrl+C”组合键保存代码,同时要确保文本文件的文件名和类名是一致的(包括大小写),而且扩展名应该是.java,因此上述代码文件的文件名为FirstJava.java。

step 2 将代码保存并将该文件的文件名设定为FirstJava.java后,就要编译源代码了。可以在Windows XP操作系统中单击“开始”→“运行”命令,输入“cmd”后,进入MS-DOS界面进行代码的编译。编译的时候首先使用DOS中的cd命令,进入到代码所在目录下。因为笔者将FirstJava.java放到了C:\MyJava\ch01目录下,所以可以使用下面的命令进入C:\MyJava\ch01目录下:

            cd C:\MyJava\ch01

这样就进入了C:\MyJava\ch01目录。编译代码时要使用javac命令,javac后面要加一个空格,然后是文件名,大小写最好和保存的文件名一致。使用javac命令编译Java程序的方法如下:

            javac FirstJava.java

在使用javac对代码进行编译的时候,大小写不一致也可以编译通过。也就是说,使用下面的方式也是可以的:

            javac firstjava.java

编译方法如图1-9所示。

图1-9 使用javac命令编译源文件

注意

如果想退到该目录的上一层目录,可以使用cd..的方式。

step 3 如果编译的过程中没有出现错误,就可以运行这个程序了。如果程序中有编译错误,需要对其进行修改,在程序中的编译错误没有全部修改完之前,代码是无法执行的。运行代码时需要使用java命令。使用java命令运行Java应用程序的方法如下:

            java FirstJava

注意

在使用java命令的时候,后面不需要使用源代码的后缀.java,只需写上文件名就可以了。java命令后面的大小写要和文件名中的大小写一致,如果不一致,程序无法顺利执行。

FirstJava程序运行结果如图1-10所示。

图1-10 程序运行结果

在执行完代码后,回到代码所在的目录下,读者会发现在FirstJava.java的文件旁边多了一个扩展名为.class的FirstJava.class文件,这个文件就是字节码文件,它是在编译过程中产生的。

Java程序实际上就是由多个.class文件构成的,在使用javac正确编译以后,就会生成这样的.class文件。如果一个程序中有多个Class类,那么编译的时候就会产生多个.class文件。

为了进一步了解程序的执行过程,可以使用javac -verbose来显示在命令的执行过程中Java虚拟机都做了哪些工作。通过显示的内容,也可以进一步了解Java虚拟机的执行过程,如图1-11所示。

图1-11 javac -verbose命令的运行结果

1.4.2 编写并运行Applet小应用程序

使用Java语言也可以编写Applet小应用程序,它可以直接嵌入到网页中,实现图形绘制、字体样式和颜色控制、动画和音乐等特殊效果。Applet小应用程序的开发需要经过4个步骤。

step 1 编写Applet小应用程序代码。Applet小应用程序虽然不需要main()方法作为程序的入口点,但是需要继承Applet类。例如,编写一个Applet小应用程序,其程序代码如下:

            import java.applet.*;
            import java.awt.*;
            public class FirstApplet extends Applet{
                    public void paint(Graphics g){
                        Font font= new Font("Dialog", Font.ITALIC,30);   //创建Font对象
                        g.setFont(font);                       //设置字体显示方式
                        g.setColor(Color.red);                 //将字的颜色设置为红色
                        g.drawString ("This is my first applet program",15,50);
                                      //显示字符串信息并给定显示坐标
                    }
            }

这里首先使用import引入了两个类包。其中,Applet类在包java.applet里,Graphics是java.awt包下的一个类。然后定义了一个FirstApplet类,其中使用了一个extends关键字表示这个类是Applet类的子类。在FirstApplet类里定义了一个paint()方法,方法中需要接收一个Graphics类型的参数g。

在paint()方法体中共有4行。第1行新建了一个Font对象,其中Font的构造方法需要接收3个参数,第1个参数表示设置字体的名称,这里设置成逻辑字体Dialog,第2个参数表示字体以斜体的形式显示,第3个参数表示字体的大小;第2行使用setFont()方法设置字体的显示方式;第3行使用setColor()方法设置字体的显示颜色,这里将字体颜色设置为了红色;第4行通过drawString()方法将括号后面的语句显示在页面上,其中最后的两个参数表示输出信息所显示的坐标。

step 2 编译代码。编译Applet小应用程序的方法和编译Java应用程序的方法相同,也是使用javac命令,编译方法如图1-12所示。

图1-12 编译Applet小应用程序源代码

step 3 编写html文件。由于Applet小应用程序是由浏览器来执行的,所以需要一个html文件,其代码如下:

            <html>
            <title>Applet小应用程序</title>
            <body>
            <applet code = FirstApplet.class  height = 200  width= 500 ></applet>
            <body>
            <html>

其中,FirstApplet.class表示编译过的类的名字,大小写要和源文件的名字一致,注意后缀是.class,然后定义的是这个Applet的高度和宽度,这是<applet…></applet>中的必需项。

html文件写完后,将其保存并将文件名设定为FirstApplet.html,这里的文件名可以不与类的名字相同。文件保存好后,将它放置在FirstApplet类所在目录下。

step 4 运行程序。运行Applet小应用程序有两种方法。一种是直接使用浏览器运行,双击刚才写好的FirstApplet.html文件,就可以运行,其运行结果如图1-13所示。另一种是在DOS下使用appletviewer命令来运行,该命令的使用方法为“appletviewer FirstApplet.html”,运行结果如图1-14所示。

图1-13 Applet小应用程序浏览器运行结果

图1-14 在DOS下使用appletviewer命令的运行结果

注意

使用appletviewer命令时,文件名后缀是.html而不是.java。

1.5 使用Eclipse开发Java程序

Eclipse是一个开源的基于Java的免费开发平台,是一个可视化的开发环境。Eclipse可以到其官方网站(www.eclipse.org)下载。本节就来介绍如何使用Eclipse开发Java程序,首先介绍Eclipse的安装过程,然后介绍如何在Eclipse下开发Java应用程序和小应用程序。

1.5.1 安装Eclipse及新建Java项目

Eclipse的安装非常简单,将下载的Eclipse压缩包解压缩(这里将Eclipse压缩包解压到C盘下),然后直接双击其中的eclipse.exe文件就可以运行Eclipse,其启动界面如图1-15所示。

图1-15 Eclipse启动界面

第一次启动Eclipse会弹出一个对话框要求选择一个Eclipse的工作空间,这里选择“C:\eclipse\workspace”,如图1-16所示。

图1-16 选择Eclipse的工作空间

注意

如果想将该工作空间的路径作为其默认路径,可以将该对话框下面的复选框选中。这样,以后启动Eclipse时就会将该路径作为默认路径而不再弹出该对话框了。

单击“确定”按钮后,会出现一个“欢迎使用Eclipse”的界面,这就表示Eclipse已经成功安装了。将欢迎界面关闭后,就会出现Eclipse的工作区,如图1-17所示。

图1-17 Eclipse的工作区

如果想在Eclipse下创建一个项目,可以在其左侧的“包资源管理器”选项卡下的空白处单击鼠标右键,在弹出的菜单中选择“新建”命令,或者选择菜单栏中的“文件”→“新建”→“项目”命令,在出现的对话框的Java目录下选择“Java项目”选项,如图1-18所示。

图1-18 选择Java项目

然后单击“下一步”按钮,填写项目名称,这里设置的项目名称为“MyJava”,如图1-19所示。

图1-19 填写项目名称

最后单击“完成”按钮。此时在Eclipse工作区的左侧就会多出一个项目名为MyJava的目录,如图1-20所示。

图1-20 项目名创建完成

1.5.2 使用Eclipse开发Java应用程序与Applet小应用程序

可以将1.4.1小节中的FirstJava.java文件直接复制到MyJava目录下,此时Eclipse会为其建立一个默认的包,其包资源管理器的层次结构如图1-21所示。

图1-21 包资源管理器的层次结构

当然也可以在MyJava目录下创建一个有具体名字的包,单击鼠标右键,在弹出的菜单中选择“包”命令,或者选择菜单栏中的“文件”→“新建”→“包”命令,在出现的“新建Java包”对话框中填写包的名称,这里创建一个名为“javaTest”的包,如图1-22所示。

图1-22 新建Java包

接着单击“完成”按钮,此时在MyJava目录下会多出一个名为javaTest的包,选中该包,单击鼠标右键,在弹出的菜单中选择“类”命令,在新建Java类的对话框中填写新建类的名称,然后单击“完成”按钮即可,此时在javaTest的包下就会多出一个新建的Java类。双击该包下的FirstJava.java文件,其代码就会出现在Eclipse工作区的中央,如图1-23所示。

图1-23 FirstJava.java的代码

如果想运行该程序,首先选中该文件,单击工具栏中运行方式的图标,选择其中的“Java应用程序”命令,就可以运行该程序了,其运行结果如图1-24所示。

图1-24 运行Java应用程序

Applet小应用程序的开发方式与Java应用程序的开发方式基本相同。把FirstApplet.java文件复制到MyJava目录的默认包下,此时在默认包下会多出一个FirstApplet.java文件,可以双击该文件将其打开。

如果想运行该程序,首先选中该文件,单击工具栏中运行方式的图标,选择其中的“Java Applet”命令,就可以运行该程序了,其运行结果与图1-24所示的运行结果相同。

1.6 第一次编译和运行Java程序时的常见问题

在1.4节中介绍了如何编译和运行Java应用程序和Applet小应用程序,在第一次编译和运行Java程序时,很可能会遇到一些问题使得Java程序无法正常编译和运行。本节将介绍编译和运行Java程序时的一些常见问题,并给出这些问题产生的原因和解决问题的方法。

1.6.1 javac不是内部或外部命令

在使用javac命令对FirstJava源文件代码进行编译时,可能会出现“‘javac’不是内部或外部命令,也不是可运行的程序或批处理文件”的错误提示信息,如图1-25所示。

图1-25 javac不是内部或外部命令的错误

出现这个错误的主要原因是没有设置环境变量或者环境变量设置不正确。设置环境变量的具体方法可以参照1.3.2小节中所讲的内容。

1.6.2 无法找到类定义

使用javac命令对FirstJava源文件代码进行正常编译且通过后,使用java命令运行Java程序时出现错误提示信息“Exception in thread "main" java.lang.NoClassDefFoundError”。该错误提示信息表示当Java虚拟机或ClassLoader实例试图加载该类时,无法找到该类的定义。产生该错误可能有两种原因。

一种可能是类名与文件名不符,如图1-26所示。

图1-26 NoClassDefFoundError错误

这里是因为在Java程序中找不到firstjava这个类,从给出的提示中也可以看出是因为写的类名的大小写与文件名的大小写不一致造成的。所以要特别注意,在使用java命令执行代码时,一定要注意文件名的大小写。但是在使用javac命令编译时可以不必考虑大小写问题。

另外一种可能是没有写main()方法,如图1-27所示。

图1-27 不写main()方法出现的错误

这里出现这个问题是由于在程序中没有写main()方法造成的,这也是初学者容易犯的错误。因为main()方法是程序的入口,所以在编写代码时,一定要保证public static void main(String args[])的写法是正确的。

注意

public static void main(String args[])和public static void main(String[] args)两种写法都可以,两种写法只是参数的声明数组的方式不同而已。

1.6.3 找不到文件

当使用javac命令对FirstJava源文件代码进行编译时,出现“javac:找不到文件:FirstJava.java”错误提示信息,它说明Java编译器在编译时没有找到文件名为FirstJava的文件,如图1-28所示。

图1-28 找不到文件错误

由于前面讲过使用javac命令对Java程序进行编译时可以不考虑文件名的大小写问题,所以这里提示找不到firstjava.java文件不是因为文件名的大小写问题造成的。出现这种问题可能有两种情况。

一种可能是使用javac命令时,后面的文件名确实写错了。可能是少写了一个字母或者多写了一个字母造成和编写的源代码所保存的文件名不一致了。

还有一种可能是文件名确实没写错,但是使用javac命令时还是出现了如图1-28所示的错误,这种情况可能是因为隐藏了已知文件类型扩展名造成的。可以通过下面的方法查看是否隐藏了已知文件类型扩展名。

step 1 在资源管理器中选择“工具”→“文件夹选项”命令,弹出“文件夹选项”对话框。

step 2 在“文件夹选项”对话框中选择“查看”选项卡,在其中的“高级设置”列表框中找到“隐藏已知文件类型的扩展名”复选框,如图1-29所示。

图1-29 “文件夹选项”对话框

step 3 取消选中“隐藏已知文件类型的扩展名”复选框。因为如果不去掉,对于文本文件来说,系统默认的后缀就是.txt。取消选中复选框后,再把文件的扩展名改成.java,这时再使用javac firstjava.java命令就能正常编译了。

1.6.4 找不到符号

有些时候由于自己编写代码时的疏忽或者拼写错误,在编译代码时会出现找不到符号的错误。例如,在使用javac命令对FirstJava源文件代码进行编译时,出现“FirstJava.java:3:找不到符号”的错误提示信息,如图1-30所示。

图1-30 找不到符号错误

从这个错误提示信息来看,是因为main()方法中参数string的第一个字母没有大写造成的,这个错误可能也是初学者比较容易犯的错误。这里要说明的是,main()方法是程序的入口,在编写程序时要注意,public static void main(String args[])(也可以写成public static void main(String[] args))一定不要写错。

1.6.5 其他可能错误

除了上面提到的比较常见的错误以外,在编写和运行程序的时候还可能出现一些错误,例如程序中的括号不匹配、语句最后没有分号、使用javac命令编译程序时漏写了文件名的后缀.java以及使用java命令执行程序时在文件名后面多加了后缀.java等。当然在开始写程序的时候,出现一些错误是很正常的,在使用一段时间熟悉运行环境以后,有些问题自然就可以避免发生了。

1.7 小结

本章主要介绍了Java语言的特点、开发环境的配置以及如何编译和运行Java程序。Java虚拟机机制、垃圾回收机制和代码安全检测机制作为Java语言的3种核心机制体现了Java语言在可移植性、动态的内存管理和代码安全性等方面的特点。Java语言的最主要特点是它的与平台无关性。通过本章的学习,读者应该对Java语言的特点、Java运行环境的构建以及如何安装Eclipse有了一定的了解,也应该知道了如何编译和运行Java程序和Applet小应用程序。