JDK环境配置全解析:从安装到多版本管理实战指南
1. 为什么JDK安装总出问题从根上理解环境配置每次看到“JDK安装教程”很多朋友可能觉得这已经是老生常谈了网上一搜一大把。但实际情况是无论是刚入门编程的新手还是需要切换项目环境的老手在安装和配置JDK特别是最新版本时依然会频繁踩坑。问题往往不在于安装包本身而在于对“安装”和“配置”这两个概念的理解混淆以及对操作系统环境管理机制的不熟悉。今天我们就以最新的JDK 22为例彻底把这件事讲透。这不是一个简单的“下一步、下一步”点击指南而是一份让你真正理解自己在做什么以及为什么这么做的原理性教程。理解了原理无论是JDK 8、11、17还是未来的版本你都能从容应对再也不会被“找不到JDK”、“不是内部或外部命令”这类错误困扰。JDKJava Development Kit是Java开发的基石。安装它意味着将编译、运行Java程序所需的工具如javac,java和核心库放入你的电脑。而配置特指设置JAVA_HOME和PATH这两个环境变量目的是告诉操作系统“嘿我装的Java工具在哪里以后请在任意位置都能直接调用它们。”很多教程只教步骤不解释原因导致一旦步骤稍有变动或系统环境复杂用户就不知所措。我们这次就从下载源头开始一步步拆解并深入每个操作背后的意图确保你一次配置终身受益。2. 下载前的关键抉择选择正确的JDK发行版走到官网下载页面前你需要做一个重要选择这个选择会直接影响后续的安装体验、许可协议甚至运行性能。很多人直接搜索“JDK下载”就点了第一个链接这其实埋下了隐患。2.1 官方Oracle JDK vs. 开源发行版访问Oracle官网你会发现JDK 22有两个主要选项Oracle JDK和OpenJDK。它们是什么关系Oracle JDK基于OpenJDK源码构建但包含了Oracle的一些商业特性如Java Flight Recorder, Java Mission Control的某些高级功能。对于个人学习、开发和测试Oracle JDK 22在OTNOracle技术网许可协议下是免费的。但如果你在生产环境使用并且涉及某些商业用途就需要仔细阅读其许可条款。它的安装包通常提供了更图形化的安装向导。OpenJDK这是Java SE平台的开源参考实现。完全免费遵循GPLv2CPE许可证。我们常说的“开源JDK”就是指它。但Oracle官网只提供源码预构建的二进制文件需要从其他供应商处获取。对于绝大多数开发者我的建议是选择其他供应商提供的OpenJDK发行版。理由如下许可清晰完全免费无论个人还是商用无后顾之忧。长期支持LTS选择丰富除了最新的JDK 22你还能轻松找到并安装LTS版本如JDK 17, JDK 21这对于企业级稳定项目至关重要。下载体验好通常提供直接的压缩包如.zip,.tar.gz和安装包无需Oracle账户下载速度更快。2.2 主流OpenJDK发行版推荐这里有几个备受社区信赖的供应商它们的JDK 22都值得信赖Eclipse Temurin由Adoptium项目提供目前社区最活跃、最受推荐的选择之一。提供清晰的LTS和最新版本下载安装包格式齐全。Amazon Corretto亚马逊提供承诺长期免费支持与OpenJDK完全兼容在AWS服务和广大开发者中应用广泛。Microsoft Build of OpenJDK微软维护与Windows系统集成体验可能更好。Azul ZuluAzul Systems提供社区版免费也有商业支持选项。对于本教程我将以Eclipse Temurin JDK 22在Windows系统上的安装为例进行演示因为它的流程具有代表性且其官网交互非常友好。其他发行版和操作系统macOS, Linux的思路完全一致只是安装包格式和路径略有不同我会在关键点指出差异。注意请避免从不明来源的第三方网站下载所谓的“破解版”或“绿色版”JDK这些版本可能被植入恶意软件或经过不恰当的修改导致开发环境不稳定。3. 实战下载与安装Eclipse Temurin JDK 22现在我们开始动手。我会详细解释每一步的目的让你知其然更知其所以然。3.1 获取安装包打开浏览器访问 Eclipse Temurin 的官方网站。在下载页面你会看到清晰的版本选择。找到JDK 22或者你需要的特定版本比如LTS版本的JDK 21。选择你的操作系统和架构。对于大多数现代Windows电脑选择Windows-x64-Installer。这里你有两个选择.msi安装程序推荐大多数用户使用。它提供图形化向导能自动处理一些系统级的注册和关联对于只想快速安装并使用的用户最方便。.zip压缩包适合高级用户或需要便携式、多版本管理的场景。它不需要安装解压即用但所有环境变量都需要手动配置。点击下载.msi安装程序。3.2 运行安装程序并理解安装路径双击下载好的.msi文件运行。在安装向导中大部分步骤可以点击“Next”通过。但有一个关键页面需要你留意选择安装路径。默认路径通常是C:\Program Files\Eclipse Adoptium\jdk-22.0.x.x-hotspot。你可以保持默认也可以点击“Change”安装到其他位置例如D:\Java\jdk-22。重要建议安装路径中不要包含中文或空格。虽然现代软件对此兼容性好了很多但某些古老的脚本或工具仍可能因路径空格而解析错误。使用像D:\Java\jdk-22这样的纯英文、无空格路径是最稳妥的。记住你选择的这个路径稍后配置环境变量时会用到我们称之为你的JDK安装目录。继续完成安装。安装程序可能会自动为你设置一个系统级的JAVA_HOME和将%JAVA_HOME%\bin添加到系统PATH中。但不要完全依赖于此我们仍需手动验证并理解如何配置因为自动配置有时可能不生效或者当你需要管理多个JDK版本时手动配置是必须掌握的技能。3.3 验证基础安装安装完成后我们先进行一个快速验证看看JDK是否被正确安装到指定位置。打开文件资源管理器导航到你刚才的安装路径你的JDK安装目录。进入该目录你应该能看到一系列文件夹如bin,conf,include,jmods,legal,lib。bin 这是最重要的目录里面包含了java.exe运行工具、javac.exe编译工具、jconsole.exe等可执行文件。lib 包含Java的核心类库如rt.jar在旧版本中新版本采用模块化设计。尝试直接运行这些工具。打开命令提示符WinR输入cmd然后使用cd命令切换到你的JDK的bin目录下例如cd D:\Java\jdk-22\bin然后输入java -version如果安装成功你会看到类似下面的输出显示了JDK的版本信息22、运行时环境信息等。这说明JDK本身已经存在于你的电脑上了。4. 核心环节手动配置环境变量以Windows为例这是整个教程最关键、最容易出错的部分。自动配置可能帮你做了但手动掌握是独立解决问题的根本。4.1 环境变量是什么为什么需要它们想象一下你的电脑是一个大仓库操作系统java和javac这些工具是仓库里的货物可执行程序。当你直接在货物旁边bin目录里时你当然能直接使用它们。但当你身处仓库的其他任何角落比如你的项目目录D:\MyProject时仓库管理员操作系统就不知道去哪里找这些工具了。环境变量就是贴在仓库墙上的“指示牌”。JAVA_HOME指示牌指向存放Java工具的那个货架区域JDK安装根目录。PATH是一个列表告诉管理员在哪些货架区域里寻找你想要的工具。我们把%JAVA_HOME%\bin这个具体位置工具所在的箱子添加到PATH列表里。这样无论你在仓库的哪个位置喊“我要用java”管理员都能根据PATH里的指示快速找到JAVA_HOME指向的货架并在其下的bin箱子里找到java工具给你。4.2 逐步配置JAVA_HOME和PATH打开环境变量设置界面在Windows搜索框输入“环境变量”选择“编辑系统环境变量”。在弹出的“系统属性”窗口中点击右下角的“环境变量(N)...”按钮。新建系统变量JAVA_HOME在下面的“系统变量(S)”区域点击“新建...”。变量名(N)输入JAVA_HOME必须大写这是约定俗成的规范。变量值(V)输入你的JDK安装根目录即前面提到的你的JDK安装目录例如D:\Java\jdk-22。关键点路径不要以反斜杠\结尾直接到jdk-22这一层即可。点击“确定”。编辑系统变量PATH在“系统变量”列表中找到Path变量选中它点击“编辑...”。在打开的编辑环境变量窗口中点击“新建”。输入新的一行%JAVA_HOME%\bin。重要技巧使用%JAVA_HOME%\bin而不是绝对路径如D:\Java\jdk-22\bin的好处是当你将来需要升级或切换JDK版本时只需修改JAVA_HOME这一个变量的值PATH会自动生效无需再次修改。这是管理多版本JDK的基础。点击“确定”保存。建议通过“上移”按钮将%JAVA_HOME%\bin移动到列表靠前的位置因为系统在PATH中查找命令时是按顺序进行的放在前面可以确保优先使用我们配置的JDK。验证配置关闭所有已经打开的命令提示符或PowerShell窗口。这一步非常重要因为环境变量的更改只对新打开的终端会话生效。打开一个新的命令提示符cmd或 PowerShell。不再需要切换到bin目录直接在任意路径下输入java -version再次输入javac -version如果两条命令都成功输出版本信息java -version显示运行时版本javac -version显示编译器版本两者应一致为22那么恭喜你环境变量配置成功你现在可以在系统的任何位置使用Java命令了。5. 多版本JDK管理与切换实战在实际开发中你很可能需要同时维护多个项目它们可能要求不同的JDK版本比如老项目用JDK 8新项目用JDK 22。如何优雅地管理5.1 方法一手动修改JAVA_HOME最基础这是最直接的方法。按照第4节的步骤安装另一个版本的JDK如JDK 17到另一个目录例如D:\Java\jdk-17。当需要切换时只需去系统环境变量里将JAVA_HOME的值从D:\Java\jdk-22改为D:\Java\jdk-17然后重启终端即可。这种方法简单但切换不够灵活需要手动操作和重启终端。5.2 方法二利用Shell脚本或批处理进阶你可以为每个版本编写一个简单的脚本文件来快速切换。创建一个文本文件命名为use-jdk22.batWindows批处理内容如下echo off setx JAVA_HOME D:\Java\jdk-22 /M echo JAVA_HOME has been set to JDK 22. Please restart your terminal.同样创建use-jdk17.bat内容指向JDK 17的路径。以管理员身份运行对应的.bat文件它会修改系统的JAVA_HOME。之后新打开的终端就会使用对应的JDK版本。注意setx是永久修改环境变量/M表示修改系统变量需要管理员权限。修改后对已打开的终端无效。5.3 方法三使用版本管理工具推荐对于需要频繁切换版本的开发者使用专门的工具是最高效的方式。Windows/macOS/Linux 通用SDKMAN!(主要用于macOS/Linux但Windows可通过WSL使用)这是一个强大的工具可以管理多个SDK版本包括Java、Groovy、Scala等。命令如sdk install java 22-tem安装sdk use java 22-tem切换当前会话版本。WindowsJabba一个受Node.js的nvm启发的Java版本管理工具。你可以通过jabba install openjdk1.22.0安装jabba use openjdk1.22.0切换。IDE内置管理像IntelliJ IDEA、Eclipse这样的现代IDE允许你为每个项目单独指定JDK路径。在IDE的“项目结构”或“构建路径”设置中你可以添加多个JDK然后为当前项目选择其中一个。这是项目级隔离的最佳实践不影响系统全局环境。个人建议对于初学者掌握方法一手动修改和理解其原理是根本。随着项目增多可以转向使用方法三中的IDE项目管理功能这是最清晰、冲突最少的方式。跨平台或脚本化需求强的开发者可以学习SDKMAN!或Jabba。6. 集成开发环境IDE中的JDK配置即使系统环境变量配置正确IDE也可能因为自身配置问题而“找不到JDK”。这里以最流行的IntelliJ IDEA为例。打开项目配置在IDEA中点击File-Project Structure...(快捷键CtrlAltShiftS)。添加JDK在Project Structure窗口左侧选择Project-SDK。点击下拉框旁边的“Add” -Add JDK...。选择JDK主目录在弹出的文件选择器中导航到你安装的JDK 22的根目录即JAVA_HOME指向的目录如D:\Java\jdk-22然后点击“OK”。验证IDEA会自动识别该目录下的JDK并显示版本号。在Project选项卡下的Project SDK和Project language level中选择你刚刚添加的JDK 22。模块级配置在左侧选择Modules确保每个模块的Dependencies选项卡中Module SDK也选择了正确的JDK 22。完成以上步骤后IDEA就会使用你指定的JDK 22来编译和运行本项目完全独立于系统环境变量。这也是解决“系统装了JDK 22但IDEA还在用旧版本”或“it is configured to use jdk 0, but ide supports compilation using jdk 7 and”这类诡异报错的根本方法——去IDE的项目配置里检查并修正SDK设置。7. 常见问题排查与深度解决即使按照教程一步步来也可能遇到问题。这里列出几个经典问题及其根因和解决方案。7.1 问题‘java‘ 不是内部或外部命令也不是可运行的程序这是最经典的错误根本原因是PATH环境变量未正确设置或未生效。排查步骤在新终端输入echo %JAVA_HOME%。如果显示为空或不是你的JDK路径说明JAVA_HOME变量未设置或设置错误。返回第4节重新配置。如果JAVA_HOME正确输入echo %PATH%检查输出的长长一串路径中是否包含%JAVA_HOME%\bin或你JDK的绝对bin路径。如果没有说明PATH设置有问题。如果路径包含检查是否有拼写错误特别是JAVA_HOME的大小写和bin的拼写。终极验证直接运行完整路径。例如输入D:\Java\jdk-22\bin\java -version注意路径有空格或特殊字符时需加引号。如果这样能成功那100%是环境变量问题。如果不成功那可能是JDK安装本身损坏考虑重新安装。7.2 问题‘javac‘ 不是内部或外部命令但 ‘java‘ 命令可以这个问题非常典型它指明了PATH中可能只包含了JRE的路径而非完整的JDK路径。根因分析java命令位于JRE的bin目录下而javac编译器只存在于JDK的bin目录下。如果你不小心只安装了JRE或者环境变量指向了一个JRE目录就会出现此问题。解决方案检查你的JAVA_HOME指向的目录。一个完整的JDK安装根目录下应该有bin,lib,include,jmods等文件夹。如果只有bin和lib且结构较简单那可能只是JRE。请确保你下载并安装的是JDK(Java Development Kit)而不是JRE(Java Runtime Environment)。然后确保JAVA_HOME指向这个JDK的根目录。7.3 问题版本混乱命令显示的版本与预期不符在终端输入java -version显示的却是旧的JDK 8或11而不是你刚装的22。根因分析你的系统里存在多个Java安装。PATH环境变量是一个列表操作系统会按照列表顺序从上到下查找命令。如果旧版本Java的路径比如C:\Program Files (x86)\Common Files\Oracle\Java\javapath排在了你新配置的%JAVA_HOME%\bin前面系统就会优先使用旧版本。解决方案打开环境变量设置编辑PATH变量。找到指向旧版本Java的条目如上述的Oracle路径可以将其删除或者将你的%JAVA_HOME%\bin条目通过“上移”按钮移动到比它更靠前的位置。关闭所有终端重新打开再次验证。7.4 关于镜像网站与下载加速从Oracle官网下载JDK可能速度较慢。除了选择Eclipse Temurin、Amazon Corretto等开源发行版它们通常有全球CDN加速之外如果你仍需下载Oracle官方版本可以搜索“Oracle JDK 国内镜像”来寻找国内的大学或社区镜像站但务必注意镜像站的安全性和时效性。更推荐直接使用开源发行版一劳永逸地解决下载和许可问题。通过以上七个部分的详细拆解你应该不仅掌握了安装JDK 22的步骤更理解了每一步背后的原理、各种选择的权衡以及遇到问题时的排查思路。记住环境配置是开发者的基本功扎实的理解能让你在后续学习框架、构建工具如Maven、Gradle和部署应用时更加得心应手。现在你的JDK 22环境已经就绪可以开始创建你的第一个Java 22项目了。

