当前位置: 首页 > news >正文

JDK 介绍与使用指南

JDK 介绍与使用指南


一、JDK 是什么?

Java Development Kit (JDK) 是 Java 生态的基石,由 Sun Microsystems 在 1995 年推出,后被 Oracle 收购。它的诞生源于一个核心诉求:“Write Once, Run Anywhere”(一次编写,到处运行)。在早期编程环境中,开发者常因不同操作系统(Windows、Linux、Mac)的兼容性问题而痛苦不堪。比如一段 C 语言代码在 Windows 编译后无法在 Linux 运行。JDK 通过引入 Java 虚拟机 (JVM) 解决了这一难题 —— 开发者只需将 Java 源码 (.java) 编译为平台无关的字节码 (.class),再由各平台上的 JVM 翻译为机器指令执行。

Java 源码 .java
javac 编译器
字节码 .class
JVM 执行
Windows 机器指令
Linux 机器指令
macOS 机器指令

历史关键点:

  • JDK 1.0 (1996):首个正式版本,奠定基础 API 和 JVM 模型;
  • JDK 5 (2004):革命性更新,引入泛型、注解、自动装箱;
  • OpenJDK 诞生 (2006):Sun 将 JDK 开源,促成社区协作;
  • Oracle 收购 Sun (2010):主导 JDK 迭代,制定新发布节奏;
  • LTS 版本策略 (2017 后):每 3 年推出长期支持版(如 JDK 8、11、17),平衡稳定与创新。

二、JDK 能做什么?

JDK 的核心功能主要有两个:Java 编译器(javac)和 Java 运行时环境(JRE)。

1. Java 编译器(javac)

Java 编译器是 JDK 的核心工具之一,它负责将 Java 源代码(.java 文件)编译成字节码文件(.class 文件)。字节码是一种中间形式的代码,类似于汇编语言,但它不是直接针对特定的硬件平台,而是针对 JVM。这种设计使得 Java 程序具有跨平台的特性。

例如,下面是一个简单的 Java 源代码文件 HelloWorld.java

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

使用 Java 编译器(javac)编译这个文件:

javac HelloWorld.java

编译后会生成一个 HelloWorld.class 文件,这个文件包含了 Java 字节码。

2. Java 运行时环境(JRE)

JRE 是运行 Java 程序的最小环境,它包含了 JVM、Java 核心类库以及其他支持文件。JRE 是运行 Java 程序的基础,如果你只是想运行已经编译好的 Java 程序(.class 文件),只需要安装 JRE 即可。

例如,要运行上面编译生成的 HelloWorld.class 文件,可以使用 Java 命令:

java HelloWorld

Java 命令会启动 JVM,JVM 会加载并执行 HelloWorld.class 文件中的字节码,最终输出 Hello, World!

除了这两个核心功能外,JDK 还包含了许多其他工具和组件,如调试器(jdb)、文档生成工具(javadoc)、性能分析工具(jstat、jmap、jstack 等)、打包工具(jar)等。

其他工具概览

工具用途示例命令
jar打包类文件为 JAR 包jar cvf app.jar *.class
jdb调试器jdb MyClass
javadoc生成 API 文档javadoc MyClass.java
jconsole监控 JVM 资源GUI 工具

三、安装教程(以 Windows 为例)

步骤 1:下载 JDK

  1. 访问 Oracle JDK 下载页 或 OpenJDK 官网;
  2. 选择 LTS 版本(如 JDK 17)和操作系统(如 Windows x64);

注意:从 JDK 11 开始,Oracle JDK 需要付费订阅才能用于商业用途。如果你是个人学习或非商业用途,可以继续使用 Oracle JDK;如果是商业用途,建议使用 OpenJDK(免费开源)。OpenJDK 可以从 Adoptium 或 Amazon Corretto 等网站下载。

步骤 2:安装 JDK

  • 双击安装包 → 修改安装路径(建议无空格和中文,如 D:\Dev\Java\jdk-17)→ 完成;

步骤 3:配置环境变量

  1. 右键“此电脑” → 属性 → 高级系统设置 → 环境变量;
  2. 新建系统变量
    • 变量名:JAVA_HOME
    • 变量值:D:\Dev\Java\jdk-17
  3. 编辑 Path 变量 → 新增条目:%JAVA_HOME%\bin

步骤 4:验证安装

> java -version
java version "17.0.5" 2022-10-18 LTS
> javac -version
javac 17.0.5

💡 Linux/macOS 用户:通过包管理器安装更快捷,例如 apt install openjdk-17-jdk(Ubuntu)或 brew install openjdk@17(macOS)。


四、核心功能使用示例

示例 1:编译与运行 HelloWorld

// HelloWorld.java
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, JDK!"); }
}
# 编译
javac HelloWorld.java  # 生成 HelloWorld.class
# 运行
java HelloWorld        # 输出 Hello, JDK!

