# Java 语言

原文：http://zetcode.com/lang/java/java/

在 Java 教程的这一部分中，我们将介绍 Java 编程语言。

## 目标

本教程的目标是使您开始使用 Java 语言进行编程。 本教程涵盖了 Java 语言的核心。 本教程使用命令行编译器来构建应用。

## Java

Java 是一种高级的，通用的，面向对象的编程语言。 该语言的主要设计目标是鲁棒性，可移植性，高性能和安全性。 Java 是一种多线程和分布式编程语言。 它可用于在 PC 或嵌入式系统上创建控制台应用，GUI 应用，Web 应用。

Java 是 Sun Microsystems 于 1991 年创建的一种编程语言。Java 的第一个公共可用版本于 1995 年发布。如今，该语言由 Oracle 公司开发。

Java 在创建便携式移动应用，对各种设备进行编程以及创建企业应用方面表现出色。

## Java 的普及

当前有几种广泛使用的编程语言。 Java 属于当今最受欢迎的语言。 多项调查将其列为世界排名前三位的语言。

## Java 平台

Java 有四个编程平台：

*   Java 平台标准版（Java SE）
*   Java 平台企业版（Java EE）
*   Java 平台微型版（Java ME）
*   JavaFX

所有 Java 平台均包含 Java 虚拟机（JVM）和应用编程接口（API）。 Java 虚拟机是用于运行 Java 应用的特定硬件和软件平台的程序。 API 是我们可以用来创建其他软件组件或应用的软件组件的集合。

Java SE 用于开发桌面应用。 Java SE 的 API 提供了 Java 编程语言的核心功能。 它由虚拟机，开发工具，部署技术以及 Java 应用中使用的其他类库和工具包组成。 Java EE 建立在 Java SE 平台之上。 Java EE 平台提供了一个 API 和运行时环境，用于开发和运行 Web 应用以及大规模，多层，可伸缩，可靠和安全的企业应用。 Java ME 是 Java SE 的子集。 它提供了一个 API 和一个占地面积小的虚拟机，用于在小型设备（例如手机）上运行 Java 应用。 JavaFX 是一个使用轻量级用户界面 API 创建富 Internet 应用的平台。

严格来说，Java SE 是平台规范。 Java 平台标准版开发套件是 Oracle 对 Java SE 的正式实现。 还有其他实现。 例如免费和开源的 OpenJDK 或 IBM 的 J9。

在我们的教程中，我们使用 Java SE 平台来创建简单的控制台应用。

## 虚拟机

Java 虚拟机（JVM）执行 Java 字节码。 JVM 包含在 JRE 和 JDK 中。 Java 源代码写在扩展名为`.java`的文件中。 `javac` Java 编译器会将 Java 源代码编译为 Java 字节码； 编译后的文件具有`.class`扩展名。 该字节码由 JVM 执行。 Java 工具是 Java 应用的启动器。 Oracle 的 JVM 被称为 HotSpot。 HotSpot 是用于台式机和服务器的 Java 虚拟机。 它具有先进的技术，例如即时编译和旨在提高性能的自适应优化。

## JRE

JRE（Java 运行时环境）是用于执行 Java 应用的一组工具。 JRE 不包含用于开发 Java 应用的工具和工具，例如编译器或调试器。

## JDK

JDK（Java 开发工具包）是 JRE 的超集。 它包含 JRE 和开发 Java 应用所需的工具，例如编译器和调试器。 我们需要安装 JDK 来构建和运行我们的 Java 程序。

## OpenJDK 安装

由于 Oracle 的许可问题，许多开发者开始使用 OpenJDK。 亚马逊提供免费的，跨平台的，可立即投入生产的 Open Java Development Kit（OpenJDK）； 它称为 Amazon Coretto。

