## Java概述
#### 什么是Java
Java是一种高级计算机语言,它是由SUN 公司(已被Oracle公司收购)于1995年5月推出的一种可编写跨平台应用软件、完全面向对象的程序设计语言。Java语言简单易用、安全可靠,主要面向Internet编程,自问世以来,与之相关的技术和应用发展得非常快。在计算机、移动电话、家用电器等领域中,Java技术无处不在。
为了使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发,SUN公司将Java划分为三个技术平台,它们分别是JavaSE、JavaEE和JavaME。
- **JavaSE(JavaPlatformStandardEdition)标准版**
是为开发普通桌面和商务应用程序提供的解决方案。JavaSE是三个平台中最核心的部分,JavaEE和JavaME都是从JavaSE的基础上发展而来的,JavaSE平台中包括了Java最核心的类库,如集合、IO、数据库连接以及网络编程等。
- **JavaEE(JavaPlatformEnterpriseEdition)企业版**
是为开发企业级应用程序提供的解决方案。JavaEE可以被看作一个技术平台,该平台用于开发、装配以及部署企业级应用程序,其中主要包括Servlet、JSP、JavaBean、JDBC、EJB、WebService等技术。
- **JavaME(JavaPlatform MicroEdition)小型版**
是为开发电子消费产品和嵌入式设备提供的解决方案。JavaME主要用于小型数字电子设备上软件程序的开发。例如,为家用电器增加智能化控制和联网功能,为手机增加新的游戏和通讯录管理功能。此外,JavaME 提供了HTTP等高级Internet协议,使移动电话能以Client/Server方式直接访问Internet的全部信息,提供最高效率的无线交流。
#### Java语言的特点
Java语言是一门优秀的编程语言,它之所以应用广泛,受到大众的欢迎,是因为它有众多突出的特点,其中最主要的特点有以下几个。
- **简单**
Java语言是一种相对简单的编程语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java丢弃了C++中很难理解的运算符重载、多重继承等模糊概念。特别是Java语言不使用指针,而是使用引用,并提供了自动的垃圾回收机制,使程序员不必为内存管理而担忧。
- **面向对象**
Java语言提供了类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯粹的面向对象程序设计语言。
- **安全**
Java语言不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,从而使应用更安全。
- **跨平台**
用Java语言编写的程序可以运行在各种平台上,也就是说同一段程序既可以在Windows操作系统上运行,也可以在Linux操作系统上运行。
- **支持多线程**
Java语言是支持多线程的。所谓多线程可以简单理解为程序中有多个任务可以并发执行,这样可以在很大程度上提高程序的执行效率。
## JDK的使用
#### 什么是JDK
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工具了。
#### 安装JDK
Oracle公司提供了多种操作系统的JDK,每种操作系统的JDK 在使用上基本类似,初学者可以根据自己使用的操作系统,从Oracle官方网站下载相应的JDK 安装文件。接下来以Windows10系统为例来演示JDK8.0的安装过程,具体步骤如下。
官网下载地址:[JDK 官网下载](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html "JDK 官网下载")
勾选 Accept License Agreement
![](http://47.107.171.232/easily-j/images/20190102/e4d54b61-bf51-41d5-b164-718034f198a9.png)
**开始安装JDK**
双击从Oracle官网下载的安装文件“jdk-8u191-windows-x64.exe”,进入JDK安装界面,如图所示。
![](http://47.107.171.232/easily-j/images/20190102/10b4a535-445a-4624-8964-0481bf01a1d5.png)
**2 自定义安装功能和路径**
单击图中安装界面的【下一步】按钮进入JDK 的自定义安装界面,如图所示。
在下图所示界面的左侧有三个功能模块可供选择,开发人员可以根据自己的需求来选择所要安装的模块,单击某个模块,在界面的右侧会出现对该模块功能的说明,具体如下。
![](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所示。
![](http://47.107.171.232/easily-j/images/20190102/cfe169be-0abd-4157-ae77-f51397202e6d.png)
单击【关闭】按钮,关闭当前窗口,完成JDK安装。
#### JDK目录介绍
JDK安装完毕后,会在硬盘上生成一个目录,该目录被称为JDK 安装目录,如图所示。为了更好地学习JDK,初学者必须要对JDK 安装目录下各个子目录的意义和作用有所了解,接下来分别对JDK安装目录下的子目录进行介绍。
![](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,接下来分别对这两个程序进行详细地讲解。
![](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文件)。
## 第一个Java程序
上一小节通过安装JDK 搭建好了Java开发环境,下面就来体验一下如何开发Java程序。为了让初学者更好地完成第一个Java程序,接下来通过几个步骤进行逐一讲解。
**1 编写Java源文件**
在JDK安装目录的bin目录下新建文本文档,重命名为HelloWorld.java。然后用记事本方式打开,编写一段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
![](http://47.107.171.232/easily-j/images/20190102/53476c71-25c8-43a5-8747-932dad36ef67.png)
![](http://47.107.171.232/easily-j/images/20190102/fd1a4fdc-35f4-4d44-9ac5-1dbed935a520.png)
**进入JDK 安装目录的bin目录**
要对编写好的Java程序进行编译和运行,首先需要进入Java文件所在的目录,即JDK安装目录下的bin目录。在命令行窗口输入下面的命令:
```java
cd C:\Program Files\Java\jdk1.8.0_191\bin
```
![](http://47.107.171.232/easily-j/images/20190102/1a4053d6-45ca-419a-bd08-465fe40ce6b8.png)
**编译Java源文件**
在命令行窗口中输入“javac HelloWorld.java”命令,对源文件进行编译。这里产生了一个“编码GBK的不可映射字符”的错误,原因是:JDK是国际版的。修改命令为
```java
javac -encoding UTF-8 HelloWorld.java
```
![](http://47.107.171.232/easily-j/images/20190103/2836c372-5cff-409d-ac5c-549f5c2ba21b.png)
上面的javac命令执行完毕后,会在bin目录下生成一个字节码文件“HelloWorld.class”。
![](http://47.107.171.232/easily-j/images/20190103/ca87e163-78d7-4fb0-9598-361398620b86.png)
** 运行Java程序**
在命令行窗口中输入“java HelloWorld”命令,运行编译好的字节码文件,运行结果如图所示。
![](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环境变量是系统环境变量中的一种,它用于保存一系列的路径,每个路径之间以分号分隔。当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果不存在会继续在path环境变量中定义的路径下寻找这个文件,如果仍未找到,系统会报错。例如,在命令行窗口输入“javac”命令,并按下回车,会看到错误提示,如图所示。
![](http://47.107.171.232/easily-j/images/20190103/2cda0cbd-49c0-4aa2-be64-cf29ed8470f8.png)
从图的错误提示可以看出系统没有找到javac命令。在命令行窗口输入“set path”命令,可以查看当前系统的path环境变量,如图所示。
![](http://47.107.171.232/easily-j/images/20190103/d3ba2d59-890c-40d3-b5fe-c51809074d6a.png)
从图中列出的path环境变量可以看出,其中并没有包含“javac”命令所在的目录,因此操作系统找不到该命令。为了解决这个问题,需要给jdk配置环境变量。
依次点击:我的电脑(此电脑)右键 --> 选择属性 --> 高级系统设置 --> 环境变量 --> 系统变量 --> 新建
![](http://47.107.171.232/easily-j/images/20190103/d7568851-80a0-4bb2-b866-229e63315295.png)
![](http://47.107.171.232/easily-j/images/20190103/43c85330-4812-49cc-9320-47e630343c78.png)
然后找到path变量添加一句命令
```java
%JAVA_HOME%\bin
```
![](http://47.107.171.232/easily-j/images/20190103/8e05d839-98a4-4705-a7ea-d9760317f788.png)
然后通过javac命令测试是否配置成功,以下是配置成功的截图。
![](http://47.107.171.232/easily-j/images/20190103/cc23bd88-23b3-4085-a188-8908d78df225.png)
#### classpath环境变量
classpath环境变量也用于保存一系列路径,它和path环境变量的查看与配置的方式完全相同。当Java虚拟机需要运行一个类时,会在classpath环境变量中所定义的路径下寻找所需的class文件。
配置classpath环境变量和path的添加方式相同,再次新建一个CLASSPATH环境变量,路径为JDK的安装路径的bin目录下。然后通过命令“java”测试是否成功。
![](http://47.107.171.232/easily-j/images/20190103/e5ac90ff-9050-4b86-a510-9982d161c366.png)
![](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程序运行时,必须经过编译和运行两个步骤。首先将后缀名为.java的源文件进行编译,最终生成后缀名为.class的字节码文件。然后Java虚拟器将字节码文件进行解释执行,并将结果显示出来。为了让初学者能更好地理解Java程序的运行过程,接下来以第三节第一个java程序为例,进行详细的分析,具体步骤如下。
1. 编写一个HelloWorld.java的文件。
2. 使用“JavacHelloWorld.java”命令开启Java编译器并进行编译。编译结束后,会自动生成一个HelloWorld.class的字节码文件。
3. 使用“JavaHelloWorld”命令启动Java虚拟机运行程序,Java虚拟机首先将编译好的字节码文件加载到内存,这个过程被称为类加载,它是由类加载器完成的,然后虚拟机针对加载到内存中的Java类进行解释执行,便可看到运行结果。
通过上面的分析不难发现,Java程序是由虚拟机负责解释执行的,而并非操作系统。这样做的好处是可以实现跨平台性,也就是说针对不同的操作系统可以编写相同的程序,只需安装不同版本的虚拟机即可,如图所示。
![](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平台上,反之亦然。
## 习题
#### 填空题
1. Java的三个技术平台分别是( )、( )、( )。
2. Java程序的运行环境简称之为( )。
3. 编译Java程序需要使用命令( )。
4. javac.exe和java.exe两个可执行程序存放在JDK安装目录的( )目录下。
5. ( )环境变量用来存储Java的编译和运行工具所在的路径,而( )环境变量则用来保存Java虚拟机要运行的“.class”文件路径。
#### 选择题
1. 以下选项中,哪些属于JDK工具? (多选)( )
A.Java编译器 B.Java运行工具
C.Java文档生成工具 D.Java打包工具
2. Java属于以下哪种语言? ( )
A.机器语言 B.汇编语言 C.高级语言 D.以上都不对
3. 下面哪种类型的文件可以在Java虚拟机中运行? ( )
A..java B..jre C..exe D..class
4. 安装好JDK后,在其bin目录下有许多exe可执行文件,其中“java.exe”命令的作用是以下哪一种? ( )
A.Java文档制作工具 B.Java解释器
C.Java编译器 D.Java启动器
5. 如果jdk的安装路径为“d:\jdk”,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项? ( )
A.d:\jdk; B.d:\jdk\bin; C.d:\jre\bin; D.d:\jre;
#### 问答题
1. 简述Java的特点。
2. 简述JRE与JDK的区别。
#### 编程题
使用记事本编写一个HelloWorld程序,在dos命令行窗口编译运行。请按照题目的要求编写程序并给出运行结果。