相关新闻

Mac批量DOCX转PDF:AppleScript驱动Word实现自动化高保真转换

Mac批量DOCX转PDF:AppleScript驱动Word实现自动化高保真转换

1. 项目概述:为什么Mac用户需要批量DOCX转PDF?在Mac上处理文档,尤其是需要对外分发、归档或打印时,PDF格式几乎是黄金标准。它格式固定、跨平台显示一致、不易被随意编辑,这些特性让PDF在正式场合无可替代。然而&#…

2026/10/11 18:39:34 阅读更多 →
复现论文代码前的安全检查:权重、eval 与 Shell 参数

复现论文代码前的安全检查:权重、eval 与 Shell 参数

复现论文代码前的安全检查:权重、eval 与 Shell 参数 论文代码通常以复现研究结果为目标,迁入服务前仍需补充输入校验、依赖锁定和运行隔离。不要把仓库中的脚本直接作为服务入口;应先提取核心算法,并审查反序列化、动态执行与路径…

2026/10/12 17:02:19 阅读更多 →
多模态大模型为何在纯文本任务上表现下降?解析注意力机制与数据偏见

多模态大模型为何在纯文本任务上表现下降?解析注意力机制与数据偏见

1. 从“全知全能”到“顾此失彼”:一个反直觉的AI现象最近在折腾几个主流的多模态大模型时,我遇到了一个挺有意思的现象,相信不少同行也深有体会:当你给一个原本在纯文本任务上表现优异的语言大模型(LLM)接…

