一、初识 Java

在学习 Java 的主义内容之前,我们首选应该了解一些 Java 的背景知识。这样,我们可以对 Java 有些初步的了解,也可以让我们在与其他人聊 Java 时,能聊到一块儿去。

1 为什么要学习 Java

从互联网到企业平台,Java是应用最广泛的编程语言,原因在于:

  • Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行;

  • Java程序易于编写,而且有内置垃圾收集,不必考虑内存管理;

  • Java虚拟机拥有工业级的稳定性和高度优化的性能,且经过了长时期的考验;

  • Java拥有最广泛的开源社区支持,各种高质量组件随时可用。

Java语言常年霸占着三大市场:

  • 互联网和企业应用,这是Java EE的长期优势和市场地位;

  • 大数据平台,主要有Hadoop、Spark、Flink等,他们都是Java或Scala(一种运行于JVM的编程语言)开发的;

  • Android移动平台。

这意味着Java拥有广泛的就业市场

2 Java 背景知识

  • Java 是美国 sun 公司(Stanford University Network)在1995年推出的一门计算机高级编程语言

    java-icon.png

  • Java 早期称为 Oak(橡树),后期改名为 Java。

  • Java 之父:詹姆斯·高斯林(James Gosling)。

  • 2009 年 sun 公司被 Oracle(甲骨文)公司收购。

3 Java 技术体系

技术体现

说明

Java SE(Java Standard Edition):标准版

Java技术的核心和基础

Java EE(Java Enterprise Edition):企业版

企业级应用开发的一套解决方案

Java ME(Java Micro Edition):小型版

针对移动设备应用的解决方案

简单来说,Java SE就是标准版,包含标准的JVM和标准库,而Java EE是企业版,它只是在Java SE的基础上加上了大量的API和库,以便方便开发Web应用、数据库、消息服务等,Java EE的应用使用的虚拟机和Java SE完全相同。

Java ME就和Java SE不同,它是一个针对嵌入式设备的“瘦身版”,Java SE的标准库无法在Java ME上使用,Java ME的虚拟机也是“瘦身版”。

毫无疑问,Java SE 是整个 Java 平台的核心,而 Java EE 是进一步学习Web应用所必须的。我们熟悉的Spring等框架都是Java EE开源生态系统的一部分。

不幸的是,Java ME从来没有真正流行起来,反而是Android开发成为了移动平台的标准之一,因此,没有特殊需求,不建议学习Java ME。

4 Java 程序的跨平台原理

Java 有着 跨平台 的特点,即 “一次编译,处处运行”。比如:我们在 Windows 电脑上,开发的 Java 程序,可以直接在 Linux 或者 Mac 电脑上运行。

这得益于 Java 的编译和运行机制。

Java 源代码(.java)经过编译,生成字节码文件(.class),交由 Java 虚拟机(jvm)运行。只要让 JVM(Java Virtual Machine) 兼容不同系统,便可以在不同系统上,得到相同的运行结果,从而实现跨平台。

java程序编译运行流程.jpg

5 JDK 与 JRE

初学者学Java,经常听到JDK、JRE这些名词,它们到底是啥?

  • JDK:Java Development Kit

  • JRE:Java Runtime Environment

简单地说,JRE 就是运行 Java 字节码的虚拟机(JVM)和运行库的集合。但是,如果只有 Java 源码,要编译成 Java 字节码,就需要 JDK ,因为 JDK 除了包含 JRE ,还提供了编译器、调试器等开发工具。

二者关系如下:

JDK与JRE.jpg

要学习Java开发,当然需要安装JDK啦。安装 JDK ,也被称为 “搭建 Java 开发环境” 。

6 搭建 Java 开发环境

因为Java程序必须运行在JVM之上,所以,我们第一件事情就是安装JDK。

本系列教程,使用的 JDK 版本为 JDK20

安装 JDK 的流程,大概分为两种:

  1. 安装来自 Oracle 官网 的 JDK;

  2. 安装第三方 JDK。

6.1 安装 Oracle 官方 JDK

使用官方 JDK ,需要手动配置环境变量,比较麻烦,建议直接使用第三方 JDK。

  1. 前往 Oracle 官网 下载最新的稳定版JDK,下载安装即可。Windows优先选x64 MSI Installer,Linux和macOS要根据自己电脑的CPU是ARM还是x86选择合适的安装包。

  2. 安装过程下一步就好,这里不再赘述。

  3. 设置环境变量。需要设置JAVA_HOMEPATH 两个环境变量。在 JDK1.5 前,还需要配置 classpath 这一环境变量。

