Java 技术简介

0 阅读8分钟

📊 难度:基础 | 重要程度:了解即可


关于 Java 技术的讨论似乎无处不在,但它究竟是什么?以下章节解释了 Java 技术如何既是一种编程语言又是一个平台,并概述了这项技术能为你做什么。


关于 Java 技术

Java 技术既是一种编程语言(Programming Language),也是一个平台(Platform)

Java 编程语言

Java 编程语言是一种高级语言,具有以下特点:

特性说明
简单(Simple)语法相对简洁,去除了 C++ 中复杂的特性(如指针、多继承)
面向对象(Object-oriented)一切皆对象,支持封装、继承、多态
分布式(Distributed)内置网络编程支持,便于开发分布式应用
多线程(Multithreaded)语言级别支持多线程编程
动态(Dynamic)支持运行时动态加载类
架构中立(Architecture neutral)字节码与硬件平台无关
可移植(Portable)"一次编写,到处运行"
高性能(High performance)JIT 编译器优化,性能接近原生代码
健壮(Robust)强类型检查、异常处理、垃圾回收
安全(Secure)沙箱机制、字节码验证

📌 补充说明:以上特点在 James Gosling 和 Henry McGilton 撰写的白皮书《The Java Language Environment》中有详细解释。

编译与运行过程

在 Java 中,所有源代码首先写在以 .java 扩展名结尾的纯文本文件中。然后由 javac 编译器将这些源文件编译成 .class 文件。.class 文件不包含特定于你的处理器的原生代码,而是包含字节码(Bytecode)——Java 虚拟机(Java VM)的机器语言。然后 java 启动器工具使用 Java 虚拟机的实例运行你的应用程序。

┌─────────────────┐      ┌──────────┐      ┌─────────────────┐      ┌──────────┐
│  MyProgram.java │ ───► │  javac   │ ───► │ MyProgram.class │ ───► │ Java VM  │
│   (源代码)     │      │ (编译器)│      │   (字节码)     │      │          │
└─────────────────┘      └──────────┘      └─────────────────┘      └────┬─────┘
                                                                         │
                                                                         ▼
                                                                   ┌──────────┐
                                                                   │ 程序运行  │
                                                                   └──────────┘

💡 通俗理解:想象你写了一封中文信(.java),翻译官(javac)把它翻译成"世界语"(.class 字节码)。无论收信人在哪个国家,只要有懂"世界语"的翻译(JVM),都能理解这封信的内容。

跨平台特性

因为 Java 虚拟机可用于多种不同的操作系统,相同的 .class 文件能够在 Microsoft Windows、Solaris、Linux 或 Mac OS 上运行

                        ┌─────────────────┐
                        │ MyProgram.class │
                        │   (字节码)     │
                        └────────┬────────┘
                                 │
            ┌────────────────────┼────────────────────┐
            │                    │                    │
            ▼                    ▼                    ▼
    ┌───────────────┐    ┌───────────────┐    ┌───────────────┐
    │  Windows JVM  │    │   Linux JVM   │    │   Mac OS JVM  │
    └───────┬───────┘    └───────┬───────┘    └───────┬───────┘
            │                    │                    │
            ▼                    ▼                    ▼
    ┌───────────────┐    ┌───────────────┐    ┌───────────────┐
    │    Windows    │    │     Linux     │    │    Mac OS     │
    └───────────────┘    └───────────────┘    └───────────────┘

一些虚拟机(如 Java SE HotSpot)在运行时执行额外步骤来提升应用程序性能,包括查找性能瓶颈和将频繁使用的代码段重新编译为原生代码(JIT 编译)。

🎯 面试考点

Q:Java 是如何实现跨平台的?

A:Java 通过字节码 + JVM 实现跨平台:

  1. Java 源代码编译成与平台无关的字节码(.class 文件)
  2. 不同操作系统有各自的 JVM 实现
  3. JVM 负责将字节码翻译成对应平台的机器码执行

所以 Java 的跨平台本质是:字节码跨平台,JVM 不跨平台

Java 平台

平台是程序运行的硬件或软件环境。我们已经提到了一些最流行的平台,如 Microsoft Windows、Linux、Solaris OS 和 Mac OS。大多数平台可以描述为操作系统和底层硬件的组合

Java 平台与大多数其他平台的不同之处在于,它是一个纯软件平台,运行在其他基于硬件的平台之上。

Java 平台有两个组件:

组件说明
Java 虚拟机(JVM)Java 平台的基础,被移植到各种基于硬件的平台上
Java 应用程序编程接口(API)大量现成的软件组件集合,提供许多有用的功能
┌─────────────────────────────────────────────┐
│              你的 Java 程序                  │
├─────────────────────────────────────────────┤
│                 Java API                    │
├─────────────────────────────────────────────┤
│             Java 虚拟机(JVM)               │
├─────────────────────────────────────────────┤
│            基于硬件的平台                    │
│     (Windows / Linux / Mac OS 等)         │
└─────────────────────────────────────────────┘

API 是一个大型的现成软件组件集合,提供许多有用的功能。它被分组为相关类和接口的库,这些库被称为包(Package)

💡 通俗理解:把 Java 平台想象成一个"翻译层"。你的程序只需要和这个翻译层对话,翻译层负责和底层系统沟通。这样你就不用关心底层是 Windows 还是 Mac 了。

作为平台无关的环境,Java 平台可能比原生代码稍慢一些。然而,编译器和虚拟机技术的进步正在使性能接近原生代码,同时不牺牲可移植性。

