Java 是一种高级计算机语言,它是由 SUN 公司(已被 Oracle 公司收购)于 1995 年 5 月推出的一种可编写跨平台应用软件、完全面向对象的程序设计语言。Java 语言简单易用、安全可靠,主要面向 Internet 编程,自问世以来,与之相关的技术和应用发展得非常快。在计算机、移动电话、家用电器等领域中,Java 技术无处不在。
为了使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发,SUN 公司将 Java 划分为三个技术平台,它们分别是 JavaSE、JavaEE 和 JavaME。
是为开发普通桌面和商务应用程序提供的解决方案。JavaSE 是三个平台中最核心的部分,JavaEE 和 JavaME 都是从 JavaSE 的基础上发展而来的,JavaSE 平台中包括了 Java 最核心的类库,如集合、IO、数据库连接以及网络编程等。
是为开发企业级应用程序提供的解决方案。JavaEE 可以被看作一个技术平台,该平台用于开发、装配以及部署企业级应用程序,其中主要包括 Servlet、JSP、JavaBean、JDBC、EJB、WebService 等技术。
是为开发电子消费产品和嵌入式设备提供的解决方案。JavaME 主要用于小型数字电子设备上软件程序的开发。例如,为家用电器增加智能化控制和联网功能,为手机增加新的游戏和通讯录管理功能。此外,JavaME 提供了 HTTP 等高级 Internet 协议,使移动电话能以 Client/Server 方式直接访问 Internet 的全部信息,提供最高效率的无线交流。
Java 语言是一门优秀的编程语言,它之所以应用广泛,受到大众的欢迎,是因为它有众多突出的特点,其中最主要的特点有以下几个。
Java 语言是一种相对简单的编程语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java 丢弃了 C++中很难理解的运算符重载、多重继承等模糊概念。特别是 Java 语言不使用指针,而是使用引用,并提供了自动的垃圾回收机制,使程序员不必为内存管理而担忧。
Java 语言提供了类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java 语言是一个纯粹的面向对象程序设计语言。
Java 语言不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,从而使应用更安全。
用 Java 语言编写的程序可以运行在各种平台上,也就是说同一段程序既可以在 Windows 操作系统上运行,也可以在 Linux 操作系统上运行。
Java 语言是支持多线程的。所谓多线程可以简单理解为程序中有多个任务可以并发执行,这样可以在很大程度上提高程序的执行效率。
SUN 公司提供了一套 Java 开发环境,简称 JDK(JavaDevelopmentKit),它是整个 Java 的核心,其中包括 Java 编译器、Java 运行工具、Java 文档生成工具、Java 打包工具等。
为了满足用户日新月异的需求,JDK 的版本也在不断地升级。在 1995 年,Java 诞生之初就提供了最早的版本 JDK1.0,随后相继推出了 JDK1.1、JDK1.2、JDK1.3、JDK1.4、JDK5.0、JDK6.0、JDK7.0、JDK8.0、JDK9.0,本教材针对 JDK8.0 版本进行讲解。SUN 公司除了提供 JDK,还提供了一 JRE(JavaRuntimeEnvironment)工具,它是 Java 运行环境,是提供给普通用户使用的。
由于用户只需要运行事先编写好的程序,不需要自己动手编写程序,因此 JRE 工具中只包含 Java 运行工具,不包含 Java 编译工具。值得一提的是,为了方便使用,SUN 公司在其 JDK 工具中自带了一个 JRE 工具,也就是说开发环境中包含运行环境,这样一来,开发人员只需要在计算机上安装 JDK 即可,不需要专门安装 JRE 工具了。
Oracle 公司提供了多种操作系统的 JDK,每种操作系统的 JDK 在使用上基本类似,初学者可以根据自己使用的操作系统,从 Oracle 官方网站下载相应的 JDK 安装文件。接下来以 Windows10 系统为例来演示 JDK8.0 的安装过程,具体步骤如下。
官网下载地址:JDK 官网下载
勾选 Accept License Agreement
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udLyJPoN-1642058224226)(http://47.107.171.232/easily-j/images/20190102/e4d54b61-bf51-41d5-b164-718034f198a9.png)]
开始安装 JDK
双击从 Oracle 官网下载的安装文件“jdk-8u191-windows-x64.exe”,进入 JDK 安装界面,如图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qp95hYFf-1642058224231)(http://47.107.171.232/easily-j/images/20190102/10b4a535-445a-4624-8964-0481bf01a1d5.png)]
2 自定义安装功能和路径
单击图中安装界面的【下一步】按钮进入 JDK 的自定义安装界面,如图所示。
在下图所示界面的左侧有三个功能模块可供选择,开发人员可以根据自己的需求来选择所要安装的模块,单击某个模块,在界面的右侧会出现对该模块功能的说明,具体如下。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NR5hpvu-1642058224233)(http://47.107.171.232/easily-j/images/20190102/f623889e-4fd5-43de-9d86-c33f8dd0467c.png)]
开发工具:是 JDK 中的核心功能模块,其中包含一系列可执行程序,如 javac.exe、java.exe 等,还包含了一个专用的 JRE 环境。
源代码:是 Java 提供公共 API 类的源代码。
公共 JRE:是 Java 程序的运行环境。由于开发工具中已经包含了一个 JRE,因此没有必要再安装公共的 JRE 环境,此项可以不作选择。
在图所示的界面右侧有一个【更改】按钮,单击该按钮会弹出选择安装目录的界面,如图所示。通过单击按钮进行选择或直接输入路径的方式确定 JDK 的安装目录,在这里采用默认的安装目录,因此,该步可以不作选择,直接单击【确定】按钮即可。
完成 JDK 安装
在对所有的安装选项做出选择后,单击图 1-2 所示界面中的【下一步】按钮开始安装 JDK。安装完毕后会进入安装完成界面,如图 1-4 所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ShkFkDCC-1642058224235)(http://47.107.171.232/easily-j/images/20190102/cfe169be-0abd-4157-ae77-f51397202e6d.png)]
单击【关闭】按钮,关闭当前窗口,完成 JDK 安装。
JDK 安装完毕后,会在硬盘上生成一个目录,该目录被称为 JDK 安装目录,如图所示。为了更好地学习 JDK,初学者必须要对 JDK 安装目录下各个子目录的意义和作用有所了解,接下来分别对 JDK 安装目录下的子目录进行介绍。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eWTLqiCO-1642058224237)(http://47.107.171.232/easily-j/images/20190102/8a3c8532-b931-486e-9cfc-a2ea5350871c.png)]
**bin 目录:**该目录用于存放一些可执行程序,如 javac.exe(Java 编译器)、java.exe(Java 运行工具)、jar.exe(打包工具)和 javadoc.exe(文档生成工具)等。
**db 目录:**db 目录是一个小型的数据库。从 JDK6.0 开始,Java 中引入了一个新的成员 JavaDB,这是一个纯 Java 实现、开源的数据库管理系统。这个数据库不仅很轻便,而且支持 JDBC4.0 所有的规范,在学习 JDBC 时,不再需要额外地安装一个数据库软件,选择直接使用 JavaDB 即可。
jre 目录:“jre”是 JavaRuntimeEnvironment 的缩写,意为 Java 程序运行时环境。此目录是 Java 运行时环境的根目录,它包含 Java 虚拟机,运行时的类包、Java 应用启动器以及一个 bin 目录,但不包含开发环境中的开发工具。
**include 目录:**由于 JDK 是通过 C 和 C++实现的,因此在启动时需要引入一些 C 语言的头文件,该目录就是用于存放这些头文件的。
**lib 目录:**lib 是 library 的缩写,意为 Java 类库或库文件,是开发工具使用的归档包文件。
**src.zip 文件:**src.zip 为 src 文件夹的压缩文件,src 中放置的是 JDK 核心类的源代码,通过该文件可以查看 Java 基础类的源代码。值得一提的是,在 JDK 的 bin 目录下放着很多可执行程序,其中最重要的就是 javac.exe 和 java.exe,接下来分别对这两个程序进行详细地讲解。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e5i0Iu5z-1642058224239)(http://47.107.171.232/easily-j/images/20190102/7347baa3-46af-4611-b375-7821d2c1bdd3.png)]
**javac.exe:**是 Java 编译器工具,它可以将编写好的 Java 文件编译成 Java 字节码文件(可执行的 Java 程序)。Java 源文件的扩展名为.java,如“HelloWorld.java”。编译后生成的 Java 字节码文件的扩展名为.class,如“HelloWorld.class”。
**java.exe:**是 Java 运行工具,它会启动一个 Java 虚拟机(JVM)进程,Java 虚拟机相当于一个虚拟的操作系统,它专门负责运行由 Java 编译器生成的字节码文件(.class 文件)。
上一小节通过安装 JDK 搭建好了 Java 开发环境,下面就来体验一下如何开发 Java 程序。为了让初学者更好地完成第一个 Java 程序,接下来通过几个步骤进行逐一讲解。
1 编写 Java 源文件
在 JDK 安装目录的 bin 目录下新建文本文档,重命名为 HelloWorld.java。然后用记事本方式打开,编写一段 Java 代码,如例所示。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("这是我的第一个 Java 程序");
}
}
例子中的代码实现了一个 Java 程序,下面对其中的代码进行简单地解释。
class 是一个关键字,它用于定义一个类。在 Java 中,类就相当于一个程序,所有的代码都需要在类中书写。
HelloWorld 是类的名称,简称类名。class 关键字与类名之间需要用空格、制表符、换行符等任意的空白字符进行分隔。类名之后要写一对大括号,它定义了当前这个类的管辖范围,所有的代码都需要写在这个大括号中。
“publicstaticvoidmain(String[]args){}”定义了一个 main()方法,该方法是 Java 程序的执行入口。
在 main()方法中编写了一条执行语句“System.out.println(“这是我的第一个 Java 程序!”);”,它的作用是打印一段文本信息,执行完这条语句会在命令行窗口中打印“这是第一个 Java 程序!”。
在编写程序时,需要特别注意的是,程序中出现的空格、括号、分号等符号必须采用英文半角格式,否则程序会出错。
打开命令行窗口
JDK 中提供的大多数可执行文件都在命令行窗口中运行,javac.exe 和 java.exe 两个可执行命令也不例外。对于不同版本的 Windows 操作系统,启动命令行窗口的方式也不尽相同,这里以 Windows 操作系统为例进行讲解。单击【开始】菜单,在【运行】窗口中输入“cmd”,快捷键是:win + R
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Sve4pQr-1642058224242)(http://47.107.171.232/easily-j/images/20190102/53476c71-25c8-43a5-8747-932dad36ef67.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8gTgNqmW-1642058224244)(http://47.107.171.232/easily-j/images/20190102/fd1a4fdc-35f4-4d44-9ac5-1dbed935a520.png)]
进入 JDK 安装目录的 bin 目录
要对编写好的 Java 程序进行编译和运行,首先需要进入 Java 文件所在的目录,即 JDK 安装目录下的 bin 目录。在命令行窗口输入下面的命令:
cd C:\Program Files\Java\jdk1.8.0_191\bin
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qNov6cGX-1642058224246)(http://47.107.171.232/easily-j/images/20190102/1a4053d6-45ca-419a-bd08-465fe40ce6b8.png)]
编译 Java 源文件
在命令行窗口中输入“javac HelloWorld.java”命令,对源文件进行编译。这里产生了一个“编码 GBK 的不可映射字符”的错误,原因是:JDK 是国际版的。修改命令为
javac -encoding UTF-8 HelloWorld.java
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SltSgdwa-1642058224248)(http://47.107.171.232/easily-j/images/20190103/2836c372-5cff-409d-ac5c-549f5c2ba21b.png)]
上面的 javac 命令执行完毕后,会在 bin 目录下生成一个字节码文件“HelloWorld.class”。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IgoZK2Qq-1642058224250)(http://47.107.171.232/easily-j/images/20190103/ca87e163-78d7-4fb0-9598-361398620b86.png)]
** 运行 Java 程序**
在命令行窗口中输入“java HelloWorld”命令,运行编译好的字节码文件,运行结果如图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2FrMkrJ-1642058224252)(http://47.107.171.232/easily-j/images/20190103/30ed7f13-6ec9-4474-badb-5ba99dcf0e35.png)]
上面的步骤演示了一个 Java 程序编写、编译以及运行的过程。其中有两点需要注意:
第一,在使用 javac 命令进行编译时,需要输入完整的文件名,如上例中的程序在编译时需要输入“javac HelloWorld.java”;
第二,在使用 java 命令运行程序时,需要的是类名,而非完整的文件名,如上例中的程序在运行时,只需要输入“java HelloWorld”就可以了,后面千万不可加上“.class”,否则程序会报错。
在计算机操作系统中可以定义一系列变量,这些变量可供操作系统上所有的应用程序使用,被称作系统环境变量。在学习 Java 的过程中,需要涉及两个系统环境变量 path 和 classpath,接下来分别对它们进行讲解。
path 环境变量是系统环境变量中的一种,它用于保存一系列的路径,每个路径之间以分号分隔。当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果不存在会继续在 path 环境变量中定义的路径下寻找这个文件,如果仍未找到,系统会报错。例如,在命令行窗口输入“javac”命令,并按下回车,会看到错误提示,如图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pKCdZAcG-1642058224254)(http://47.107.171.232/easily-j/images/20190103/2cda0cbd-49c0-4aa2-be64-cf29ed8470f8.png)]
从图的错误提示可以看出系统没有找到 javac 命令。在命令行窗口输入“set path”命令,可以查看当前系统的 path 环境变量,如图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZvQwC03-1642058224256)(http://47.107.171.232/easily-j/images/20190103/d3ba2d59-890c-40d3-b5fe-c51809074d6a.png)]
从图中列出的 path 环境变量可以看出,其中并没有包含“javac”命令所在的目录,因此操作系统找不到该命令。为了解决这个问题,需要给 jdk 配置环境变量。
依次点击:我的电脑(此电脑)右键 --> 选择属性 --> 高级系统设置 --> 环境变量 --> 系统变量 --> 新建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Frw1pbZk-1642058224258)(http://47.107.171.232/easily-j/images/20190103/d7568851-80a0-4bb2-b866-229e63315295.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TFDtynFY-1642058224259)(http://47.107.171.232/easily-j/images/20190103/43c85330-4812-49cc-9320-47e630343c78.png)]
然后找到 path 变量添加一句命令
%JAVA_HOME%\bin
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1OeMqUpq-1642058224261)(http://47.107.171.232/easily-j/images/20190103/8e05d839-98a4-4705-a7ea-d9760317f788.png)]
然后通过 javac 命令测试是否配置成功,以下是配置成功的截图。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-apn9nzsy-1642058224262)(http://47.107.171.232/easily-j/images/20190103/cc23bd88-23b3-4085-a188-8908d78df225.png)]
classpath 环境变量也用于保存一系列路径,它和 path 环境变量的查看与配置的方式完全相同。当 Java 虚拟机需要运行一个类时,会在 classpath 环境变量中所定义的路径下寻找所需的 class 文件。
配置 classpath 环境变量和 path 的添加方式相同,再次新建一个 CLASSPATH 环境变量,路径为 JDK 的安装路径的 bin 目录下。然后通过命令“java”测试是否成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-96TjOL12-1642058224264)(http://47.107.171.232/easily-j/images/20190103/e5ac90ff-9050-4b86-a510-9982d161c366.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sWS7dUwM-1642058224265)(http://47.107.171.232/easily-j/images/20190103/8cdcfd68-c55a-4856-ba3e-b08cd7391b6f.png)]
值得注意的是,在第一个例子中并没有对 classpath 环境变量进行设置,但在“C:\Program Files\Java\jdk1.8.0_191\bin”目录下仍然可以使用“java”命令正常运行程序,而没有出现无法找到“Hello World.class”文件的错误。这是因为从 JDK5.0 开始,如果 classpath 环境变量没有进行设置,Java 虚拟机会自动将其设置为“.”,也就是当前目录。
使用 Java 语言进行程序设计时,不仅要了解 Java 语言的显著特点,还需要了解 Java 程序的运行机制。Java 程序运行时,必须经过编译和运行两个步骤。首先将后缀名为.java 的源文件进行编译,最终生成后缀名为.class 的字节码文件。然后 Java 虚拟器将字节码文件进行解释执行,并将结果显示出来。为了让初学者能更好地理解 Java 程序的运行过程,接下来以第三节第一个 java 程序为例,进行详细的分析,具体步骤如下。
编写一个 HelloWorld.java 的文件。
使用“JavacHelloWorld.java”命令开启 Java 编译器并进行编译。编译结束后,会自动生成一个 HelloWorld.class 的字节码文件。
使用“JavaHelloWorld”命令启动 Java 虚拟机运行程序,Java 虚拟机首先将编译好的字节码文件加载到内存,这个过程被称为类加载,它是由类加载器完成的,然后虚拟机针对加载到内存中的 Java 类进行解释执行,便可看到运行结果。
通过上面的分析不难发现,Java 程序是由虚拟机负责解释执行的,而并非操作系统。这样做的好处是可以实现跨平台性,也就是说针对不同的操作系统可以编写相同的程序,只需安装不同版本的虚拟机即可,如图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FtOTfcyN-1642058224266)(http://47.107.171.232/easily-j/images/20190103/4c302d30-5659-4b7f-a7d5-f458df700f6c.jpg)]
从图可以看出,不同的操作系统需要使用不同版本的虚拟机,这种方式使得 Java 语言具有“一次编写,到处运行(writeonce,runanywhere)”的特性,有效地解决了程序设计语言在不同操作系统编译时产生不同机器代码的问题,大大降低了程序开发和维护的成本。
需要注意的是,Java 程序通过 Java 虚拟机可以达到跨平台特性,但 Java 虚拟机并不是跨平台的。也就是说,不同操作系统上的 Java 虚拟机是不同的,即 Windows 平台上的 Java 虚拟机不能用在 Linux 平台上,反之亦然。