安装完JDK后,需要设置一个JAVA_HOME的环境变量,它指向JDK的安装目录。在Windows下,它是安装目录,类似:C:\Program Files\Java\jdk-20

然后,把JAVA_HOMEbin目录附加到系统环境变量PATH上。

JAVA_HOMEbin目录添加到PATH中是为了在任意文件夹下都可以运行java。打开命令提示符窗口,输入命令java -version,如果一切正常,你会看到如下输出:

安装1.jpg

如果你看到的版本号不是20,而是151.8之类,说明系统存在多个JDK,且默认JDK不是JDK 20,需要把JDK 20提到PATH前面。

如果你得到一个错误输出:

安装2.jpg

这是因为系统无法找到Java虚拟机的程序java.exe,需要检查JAVA_HOME和PATH的配置。

6.2 安装第三方JDK

提供 JDK 的组织有很多,本教程使用的是 bellsoft 提供的 LIBERICA JDK 20。

  1. 前往 LIBERICA JDK 官网,下载对应系统的 JDK 20 安装包

  2. 直接安装,全程下一步。

第三方 JDK 一般会自动配置环境变量,如果不需要安装多个版本 JDK ,我们不需要手动调整环境变量。

7 JDK所包含的重要可执行文件

JAVA_HOMEbin目录下找到很多可执行文件:

  • java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;

  • javac:这是Java的编译器,它用于把Java源码文件(以.java后缀结尾)编译为Java字节码文件(以.class后缀结尾);

  • jar:用于把一组.class文件打包成一个.jar文件,便于发布;

  • javadoc:用于从Java源码中自动提取注释并生成文档;

  • jdb:Java调试器,用于开发阶段的运行调试。

8 第一个 Java 程序

Java 程序的源代码文件(.java)实际上只是存储着满足 Java 语法内容的普通文本文件而已。因此,可以编写文本文件的软件,都可以编写 Java 源代码。

为了更好地了解 Java 程序的编写到运行的流程,让我们用 “记事本” 这个每个电脑都有的文本编辑程序来编写我们的第一个 Java 程序。

  1. 打开 “记事本” ,输入以下内容:

    public class Hello {
        public static void main(String[] args) {
            System.out.println("Hello, world!");
        }
    }

    让我们简单理解一下上面的程序:

    首先,我们使用 public class Hello{...} 语句,定义了一个 类(class) ,这里的类名是Hello。 “类” 的具体功能,现在了解还为时尚早,但哪怕是最简单的 Java 程序,也需要使用到 “类” ,在现阶段,大家把 “类” 理解为程序的名称就可以。当然这是错误的概念,只是希望大家不要在现阶段过多关注 “类” 的概念。

    然后,我们使用 public static void main(String[] args) {...} 语句,定义了一个名为main方法 。“方法” 的概念,我们现阶段也不应太在意,但这段语句,有着独特的作用。Java规定,某个类定义的public static void main(String[] args)是Java程序的固定入口方法,因此,Java程序总是从main方法开始执行。

    注意到 Java 源码的缩进不是必须的,但是用缩进后,格式好看,很容易看出代码块的开始和结束,缩进一般是 4 个空格或者一个 tab 。

    最后,当我们把代码保存为文件时,文件名必须是Hello.java。因为要和我们定义的类名Hello完全保持一致。

  2. Java源码本质上是一个文本文件,我们需要先用javacHello.java编译成字节码文件Hello.class。在 Hello.java 文件所在目录,打开 “终端” 执行以下命令:

    $ javac Hello.java

    如果源代码无误,上述命令不会有任何输出,而当前目录下会产生一个Hello.class文件。

  3. 执行Hello.class,使用命令java Hello。执行成功后,得到的结果将显示在下一行。

    $ java Hello
    Hello, world!

    注意:给虚拟机传递的参数Hello是我们定义的类名,虚拟机自动查找对应的class文件并执行。

9 Java 11 以后的新功能

实际上,我们直接运行java Hello.java也是可以的:

$ java Hello.java 
Hello, world!

这是 Java 11 新增的一个功能,它可以直接运行一个单文件源码!

需要注意的是,在实际项目中,单个不依赖第三方库的Java源码是非常罕见的,所以,绝大多数情况下,我们无法直接运行一个Java源码文件,原因是它需要依赖其他的库。

10 小结

  1. 一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致;

  2. 使用javac可以将.java源码编译成.class字节码;

  3. 使用java可以运行一个已编译的Java程序,参数是类名。