示例 2:利用 JVM 垃圾回收(GC)优化内存

以下代码创建的对象会被 GC 自动回收,避免内存泄漏:

public class GCTest {public static void main(String[] args) {for (int i = 0; i < 10000; i++) {String temp = "Object" + i;  // 临时对象System.gc(); // 建议 JVM 执行 GC(非强制)}}
}

五、与其他产品对比

JDK 发行版对比(Oracle JDK vs OpenJDK)

特性Oracle JDKOpenJDK
许可证BCL/OTN(商用需付费)GPLv2(完全免费)
开源程度部分闭源组件100% 开源
长期支持(LTS)官方提供(如 JDK 17)社区/厂商提供(如 Red Hat)
性能差异几乎无差异几乎无差异
适用场景企业生产环境开发/测试/云原生

注:Java 11 后两者代码库基本一致,主要区别在许可证和商业支持。

版本选择建议

版本状态特点
JDK 8LTS最稳定,企业主流
JDK 11LTS模块化支持,安全增强
JDK 17LTS最新特性(如密封类)
JDK 21非 LTS前沿功能,适合实验

六、跨领域思想扩展

1. 服装设计中的“结构承载情感”

设计师 Atticus Chen 在毕业系列《émotion》中,用 硬质皮革与流动欧根纱 形成刚柔对比。如同 JDK 通过严格语法(结构)支撑灵活编程(表达),他的作品证明:“浪漫需要精密计算” —— 每条纱线摆动轨迹都需反复推敲,恰如 JVM 的 GC 算法需平衡内存与性能。

2. 建筑中的“虚实接口”

建筑师安藤忠雄在 真言宗本福寺水御堂 中,用下沉式通道连接“水上莲花池”(虚)与“地下庙宇”(实)。访问者穿行时经历“入死出生”的隐喻,类似 .java 源码通过 javac 转化为 .class 字节码的过程 —— 两者皆在转化抽象为可体验的实体

🌟 共同哲学:技术、服装、建筑皆需在边界之内寻求自由表达。JDK 用规范约束实现跨平台自由;服装以剪裁释放身体;建筑借结构重塑空间感知。


七、总结与资源

总结

JDK 作为 Java 生态的核心引擎,通过 javac 编译器和 java 运行时实现“一次编写,到处运行”。其设计哲学体现了 “约束中的自由” —— 严格的语法规范换来跨平台能力,而 JVM 的智能管理(如 GC、JIT)则让开发者专注逻辑而非底层细节。选择时需权衡:

  • 稳定性优先 → 选 LTS 版本(JDK 11/17);
  • 成本敏感 → 选 OpenJDK 发行版;
  • 前沿探索 → 试用非 LTS 版本。

JDK 核心组件图

JDK
JRE
开发工具
JVM
核心类库
javac
javadoc
jar
内存管理
垃圾回收
执行引擎

官方资源

  • Oracle JDK 下载
  • OpenJDK 社区
  • JDK 文档

“标准化是复杂系统的基石” —— JDK 通过 JVM 抽象硬件差异,如同 Unix 的“小即是美”哲学,用简单接口解决复杂问题。

http://www.dtcms.com/a/294913.html

相关文章:

  • CMake进阶:检查头文件存在性(check_include_file 和 check_include_fileCXX)
  • uniapp拦截返回事件
  • 应该切换到 NVMe 吗?
  • 学习 Pandas 库:Series 与 DataFrame 核心操作指南
  • c语言:预处理详解
  • CRMEB 单商户PRO多商户通用去版权教程
  • 二叉树解析
  • 51c大模型~合集158
  • RockyLinux 9.6 解决删除home后无法开机问题
  • 视觉BPE统一多模态理解-北大
  • Python+大模型 day03
  • 面试实战,问题四,介绍一下dubbo框架,如何回答
  • 河南萌新联赛2025第二场-河南农业大学
  • 解决uniapp 使用uview生成小程序包太大无法上传的问题
  • 亚马逊广告优化技巧:如何减少预算浪费
  • Tang Prime 20K板I2S输入输出例程
  • lumerical——光纤布拉格光栅(Fiber Bragg gratings)
  • AI驱动攻防升级,API安全走到关键档口
  • MyBatis整合SpringBoot终极指南
  • 设备维修记录可追溯:管理系统选型指南
  • ESP32-S3 小电视学习笔记2:Arduino开发环境搭建(垃圾)
  • PyTorch深度学习入门记录2
  • sql注入171到185
  • 使用Qemu模拟Arm处理器,运行Linux系统
  • 做了个震动APP
  • 学生信息管理系统 - HTML实现增删改查
  • odoo欧度小程序——添加用户
  • 面试150 合并K个升序链表
  • 智能制造基础-全面质量管理(TQM)
  • 嵌入式学习-土堆目标检测(4)-day28