为了我们的学习目的，我们可以使用 [https://jdk.java.net/](https://jdk.java.net/) 中的 OpenJDK。

```java
$ tar xzvf openjdk-13_linux-x64_bin.tar.gz

```

下载并解压缩 OpenJDK 后，我们可以在`jdk-13`目录中看到 JDK 的内容。 开发工具位于`bin`子目录中。 `javac`编译器和`java`应用启动器位于此子目录中。

```java
$ ls -F jdk-13/
bin/  conf/  include/  jmods/  legal/  lib/  release

```

`conf`目录包含`.properties`，`.policy`和其他配置文件，供开发者，部署人员和最终用户编辑。 `include`目录包含支持本机代码编程的头文件。 `jmods`目录包含已编译的模块定义。 `legal`目录包含每个模块的版权和许可文件。

`release`文件包含 JDK 发行信息。

## 设置环境变量

在下一步中，我们设置`JAVA_HOME`变量并更新`PATH`变量。

```java
$ export JAVA_HOME=~/jdk-13/

```

`JAVA_HOME`变量由 IDE 或构建器之类的工具使用。

```java
$ export PATH=$PATH:~/jdk-13/bin/

```

通过更新`PATH`变量，我们不需要为`javac`和`java`工具指定完整路径。

## 编译 Java 应用

我们使用命令行工具创建一个简单的 Java 程序。

```java
$ mkdir -p src/com/zetcode

```

在当前工作目录（即主项目目录）中，我们创建`com/zetcode`子目录。 Java 源文件组织在称为包的模块中。 包必须与目录结构匹配。

```java
$ mkdir bin

```

编译后的 Java 字节码进入`bin`目录。

> **注意**：在 Java 中, `.java`文件中的类名需要与文件名完全一致。

```java
$ touch src/com/zetcode/SimpleEx.java

```

在`com/zetcode`子目录中创建`SimpleEx.java`源文件。 Java 源文件具有`.java`扩展名。

`com/zetcode/SimpleEx.java`

```java
package com.zetcode;

public class SimpleEx {

    public static void main(String[] args) {

        System.out.println("This is simple Java example.");
    }
}

```

这是一个简单的 Java 示例的源代码。 本示例将消息打印到控制台。

```java
package com.zetcode;

```

包名称必须与源文件所在的目录结构相对应。

```java
public class SimpleEx {

```

需要公共类名才能与文件名匹配。

```java
$ javac -d bin src/com/zetcode/SimpleEx.java

```

我们使用`javac`编译器来编译源代码。 注意，我们从根项目目录编译 Java 源代码。 编译后的文件进入`bin`目录。

```java
$ tree
.
├── bin
│   └── com
│       └── zetcode
│           └── SimpleEx.class
└── src
    └── com
        └── zetcode
            └── SimpleEx.java
6 directories, 2 files

```

编译器生成 Java 字节码，该字节码由 Java 虚拟机执行。 字节码具有`.class`扩展名。

```java
$ java -cp bin com.zetcode.SimpleEx
This is simple Java example.

```

使用`java`应用启动器，我们执行程序。 它启动 Java 运行时环境，加载指定的类，然后调用该类的`main`方法。 `.class`扩展名不包括在内； 这是假定的。 程序名称是程序的完全限定名称-`com.zetcode.SimpleEx`。 它包括程序名称及其包。 使用`-cp`选项，我们告诉启动器在哪里寻找类文件。

## 运行单文件源代码

从 Java 11 开始，可以运行单个`.java`文件，而无需定义包结构，也不需要先编译源代码。

```java
$ ls
SimpleEx.java

```

项目目录中只有一个文件。

`SimpleEx.java`

```java
public class SimpleEx {

    public static void main(String[] args) {

        System.out.println("This is simple Java example.");
    }
}

```

我们不必定义 Java 包。

```java
$ java SimpleEx.java
This is simple Java example.

```

我们使用`java`工具运行一个包含一个文件的简单应用。 这对于学习非常方便。

## 数据来源

以下资源用于创建本教程：

*   [Oracle 的 Java 教程](https://docs.oracle.com/javase/tutorial/)
*   [Java 标准版平台 & Java 开发套件版本 13 API 规范](https://docs.oracle.com/en/java/javase/13/docs/api/index.html)
*   [Java 语言规范](https://docs.oracle.com/javase/specs/)

在 Java 教程的这一部分中，我们介绍了 Java 语言，提供了一些基本的 Java 定义，展示了如何安装 JDK，并创建了第一个简单的 Java 程序。