2026/10/12 19:28:36 阅读更多 →

最新新闻

线上复试全流程复盘:电子信息专硕面试准备与避坑指南

线上复试全流程复盘:电子信息专硕面试准备与避坑指南

2020年的复试,对很多考研人来说都是一个特殊的节点。那年我报考了某所985高校的电子信息专硕,初试成绩出来后,一边担心复试线,一边第一次面对“线上复试”这个几乎没有先例可循的新玩法。整个复试从通知到正式进行只有不到两周的准…

2026/10/13 21:13:03 阅读更多 →
均匀分布与Wasserstein距离:40行MATLAB代码实现1D与2D计算

均匀分布与Wasserstein距离:40行MATLAB代码实现1D与2D计算

简介:这份资源是一套面向概率统计、机器学习与最优传输方向学习者的紧凑MATLAB代码,用于计算一维离散均匀概率分布之间的1-Wasserstein距离与2-Wasserstein距离。代码基于累积分布函数及其伪逆的阶跃函数表达实现,假定输入样本已按升序排列&a…

2026/10/13 21:13:03 阅读更多 →
阿里云ACP认证备考全攻略:从报名到拿证避坑指南

阿里云ACP认证备考全攻略:从报名到拿证避坑指南

进入正文。杭城某个周五晚上,我在某互联网公司做运维,群里忽然有个同事甩来一条消息:“要不要一起考个阿里云ACP?公司能报销考试费。”当时我第一反应是“考这玩意儿干啥?又不可能靠它涨工资”。后来真香了——不是因为…

