macOS 查看与安装 Java JDK 全面指南

macOS 查看与安装 Java JDK 全面指南

在这里插入图片描述

📋 目录


这是一份完整的 macOS Java JDK 管理指南,涵盖查看、安装、配置、多版本管理等所有内容。


一、查看 Java 版本

1.1 检查是否已安装 Java

# 查看 Java 运行时版本java-version

可能输出:

java version "17.0.8" 2023-07-18 LTS Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211) Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing) 
输出情况含义
显示版本号已安装 Java
command not found未安装 Java
No Java runtime present需要安装

1.2 查看 Java 安装路径

# 查看当前 JAVA_HOME 路径echo$JAVA_HOME# 查看系统默认 Java 路径 /usr/libexec/java_home 

1.3 查看已安装的所有 Java 版本

# 列出所有已安装的 JDK /usr/libexec/java_home -V

输出示例:

Matching Java Virtual Machines (2): 17.0.8 (arm64) "Oracle Corporation" - "Java SE 17.0.8" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home 1.8.0_381 (arm64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.jdk/Contents/Home 

1.4 查看 Java 编译器版本

# 查看 javac 版本 javac -version# 查看 jar 工具版本 jar --version

二、理解 Java 版本命名

2.1 版本命名规则

旧命名新命名说明
Java 1.4Java 42004年之前
Java 5.0Java 52004年
Java 6Java 62006年
Java 7Java 72011年
Java 1.8Java 82014年(最常用)
Java 9Java 92017年
Java 10Java 102018年
Java 11Java 112018年(LTS)
Java 17Java 172021年(LTS)
Java 21Java 212023年(LTS)

2.2 LTS 版本说明

LTS(Long Term Support) = 长期支持版本,推荐优先选择:

LTS 版本支持期限适用场景
Java 8已停止公开更新老项目维护
Java 11至2026年企业应用
Java 17至2029年新项目首选
Java 21至2031年最新项目

三、安装 JDK 的四种方法

方法一:官网下载安装(推荐新手)⭐

步骤:

1. 访问官网

Oracle 官网:https://www.oracle.com/java/technologies/downloads/ OpenJDK:https://jdk.java.net/ 

2. 选择版本

  • 新项目:Java 17 或 21
  • 老项目:Java 8 或 11

3. 下载对应版本

芯片类型选择版本
M1/M2/M3macOS ARM64 DMG Installer
IntelmacOS x64 DMG Installer

4. 安装

# 双击下载的 .dmg 文件# 按照安装向导完成安装

5. 验证

java-version

方法二:使用 Homebrew 安装(推荐开发者)⭐⭐

前提:已安装 Homebrew

# 检查 Homebrew 是否安装 brew --version# 如未安装,先安装 Homebrew /bin/bash -c"$(curl-fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装步骤:

# 1. 搜索可用版本 brew search openjdk # 2. 安装 Java 17(推荐) brew install openjdk@17 # 3. 安装 Java 8 brew install openjdk@8 # 4. 安装 Java 21 brew install openjdk@21 # 5. 查看安装路径 brew info openjdk@17 

配置环境变量:

# 根据终端提示,执行以下命令(以 Java 17 为例)sudoln-sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk \ /Library/Java/JavaVirtualMachines/openjdk-17.jdk # 添加到 shell 配置文件echo'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"'>> ~/.zshrc echo'export JAVA_HOME="/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk"'>> ~/.zshrc # 使配置生效source ~/.zshrc 

方法三:使用 SDKMAN 管理多版本(推荐高级用户)⭐⭐⭐

安装 SDKMAN:

# 1. 安装 SDKMANcurl-s"https://get.sdkman.io"|bash# 2. 初始化 SDKMANsource"$HOME/.sdkman/bin/sdkman-init.sh"# 3. 验证安装 sdk version 

使用 SDKMAN 管理 Java:

# 1. 查看可用版本 sdk list java# 2. 安装 Java 17 sdk installjava17.0.8-tem # 3. 安装 Java 8 sdk installjava8.0.382-tem # 4. 安装 Java 21 sdk installjava21.0.0-tem # 5. 查看已安装版本 sdk current java# 6. 切换版本 sdk use java17.0.8-tem # 7. 设置默认版本 sdk default java17.0.8-tem # 8. 卸载版本 sdk uninstall java8.0.382-tem 

优势: 可以轻松在多个 Java 版本之间切换,非常适合需要同时开发多个项目的开发者。


方法四:使用 IntelliJ IDEA 内置 JDK

如果你使用 IntelliJ IDEA 开发:

1. 打开 IDEA → Settings → Build, Execution, Deployment → Build Tools → Maven 2. 在 "JDK for importer" 中选择或下载 JDK 3. IDEA 会自动下载并配置 JetBrains Runtime 

四、配置环境变量

4.1 找到配置文件

Shell 类型配置文件
zsh(macOS 默认)~/.zshrc
bash~/.bash_profile~/.bashrc

4.2 编辑配置文件

# 编辑配置文件nano ~/.zshrc 

4.3 添加环境变量

# ========== 单版本配置(Java 17)==========exportJAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home exportPATH=$JAVA_HOME/bin:$PATH# ========== 多版本切换配置 ==========# 使用 /usr/libexec/java_home 动态获取exportJAVA_HOME=$(/usr/libexec/java_home -v17)# 添加别名方便切换aliasjava8='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)'aliasjava11='export JAVA_HOME=$(/usr/libexec/java_home -v 11)'aliasjava17='export JAVA_HOME=$(/usr/libexec/java_home -v 17)'aliasjava21='export JAVA_HOME=$(/usr/libexec/java_home -v 21)'

4.4 使配置生效

# 重新加载配置文件source ~/.zshrc # 验证echo$JAVA_HOMEjava-version

五、多版本管理

5.1 使用 /usr/libexec/java_home 切换

# 查看所有已安装版本 /usr/libexec/java_home -V# 临时切换到 Java 8exportJAVA_HOME=$(/usr/libexec/java_home -v1.8)# 临时切换到 Java 17exportJAVA_HOME=$(/usr/libexec/java_home -v17)# 临时切换到 Java 21exportJAVA_HOME=$(/usr/libexec/java_home -v21)

5.2 创建切换脚本

~/.zshrc 中添加:

# 创建切换函数jdk(){version=$1exportJAVA_HOME=$(/usr/libexec/java_home -v"$version")java-version}

使用方法:

jdk 1.8# 切换到 Java 8 jdk 17# 切换到 Java 17 jdk 21# 切换到 Java 21

5.3 项目级别配置

对于不同项目需要不同 Java 版本:

# 在项目目录下创建 .env 文件echo'export JAVA_HOME=$(/usr/libexec/java_home -v 11)'> .env # 使用 direnv 自动加载 brew install direnv echo'layout python'>> .envrc direnv allow 

六、验证与测试

6.1 基础验证

# 检查 Java 版本java-version# 检查编译器版本 javac -version# 检查 JAVA_HOMEecho$JAVA_HOME# 检查 Java 路径whichjavawhich javac 

6.2 创建测试程序

# 创建测试文件cat> Test.java <<EOF public class Test { public static void main(String[] args) { System.out.println("Java 版本: " + System.getProperty("java.version")); System.out.println("Java 供应商: " + System.getProperty("java.vendor")); System.out.println("操作系统: " + System.getProperty("os.name")); } } EOF# 编译 javac Test.java # 运行java Test 

预期输出:

Java 版本: 17.0.8 Java 供应商: Oracle Corporation 操作系统: Mac OS X 

6.3 检查安装完整性

# 检查关键工具是否存在ls$JAVA_HOME/bin |grep-E"java|javac|jar|javadoc"

七、常见问题解决

7.1 command not found

问题:java: command not found

解决方案:

# 1. 检查是否安装 /usr/libexec/java_home -V# 2. 检查 PATHecho$PATH# 3. 重新配置 JAVA_HOMEexportJAVA_HOME=$(/usr/libexec/java_home)exportPATH=$JAVA_HOME/bin:$PATH# 4. 永久生效echo'export JAVA_HOME=$(/usr/libexec/java_home)'>> ~/.zshrc source ~/.zshrc 

7.2 多版本冲突

问题: 多个 Java 版本导致冲突

解决方案:

# 1. 查看所有版本 /usr/libexec/java_home -V# 2. 卸载不需要的版本# Oracle JDK: 运行卸载程序# Homebrew: brew uninstall openjdk@8# 3. 设置默认版本exportJAVA_HOME=$(/usr/libexec/java_home -v17)

7.3 权限问题

问题:Permission denied

解决方案:

# 修复权限sudochown-R$(whoami) /Library/Java/JavaVirtualMachines # 或使用 sudo 执行sudojava-version

7.4 M1/M2 芯片兼容问题

问题: ARM 架构兼容性问题

解决方案:

# 1. 下载 ARM64 版本(推荐)# 2. 或使用 Rosetta 2 转译 softwareupdate --install-rosetta # 3. 验证架构java-version# 应显示 "aarch64" 或 "arm64"

7.5 卸载 Java

# 1. 删除 Oracle JDKsudorm-rf /Library/Java/JavaVirtualMachines/jdk*.jdk # 2. 删除偏好设置sudorm-rf /Library/PreferencePanes/JavaControlPanel.prefPane # 3. 删除 Java 插件sudorm-rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin # 4. Homebrew 安装的使用 brew uninstall openjdk@17 # 5. SDKMAN 安装的使用 sdk uninstall java17.0.8-tem 

📊 快速参考表

安装命令速查

方法安装 Java 17安装 Java 8
官网下载 DMG 安装下载 DMG 安装
Homebrewbrew install openjdk@17brew install openjdk@8
SDKMANsdk install java 17.0.8-temsdk install java 8.0.382-tem

常用命令速查

命令用途
java -version查看 Java 版本
javac -version查看编译器版本
/usr/libexec/java_home -V查看所有已安装版本
echo $JAVA_HOME查看当前 JAVA_HOME
source ~/.zshrc刷新环境变量

💡 最佳实践建议

  1. 新手推荐:使用官网 DMG 安装,简单直接
  2. 开发者推荐:使用 Homebrew + SDKMAN,方便多版本管理
  3. 生产环境:使用 LTS 版本(Java 17 或 21)
  4. 老项目维护:保留 Java 8 环境
  5. 定期更新:关注安全更新,及时升级小版本

按照以上指南操作,你应该能在 macOS 上顺利完成 Java JDK 的查看、安装和配置。如有其他问题,欢迎继续咨询!


Read more

【C++】智能指针

【C++】智能指针

前言         上文我们学到了C++11的异常,了解到了C++与C语言处理错误的区别,异常的特点在于抛出与接收。【C++11】异常-ZEEKLOG博客         本文我们来学习C++中的下一个功能:智能指针 1.智能指针的使用场景         在上文我们知道了抛异常的知识,抛异常的“抛”这个动作一般来说是当程序出现了错误,抛出错误信息为了让我们解决。这个原本是解决错误的动作,在某些时候却称为了“铸就”错误的是罪魁祸首。         比如:我们知道执行throw,这意味着在这个局部域中throw后面的语句将不再执行,跳过一段又一段程序直到找到匹配的catch时,才会从catch这个语句进行向下执行。那么一个局部域中如果在抛出异常时申请了空间,明明可以正常销毁的,但是却因为抛异常跳过了销毁空间的语句。这就导致一个及其严重的事故:内存泄漏!         在此之前,为了防止出现内存泄漏。我们通常是将抛出的异常再次捕获,执行销毁语句后,将异常重新抛出。但是这种方法并不太好用,所以为了更好的解决这个问题:智能指针诞生了。 2.RAII和智能指针的设计

By Ne0inhk
C++的IO流和C++的类型转换----《Hello C++ Wrold!》(29)--(C/C++)

C++的IO流和C++的类型转换----《Hello C++ Wrold!》(29)--(C/C++)

文章目录 * 前言 * C++的类型转换 * 四种命名的强制类型转换操作符 * static_cast * reinterpret_cast * const_cast * dynamic_cast * RTTI(这个了解一下就行了) * C++的IO流 * C++文件的IO流 * stringstream 前言 在 C++ 编程体系中,类型转换与 IO 流是支撑程序数据处理与交互的两大核心环节。类型转换关乎数据在不同类型间的安全传递与运算适配,而 IO 流则负责程序与外部设备(如键盘、屏幕、文件)之间的数据输入与输出,二者共同构成了 C++ 程序实现功能、交互信息的基础框架。 C 语言中的类型转换方式虽简洁,却存在可视性差、难以追踪的问题,容易在复杂程序中引发潜在的逻辑错误。为解决这一痛点,C++ 引入了四种命名明确的强制类型转换操作符 ——static_cast、reinterpret_

By Ne0inhk

C++ 有哪些性能分析工具?

2026年 C++ 性能分析(Profiling)工具全景(基于当前社区共识与生产实践) C++ 性能分析工具主要分为几大类:采样型(Sampling)、插桩型(Instrumentation)、内存专用、硬件级深度分析、火焰图/可视化等。 下面按实用性、流行度、使用场景排序,列出目前最常用、最推荐的工具(2025-2026年真实开发者反馈): 排名工具名称类型平台支持开源/免费核心优势(2026现状)主要缺点推荐场景学习曲线1perf (Linux kernel)采样 + 硬件事件Linux开源免费轻量、无侵入、硬件PMU支持极好、火焰图生态完善无GUI(需配合Hotspot/FlameGraph)Linux服务器/嵌入式/高性能后台首选★★☆2Intel VTune Profiler采样+插桩+硬件深度Windows/Linux(macOS查看器)免费(oneAPI)硬件级分析最强(cache miss、

By Ne0inhk
Redis核心通用命令深度解析:结合C++ redis-plus-plus 实战指南

Redis核心通用命令深度解析:结合C++ redis-plus-plus 实战指南

前言:为何选择 Redis 与 C++? 在当今这个数据驱动的时代,高性能的数据存储与访问是构建现代化应用的基石。Redis,作为一个开源的、基于内存的键值对存储数据库,以其无与伦比的读写速度、丰富的数据结构、以及灵活的应用场景(缓存、消息队列、会话存储、排行榜等),成为了后端开发者的瑞士军刀。 与此同时,C++ 作为一门追求极致性能的编程语言,长期以来在游戏开发、金融交易、高性能计算等领域占据着主导地位。当 C++ 的高性能与 Redis 的高速度相结合时,我们便能够构建出响应迅捷、吞吐量巨大的应用程序。 然而,要将二者优雅地结合起来,我们需要一个强大的“桥梁”——Redis 客户端库。redis-plus-plus 就是这样一个专为现代 C++ (C++11 及以上) 设计的优秀库。它不仅封装了 Redis 的原生协议,提供了类型安全、易于使用的 API,

By Ne0inhk