📌 补充说明:术语"Java 虚拟机"和"JVM"指的是 Java 平台的虚拟机。

⚖️ 对比学习:JDK vs JRE vs JVM

概念全称包含内容用途
JVMJava Virtual Machine虚拟机本身执行字节码
JREJava Runtime EnvironmentJVM + 核心类库运行 Java 程序
JDKJava Development KitJRE + 开发工具(javac、javadoc 等)开发 Java 程序
┌─────────────────────────────────────┐
│              JDK                    │
│  ┌─────────────────────────────┐   │
│  │           JRE               │   │
│  │  ┌─────────────────────┐   │   │
│  │  │        JVM          │   │   │
│  │  └─────────────────────┘   │   │
│  │  + 核心类库                 │   │
│  └─────────────────────────────┘   │
│  + javac、javadoc、jar 等工具      │
└─────────────────────────────────────┘

Java 技术能做什么?

通用、高级的 Java 编程语言是一个强大的软件平台。每个完整的 Java 平台实现都提供以下功能:

开发工具(Development Tools)

开发工具提供编译、运行、监控、调试和文档化应用程序所需的一切。作为新开发者,你将主要使用的工具有:

工具用途
javac编译器,将 .java 编译为 .class
java启动器,运行 Java 程序
javadoc文档工具,生成 API 文档

应用程序编程接口(API)

API 提供 Java 编程语言的核心功能。它提供了大量可在你自己的应用程序中使用的有用类,涵盖从基本对象到网络和安全、XML 生成和数据库访问等各个方面。核心 API 非常庞大;要了解它包含的内容,请参阅 Java Platform Standard Edition 8 Documentation

部署技术(Deployment Technologies)

JDK 软件提供标准机制,如 Java Web Start 软件和 Java 插件软件,用于将应用程序部署给最终用户。

用户界面工具包(User Interface Toolkits)

JavaFX、Swing 和 Java 2D 工具包使创建复杂的图形用户界面(GUI)成为可能。

⚠️ 注意:Swing 和 Java 2D 是较老的技术。现代 Java 桌面开发推荐使用 JavaFX,但桌面应用整体已不是 Java 的主流方向。Java 目前更多用于服务端开发(如 Spring Boot)和 Android 开发(已逐渐被 Kotlin 取代)。

集成库(Integration Libraries)

集成库如 Java IDL API、JDBC API、Java 命名和目录接口(JNDI)API、Java RMI 等,支持数据库访问和远程对象操作。


Java 技术如何改变我的生活?

我们无法承诺学习 Java 会给你带来名声、财富甚至工作。但它可能会使你的程序更好,并且比其他语言需要更少的努力。我们相信 Java 技术将帮助你做到以下几点:

优势说明
快速入门虽然 Java 是强大的面向对象语言,但它易于学习,尤其对于已熟悉 C 或 C++ 的程序员
编写更少的代码程序度量(类数、方法数等)比较表明,Java 程序可能比同等 C++ 程序小四倍
编写更好的代码Java 鼓励良好的编码实践,自动垃圾回收帮助避免内存泄漏。面向对象、JavaBeans 组件架构和广泛可扩展的 API 让你复用现有的、经过测试的代码,引入更少的 bug
更快地开发程序Java 比 C++ 简单,开发时间可能快达两倍。程序也需要更少的代码行
避免平台依赖通过避免使用其他语言编写的库,可以保持程序的可移植性
一次编写,到处运行因为 Java 应用程序被编译成与机器无关的字节码,它们可以在任何 Java 平台上一致运行
更轻松地分发软件使用 Java Web Start 软件,用户只需单击鼠标即可启动应用程序。启动时的自动版本检查确保用户始终使用最新版本的软件

💡 通俗理解:"一次编写,到处运行"(Write Once, Run Anywhere,WORA)是 Java 的核心理念。就像写一份简历,不管投给哪家公司(哪个操作系统),只要他们能看懂中文(装了 JVM),就能正常阅读。

🎯 面试考点

Q:Java 的主要特点是什么?

A:Java 的核心特点可以用几个关键词概括:

  1. 跨平台:字节码 + JVM 实现"一次编写,到处运行"
  2. 面向对象:支持封装、继承、多态
  3. 自动内存管理:垃圾回收机制,无需手动释放内存
  4. 安全性:沙箱机制、字节码验证
  5. 多线程:语言级别支持并发编程
  6. 丰富的 API:标准库覆盖网络、I/O、数据库、GUI 等

📑 速查手册

Java 核心概念

术语英文说明
字节码Bytecode.class 文件中的中间代码,与平台无关
JVMJava Virtual Machine执行字节码的虚拟机
JREJava Runtime EnvironmentJVM + 核心类库,用于运行程序
JDKJava Development KitJRE + 开发工具,用于开发程序
APIApplication Programming Interface现成的类库,提供各种功能

Java 编译运行流程

源代码(.java)─► 编译(javac)─► 字节码(.class)─► 运行(java/JVM)─► 程序执行

Java 技术优势

优势关键词
跨平台Write Once, Run Anywhere
面向对象封装、继承、多态
自动内存管理垃圾回收(GC)
丰富的生态海量的库和框架

✏️ 思考题

  1. Java 程序为什么不能像 C 程序那样直接编译成机器码运行?这样做有什么好处和坏处?
  2. JDK、JRE、JVM 三者是什么关系?如果只想运行 Java 程序,需要安装哪个?
  3. "一次编写,到处运行"是否意味着 Java 程序在所有平台上行为完全相同?有没有例外情况?