2026/10/13 21:13:03 阅读更多 →
Spring Boot+Vue高校教师科研管理系统:从设计到部署全流程解析

Spring Boot+Vue高校教师科研管理系统:从设计到部署全流程解析

简介:基于 Spring Boot 与 Vue 构建的高校教师科研管理系统,是一套面向管理员、教师、学院三级用户的毕业设计源码案例,覆盖科研课题、软件著作权、论文、专利及科研成果的提交、校审与归档全流程,适合计算机相关专业学生做课设/毕…

2026/10/13 21:13:03 阅读更多 →
健身博主从零到一:定位、内容运营与变现的完整指南

健身博主从零到一:定位、内容运营与变现的完整指南

1. 健身博主从零起步的真实困境:缺的不只是内容能力这几年做博主孵化,我见过太多健身领域的内容创作者,在最初的三到六个月里就选择了放弃。他们中很多人本身练得不错,专业知识也能聊,甚至有些人已经在线下带过不少学员…

2026/10/13 21:13:03 阅读更多 →
R语言回归实战:首尔自行车需求预测与Cubist模型调优

R语言回归实战:首尔自行车需求预测与Cubist模型调优

简介:这份资源面向具备一定R语言基础、希望上手真实回归建模的数据分析学习者与从业者,围绕首尔自行车共享系统的每小时租赁需求预测展开。数据源自首尔自行车共享计划,核心目标是借助温度、时间、假期、季节等变量,预测每小时所需…

2026/10/13 21:12:02 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →