THE JAVA IDE · 从入门到专家 · macOS 篇
JetBrains 是捷克 IDE 厂商,旗下每款 IDE 针对特定技术栈深度优化:
| IDE | 核心技术栈 | 相当于 |
|---|---|---|
| IntelliJ IDEA Ultimate | Java + Spring + JVM + Web + DB + Docker | 全能旗舰 |
| IntelliJ IDEA Community | Java + Kotlin + Groovy + Gradle/Maven | 免费开源版 |
| PyCharm | Python + Django/Flask + Jupyter + Data Science | Python 专用 |
| WebStorm | JavaScript/TypeScript + React/Vue/Angular + Node.js | 前端专用 |
| GoLand | Go + gRPC + Docker + Kubernetes | Go 专用 |
| DataGrip | SQL + 所有主流数据库管理 | 数据库工具 |
| Rider | C# + .NET + Unity | .NET 专用 |
Community(免费):如果只写纯 Java SE、Kotlin、Gradle/Maven 项目,Community 完全够用。
Ultimate(付费):如果你需要 Spring Boot、Jakarta EE、数据库工具、JavaScript/TypeScript、Docker、Kubernetes、HTTP Client — 那就上 Ultimate。学生/开源项目可申请免费 License。
如果你是 Java + Spring 开发,IntelliJ IDEA Ultimate 包含了 WebStorm 和 DataGrip 70% 的功能。不需要额外买 WebStorm。如果你只做 Python → PyCharm,只做 Go → GoLand。Ultimate 是全栈瑞士军刀,其他 IDE 是专精工具。
# 方式1:JetBrains Toolbox(推荐,统一管理所有 JetBrains IDE 的版本更新) # 下载 https://www.jetbrains.com/toolbox-app/ # 通过 Toolbox 安装/更新/回退所有 JetBrains IDE # 方式2:Homebrew brew install --cask intellij-idea # Ultimate brew install --cask intellij-idea-ce # Community # 方式3:官网下载 .dmg # https://www.jetbrains.com/idea/download/ # 选择 Apple Silicon (.dmg) 版本
IntelliJ 本身是一个 JVM 应用,默认堆内存只有 2GB,大项目会卡。在 macOS 上这样调优:
# 关键参数调整(按你的 Mac 内存调整) # 16GB Mac: Xmx=4096m, 32GB+: Xmx=8192m -Xms2048m -Xmx4096m -XX:ReservedCodeCacheSize=512m -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:CICompilerCount=2 -XX:+HeapDumpOnOutOfMemoryError # 以下适用于 Apple Silicon (M1/M2/M3/M4) -XX:+UseStringDeduplication --add-opens=java.base/java.lang=ALL-UNNAMED
macOS 上的 IntelliJ 不要用 Java 8 运行(IDE 本身)。Toolbox 安装版自带 JBR (JetBrains Runtime),性能最好。如果用它,不需要单独安装 JDK。
macOS 的 ⌘ 键在 IntelliJ 中承担了大量快捷键,但 macOS 系统默认的键位切换(输入法切换)常和 IntelliJ 快捷键冲突。建议:
• 系统设置 → 键盘 → 键盘快捷键 → 输入法:把"选择上一个输入法"的快捷键从 ⌘Space 改为其他组合(如 ⌃Space),解绑 IntelliJ 的基础代码补全快捷键
• IntelliJ 设置 → Keymap:选择 macOS 或 IntelliJ IDEA Classic (macOS)
# 方式1:New Project → Spring Initializr(推荐 Spring Boot 项目) # Language: Java, Type: Maven, Spring Boot: 3.x # Dependencies: Spring Web, Spring Data JPA, Lombok, MySQL Driver # 方式2:从现有代码导入 # File → Open → 选择包含 pom.xml / build.gradle 的目录 # IntelliJ 自动识别 Maven/Gradle 项目 # 方式3:从 Git 克隆 # File → New → Project from Version Control → 粘贴 Git URL # IntelliJ 会在克隆后询问是否打开为项目
# 安装 SDKMAN!(Java 版本管理器) curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh" # 安装常用 JDK 版本 sdk install java 21.0.2-tem # LTS,生产环境推荐 sdk install java 17.0.10-tem # LTS,企业项目常用 sdk install java 11.0.22-tem # LTS,老项目兼容 sdk default java 21.0.2-tem # 设置默认版本 # IntelliJ 中: Project Structure → SDK → Add SDK → 选择 SDKMAN! 安装的路径 # 路径: ~/.sdkman/candidates/java/21.0.2-tem
IntelliJ 之王在于你可以完全不用鼠标。以下快捷键是 macOS 键位,假设你用 macOS Keymap。
# 在弹出框里你可以做所有事: # - 输入类名 → 直接跳转到类 # - 输入文件名 → 直接打开文件 # - 输入方法名 → 跳转到方法 # - 输入 Action 名称 → 执行任意 IDE 操作(如 "refactor this") # - 输入 Git Branch 名 → 切换分支 # - 输入设置项 → 直接跳转到对应设置 # 肌肉记忆:遇到任何事 — 双击 ⇧
⌘O 打开类 (Navigate → Class) ⌘⇧O 打开文件 (Navigate → File) ⌘⌥O 打开符号/方法 (Navigate → Symbol) ⌘E 最近打开的文件 (Recent Files) ⌘⇧E 最近编辑的位置 (Recent Locations) ⌘[ / ⌘] 前进/后退 (Navigate → Back/Forward) ⌘B 跳转到声明 (Go to Declaration) ⌘⌥B 跳转到实现 (Go to Implementation(s)) ⌘U 跳转到父类/父方法 (Go to Super) ⌘F12 文件结构弹出窗 (File Structure Popup) ⌘L 跳转到指定行 (Go to Line) ⌘⇧F7 高亮文件中所有出现 (Highlight Usages in File) ⌘⌥F7 查找所有引用 (Find Usages) ^⌥H 查看方法调用层次 (Call Hierarchy)
⌘F 当前文件内查找 ⌘R 当前文件内替换 ⌘⇧F 全局搜索 (Find in Files) — 可以限定目录、文件类型、正则 ⌘⇧R 全局替换 (Replace in Files) ⌘⇧A 查找 Action (Find Action) — 搜索任何 IDE 操作 ⌥F7 查找选中符号的引用
不要试图一次背所有快捷键。第一周只练这 5 个:⇧⇧ ⌘O ⌘E ⌘B ⌘⌥L。练熟后每周加 3 个新快捷键。两周后你就不想碰鼠标了。
Live Templates 是 IntelliJ 的"代码片段缩写"。输入缩写 → 按 Tab → 展开为完整代码模板。
# Java psvm + Tab → public static void main(String[] args) {} sout + Tab → System.out.println(); soutv + Tab → System.out.println("var = " + var); soutm + Tab → System.out.println("ClassName.methodName"); fori + Tab → for (int i = 0; i < ; i++) {} iter + Tab → for (Type item : collection) {} ifn + Tab → if (var == null) {} inn + Tab → if (var != null) {} # Spring Boot @autowired + Tab → 展开并自动提示需要注入的 Bean @RestController → 类级别:创建 RestController # 自定义 Live Template(Settings → Editor → Live Templates) # Abbreviation: logm # Template text: private static final Logger log = LoggerFactory.getLogger($CLASS_NAME$.class); # Abbreviation: toj (JSON 序列化) # Template text: objectMapper.writeValueAsString($EXPR$);
重构不是"查找替换",而是语义级的安全重构——IntelliJ 理解你的代码结构,重构时自动更新所有引用。
⇧F6 重命名 (Rename) — 类/方法/变量/包/文件,所有引用自动更新 ⌘⌥V 提取变量 (Extract Variable) ⌘⌥M 提取方法 (Extract Method) — 选中代码块 → 生成独立方法 ⌘⌥C 提取常量 (Extract Constant) ⌘⌥P 提取参数 (Extract Parameter) ⌘⌥N 内联 (Inline) — 反向操作,把方法/变量展开到调用处 ⌘⌥T 包围 (Surround With) — 用 if/try-catch/while 包裹选中代码 ^T 重构菜单 (Refactor This) — 显示当前上下文所有可用重构操作
⌘N 生成菜单 (Generate) — Constructor / Getter / Setter / toString / equals & hashCode ^I 实现方法 (Implement Methods) — 快速实现接口 ^O 重写方法 (Override Methods) — 快速重写父类方法 ⌘J 插入 Live Template 列表 ⌘⌥T 包围 (Surround With) # Lombok 时代(推荐用 Lombok 注解替代生成) @Data // @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor @Builder // Builder 模式 @AllArgsConstructor @NoArgsConstructor
⌘⌥L 格式化代码 (Reformat Code) ⌘⌥O 优化导入 (Optimize Imports) — 删除不用的 import,排序 ⌘⌥I 自动缩进 (Auto-indent Lines) ⌘⇧↵ 补全当前语句 (Complete Current Statement) — 自动加分号、括号
^D 调试运行 (Debug) — 以 Debug 模式启动 F8 单步跳过 (Step Over) — 不进入方法 F7 单步进入 (Step Into) — 进入方法 ⇧F8 单步跳出 (Step Out) — 跳出当前方法 ⌥F9 运行到光标 (Run to Cursor) ⌘F8 切换断点 (Toggle Breakpoint) ⌘⇧F8 查看所有断点 (View Breakpoints) ⌥F8 表达式求值 (Evaluate Expression) — 在断点处执行任意代码
# 场景:循环 10000 次,只在第 99 次进入时断点 for (int i = 0; i < 10000; i++) { processItem(list.get(i)); // 在这一行打断点 } # 右键断点(红点)→ 勾选 Condition → 输入 i == 99 # 更多条件示例 user.getName().equals("Levi") // 只在特定用户时停住 order.getAmount() > 10000 // 大额订单才断 exception.getMessage().contains("timeout") // 特定错误才断
# 断点停住后: # - Variables 面板 → 右键任意变量 → Set Value → 输入新值 # - 或 ⌥F8 → 输入赋值语句 → 按回车 # 实战:故意把金额改成负数,测试异常处理 order.setAmount(-1.0); // 在 Evaluate Expression 中执行 # 继续运行,观察系统如何处理负数金额
IntelliJ 支持多种断点,右键断点可设置:
Exception Breakpoints:不打断在某一行,而是任何地方抛出指定异常时暂停(View Breakpoints → + → Java Exception Breakpoints)
Field Watchpoints:在某字段被读写时暂停(非常适合追踪"谁在改这个变量")
Method Breakpoints:进入或退出某个方法时暂停(适合追踪调用链)
Log Breakpoints:不暂停,只输出日志到 Console(适合不中断流程的调试)
在 Variables 面板选中一个复杂对象 → 右键 → View as → JSON → 直接把对象以 JSON 格式展示,比盯着 `toString()` 舒服 100 倍。Spring Boot 项目调试必用。
IntelliJ 的 Git 集成不是简单的 GUI 外壳。它的优势:
• Diff 视图:代码级高亮差异,比 git diff 直观 10 倍
• 智能合并:3-way merge 编辑器,左边是你的版本,右边是远程版本,中间是合并结果
• 局部提交:可以只提交文件中的部分改动(Changelist 功能)
• Changelist:把改动分成多组,分别提交(比如"功能A改动"和"重构B改动"分开)
• Shelve:暂存未完成的改动(比 git stash 强,可以 shelve 部分文件)
⌘K 提交 (Commit) — 打开 Commit 面板 ⌘⇧K 推送 (Push) ⌘T 拉取/更新 (Update Project) ⌘D 显示 Diff (Show Diff) ⌘⌥Z 回滚选中改动 (Rollback) ^V VCS 操作弹出窗 (VCS Operations Popup) # Commit 面板的最佳实践 # - Before Commit: Reformat code ✓ / Optimize imports ✓ / Analyze code ✓ # - Commit Message: 在 Commit 面板里写,标题行 + 空行 + 详细描述
冲突发生时,IntelliJ 打开 3-way merge 编辑器:
• 左面板:你的本地版本
• 右面板:远程/incoming 版本
• 中间面板:合并结果(你在这里编辑)
点击 « / » 箭头接受某一边的改动,或手动编辑中间面板。点 Apply 完成合并。这是比命令行 merge 高效得多的方式。
即使你没有 Git commit,IntelliJ 的 Local History 也会自动保存每次编辑的快照。右键文件 → Local History → Show History → 看到所有自动保存的版本,任何版本都可以 diff 和回滚。这个功能救了无数开发者。
| 插件 | 作用 | 安装原因 |
|---|---|---|
| Key Promoter X | 你用鼠标点一个操作,它就弹提示告诉你这个操作的快捷键是什么 | 🔑 肌肉记忆训练器,新手必装 |
| Presentation Assistant | 执行任何快捷键操作时,屏幕下方显示你按了什么键 | 👀 给别人演示时让观众看到你的操作 |
| Rainbow Brackets | 每层括号用不同颜色显示 | 👁️ 嵌套多层的括号不再数晕 |
| GitToolBox | 显示每行代码的最后修改者和时间(inline blame) | 📋 看到代码就知道谁改的、什么时候改的 |
| String Manipulation | 一行代码:大小写转换/驼峰↔蛇形/camelCase↔PascalCase/排序/去重/对齐 | ⚡ 处理字符串的神器 |
| .env files support | 对 .env 文件提供语法高亮和补全 | 📄 现代项目都有 .env |
| Maven Helper | 分析 Maven 依赖冲突,一键排除 | 🔗 依赖冲突排查必备 |
| SonarLint | 实时代码质量检查,边写边提示问题 | 🛡️ 相当于代码审查 AI 在编辑器里 |
| Grep Console | 对 Console 输出着色/过滤/高亮 | 🎨 日志堆里一眼看到 ERROR |
| One Dark Theme | 深色主题,对眼睛友好 | 🌙 比默认 Darcula 更舒服的暗色主题 |
IntelliJ Ultimate 自带很多功能,不需要装插件:Lombok(内置支持)、Database Tools(内置)、Docker(内置)、Kubernetes(内置)、Spring Boot Dashboard(内置)。安装插件前,先看看 IDE 是否已经自带。
IntelliJ Ultimate 内置 HTTP Client,可以直接在 IDE 里写 .http 文件发请求。相当于 Postman + 版本管理(文件可以 commit 到 Git)。
### 获取用户列表 GET http://localhost:8080/api/users Accept: application/json ### 创建用户 POST http://localhost:8080/api/users Content-Type: application/json { "name": "Levi", "email": "levi@morningstar.club" } ### 获取用户(使用响应提取的变量) GET http://localhost:8080/api/users/{{userId}} Authorization: Bearer {{authToken}} # 所有 .http 文件都可以 Git 管理,团队共享 # 环境变量存 http-client.env.json 不提交
IntelliJ Ultimate 内置了 DataGrip 的数据库管理能力。右侧边栏 → Database → + → Data Source,支持 MySQL、PostgreSQL、MongoDB、Redis 等。
# 在 IDE 里直接做的事: # 1. 连接数据库,浏览表、视图、存储过程 # 2. 打开 Query Console,写 SQL(自动补全表名、字段名!) # 3. 选中 SQL → ⌘Enter → 执行 # 4. 结果可以直接导出为 CSV/JSON/HTML # 5. 右键表 → Diagrams → Show Visualisation → 生成 ER 图 # 6. SQL 文件可以 commit 到 Git,作为数据库迁移脚本 # 更强大的是:写 Java 代码时,IDEA 知道你的数据库结构 # @Table(name = "users") → 自动提示 "users" 表中存在的列名
如果你写 Spring Boot,右侧边栏 → Services → Spring Boot → 所有 @SpringBootApplication 类会被自动发现。
• 一键启动/停止/重启 Spring Boot 应用
• 查看所有 Bean、请求映射(Endpoint)
• 集成了 Actuator 信息(health / metrics / env)
Settings → Build → Docker → 连接到本地 Docker daemon。之后可以:
• 在 IDE 里查看所有 container / image / network / volume
• Dockerfile / docker-compose.yml 语法高亮 + 自动补全
• 右键 → Run 直接启动 compose 环境
• 查看 container 日志流(带搜索和高亮)
⌥F12 或在底部栏点击 Terminal,打开内嵌终端。它直接打开在你的项目根目录,支持多个 Tab,支持分屏。macOS 默认用的是你的系统 zsh。
IntelliJ Ultimate 内置 Async Profiler。Run → Profile → 你的应用启动后会生成 Flame Graph、调用树、内存分配热点。这是 JVM 应用的性能分析利器。
Week 1:安装 → 创建项目 → Double Shift 搜索一切 → 学会导航三件套 ⌘O / ⌘E / ⌘B → 学会代码补全
Week 2:Live Templates → 代码格式化 ⌘⌥L → 重构 F6/⌘⌥V/⌘⌥M → Git 提交 ⌘K
Week 3:断点调试 → 条件断点 → 表达式求值 → 变量 View as JSON
Week 4:HTTP Client → Database Tools → Spring Boot Dashboard → Docker → 3-way merge 冲突解决
Advanced:Profiler → 自定义 Live Templates → 自定义 Inspections → 多人协作 Changelist