Menu

Java 是什么?语言、JVM 与运行环境

Java 到底是什么,JVM 如何让一个编译好的程序在任何地方运行,以及 Java 可以用来构建哪些软件。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

一句话介绍 Java

Java 是一门静态类型、面向对象的编程语言,它被编译成字节码,运行在 Java 虚拟机(JVM)上。正是这个设计选择,也就是先编译成中立的中间格式、再在虚拟机上运行,让同一个编译好的 Java 程序可以不加修改地在 Windows、macOS、Linux 等系统上运行。

下面是必不可少的第一个程序。你可以直接在这里运行它:

这里的“仪式感”比脚本语言多一些,这是有意为之的:Java 偏爱明确的结构。接下来几页我们会逐一拆解其中的每个部分。

为什么 JVM 很重要

大多数编译型语言会把源代码直接转换成特定处理器和操作系统的机器码。为 Windows 编译的程序没法在 Mac 上运行。Java 则绕了一步:

  1. javac 把你的 .java 源代码编译成包含字节码的 .class 文件,字节码是给一台想象中的机器准备的指令,而不是针对任何真实的 CPU。
  2. 你所在平台的 JVM 读取这些字节码并执行,边执行边翻译成本地机器指令。

因为每个平台都有自己的 JVM,而它们都能理解同样的字节码,所以你只需编译一次,就能在任何有 JVM 的地方运行编译结果。这就是那句著名的口号:一次编写,到处运行。

JVM 也不只是盲目地解释执行。即时(JIT)编译器会观察哪些代码运行得最多,然后把这些热点代码编译成优化过的本地代码,所以长时间运行的 Java 程序速度可以接近完全编译型的语言。

静态类型与面向对象

有两个特性决定了 Java 代码的样子和写法。

静态类型是指每个变量的类型在编译时就已知,编译器会在程序运行之前检查你的类型:

count 永远是 int;把 "hello" 赋给它是无法通过编译的。这能及早发现一整类错误,代价是前期要多写一些代码。

面向对象是指 Java 把代码组织成类,类就像蓝图,把数据和操作数据的方法打包在一起。就连上面的入口点也位于 class Main 之中。你在 Java 中写的几乎所有代码都放在类里。

Java 用来做什么

Java 是世界上部署最广泛的语言之一。你会在这些地方看到它:

  • 后端和企业级系统:银行、保险、大型 Web 服务,以及任何需要可靠运行多年的系统。
  • Android:这个平台最初的开发语言,即使有了 Kotlin,它依然是 Android 运行时的核心。
  • 大数据:Hadoop、Spark、Kafka 以及数据工程生态中的大部分工具都运行在 JVM 上。
  • 桌面和嵌入式:从 IDE(IntelliJ、Eclipse)到收银终端和智能卡。

它以稳定、向后兼容和庞大的标准库著称,而不是以最简洁著称。多年前为 Java 写的代码,通常今天依然能运行。

Java 不是 JavaScript

这一点值得直说,因为这两个名字造成了无穷无尽的混淆:Java 和 JavaScript 是两门不同的、毫不相关的语言。 它们出于历史上的营销原因共用了四个字母,除此之外没有任何重要的共同点。Java 是编译型、静态类型语言,运行在 JVM 上;JavaScript 是动态类型语言,运行在浏览器和 Node.js 中。学会其中一门,并不能让你学会另一门。

下一页:安装 Java

要在自己的电脑上编写和运行 Java,你需要一个 JDK(Java Development Kit,Java 开发工具包),它包含编译器、JVM 和标准库。下一页将带你一步步安装它,并确认它能正常工作。

常见问题

Java 是用来做什么的?

Java 支撑着大型服务器端和企业级系统、Android 应用(通过 Android SDK 以及和 Kotlin 共享的运行时)、Hadoop 和 Spark 等大数据工具,以及数不清的桌面和嵌入式应用。它的优势在于稳定、拥有庞大的标准库,以及 JVM 能让同一个编译好的程序在任何操作系统上运行。

Java 是编译型语言还是解释型语言?

两者都是。Java 编译器(javac)把源代码转换成与平台无关的字节码,然后由 JVM 运行这些字节码:一开始是解释执行,再由即时(JIT)编译器把热点代码编译成本地机器码。所以,Java 先被编译成字节码,然后在运行时被解释执行并进行 JIT 编译。

Java 和 JavaScript 是一回事吗?

不是。它们是两门毫不相关的语言,只是出于历史上的营销原因共用了一个名字。Java 是静态类型的编译型语言,运行在 JVM 上;JavaScript 是动态类型语言,运行在浏览器和 Node.js 中。会其中一门,并不代表你会另一门。

Coddy 编程语言插图

和 Coddy 一起学编程

开始