【2026版】macOS 使用 Homebrew 快速安装 Java 21 教程

在 macOS 上配置 Java 环境时,很多开发者会遇到 no bottle available 或环境变量配置失效的问题。本文将介绍目前最稳定、最推荐的安装方式:使用 Homebrew Cask 安装 Eclipse Temurin

为什么选择 Temurin?

  • 兼容性好:前身为 AdoptOpenJDK,是目前最主流的 OpenJDK 发行版。
  • 安装简单:使用 Cask 安装会自动放入系统目录,无需手动配置繁琐的 PATH
  • 识别率高:IntelliJ IDEA、Eclipse 等 IDE 可以直接识别,无需寻找隐藏路径。

🚀 安装步骤

1. 确保 Homebrew 已更新

在安装任何新软件包之前,建议先更新 Homebrew 索引:

brew update 

2. 执行安装命令

直接在终端输入以下正确命令:

brew install --cask temurin@21 

注:使用 --cask 会直接下载预编译好的 .pkg 安装包,避开复杂的源码编译过程。

3. 验证安装

安装完成后,无需重启电脑,只需新开一个终端窗口或执行 source,然后输入:

java -version 

预期输出:

openjdk version “21.x.x” …
Runtime Environment Temurin-21…

🛠 进阶技巧:多版本管理

如果你电脑上同时需要 Java 8, 11 和 21,可以按照以下逻辑操作:

1. 安装其他版本

brew install --cask temurin@8 brew install --cask temurin@17 

2. 快速切换版本

macOS 提供了一个强大的工具 /usr/libexec/java_home 来定位不同版本。你可以通过在 ~/.zshrc 中添加别名来快速切换:

# 编辑配置文件nano ~/.zshrc # 添加以下内容(按需开启)exportJAVA_21_HOME=$(/usr/libexec/java_home -v 21)exportJAVA_8_HOME=$(/usr/libexec/java_home -v 1.8)# 默认使用 Java 21exportJAVA_HOME=$JAVA_21_HOME# 保存退出后运行source ~/.zshrc 

❓ 常见问题排查

  • 提示 “Permission Denied”?
    安装 Cask 软件通常需要系统管理员权限,请在提示时输入你的 Mac 开机密码。
  • IDE 找不到 JDK?
    Temurin 默认安装在 /Library/Java/JavaVirtualMachines/。在 IntelliJ IDEA 中,点击 Project Structure -> SDKs -> + 号,直接指向该目录即可。
  • 之前手动删过 Java 删不干净?
    如果之前乱删导致安装失败,可以参考 macOS 完全卸载 Java 教程 先进行彻底清理。

Read more

头歌实训-逻辑回归实战:从基础到癌症识别

1. 逻辑回归:从数学原理到生活应用 第一次听说逻辑回归时,我也被这个名字迷惑过——明明是分类算法,为什么叫"回归"?后来在头歌实训平台动手实现时才发现,它其实是用回归的思想解决分类问题。就像我们用温度计测量体温,虽然得到的是连续数值,但最终判断"是否发烧"却是个二分类问题。 逻辑回归的核心武器是sigmoid函数,这个S型曲线能把任意实数映射到(0,1)区间。我常跟学生说,想象你正在挤牙膏:轻轻用力时牙膏几乎不动(输出接近0),用力到临界点时突然大量涌出(快速过渡到1)。这个非线性特性完美解决了普通线性回归在分类任务中的输出越界问题。 在癌症识别这类医疗场景中,逻辑回归有个独特优势:输出的概率值具有可解释性。当模型给出某患者恶性肿瘤概率为87%时,医生能结合其他检查综合判断。相比之下,某些"黑箱"模型虽然准确率高,但"为什么是这个结果"的解释成本反而更高。 2. 手把手实现sigmoid函数

By Ne0inhk
《算法面试“必杀技”:双指针法高效解决数组原地操作》

《算法面试“必杀技”:双指针法高效解决数组原地操作》

🔥@晨非辰Tong:个人主页  👀专栏:《C语言》、《数据结构与算法》 💪学习阶段:C语言、数据结构与算法初学者 ⏳“人理解迭代,神理解递归。” 引言:告别盲目刷题。学完顺序表后,集中攻克「删除有序数组重复项」、「移除元素」、「合并有序数组」这三道题,你将能一举掌握解决一大类数组问题的双指针技巧。 目录  1.  力扣_26. 删除有序数组中的重复项(双“指针”法)  2.  力扣_27. 移除元素(双“指针”法) 3.  88. 合并两个有序数组 - 力扣(LeetCode)  1.  26. 删除有序数组中的重复项- 力扣(LeetCode)(双“指针”法) --本题采用的方法为经典的双“指针”

By Ne0inhk
我爱学算法之—— 二分查找(下)

我爱学算法之—— 二分查找(下)

一、寻找峰值 题目解析 对于这道题,给定一个数组nums,在这数组中,可能存在多个峰值元素,我们只需找到一个峰值,然后返回峰值索引即可。 峰值元素:严格大于左右相邻的元素。 题目中给定:nums[0]和nums[n]可以看做负无穷。 算法思路 对于这道题,首先暴力解法:遍历整个数组,依次判断一个元素它是不是峰值元素。 暴力解法的时间复杂度是O(n);并且暴力解法它并没有用到题目中给的:nums[0]和nums[n]可以看做负无穷这一个条件。 当我们遍历i位置时,有且仅有两种情况:递增/递减(题目给定 nums[i] != nums[i+1])。 当i位置呈现递增趋势时,也就是nums[i] > nums[i+1],题目又给出nums[0] = nums[

By Ne0inhk
【算法】动态规划中01背包问题解析

【算法】动态规划中01背包问题解析

📢博客主页:https://blog.ZEEKLOG.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 ZEEKLOG🙉 📢未来很长,值得我们全力奔赴更美好的生活✨ 文章目录 * 🏳️‍🌈一、01 背包问题概述 * 🏳️‍🌈二、问题分析与解法 * ❤️(一)表示状态 * 🧡(二)状态转移方程 * 🧡(三)代码实现 * 🏳️‍🌈三、多种实现方式与优化 * ❤️(一)暴力搜索 * 🧡(二)记忆化搜索 * 💛(三)动态规划 * 💚(四)空间优化 * 🏳️‍🌈四、01背包例题 * ❤️[DP42 【模板】完全背包](https://www.nowcoder.com/practice/

By Ne0inhk