Java 入门就踩的 5 个坑,第 3 个我见过的人全中过

26 阅读5分钟

IT探险家 · Java 官方教程深度解读

你以为 Java 入门就是写个 Hello World?太天真了。

我带过不少刚转 Java 的同学,发现大家在「入门阶段」踩的坑出奇一致。今天把这 5 个最经典的陷阱整理出来,每个都附上「错误写法 → 正确写法 → 为什么」,看完少走半年弯路。


坑 1:分不清 JDK、JRE、JVM,面试直接翻车

踩坑现场

面试官问「JDK 和 JRE 什么区别?」,答:「呃……JDK 就是 Java 开发工具?JRE 就是运行环境?」——说了跟没说一样。

正确理解

这三个是层层包含的关系:

JDK = JRE + 开发工具(javac 编译器、jdb 调试器、javadoc 文档工具等)
JRE = JVM + 核心类库(rt.jar 等)
JVM = 字节码执行引擎

打个比方:JVM 是发动机,JRE 是能跑的整车,JDK 是整车 + 修车工具箱。

关键变化:从 Java 11 开始,Oracle 不再单独提供 JRE 下载。你装 JDK 就全有了,不用纠结装哪个。

面试加分回答:「JVM 负责执行字节码,是跨平台的核心;JRE 在 JVM 基础上加了标准类库,是运行 Java 程序的最小环境;JDK 在 JRE 基础上加了编译器等开发工具,是开发者必装的。另外 Java 11 之后就没有独立 JRE 了。」


坑 2:以为 .java 文件可以直接运行

踩坑现场

# 新手直觉操作
java HelloWorld.java   # Java 11+ 可以,但 Java 8 会报错!

这里的陷阱是:Java 的编译运行是两步走的——

.java 源文件 → javac 编译 → .class 字节码 → java 运行

标准流程:

# 第一步:编译
javac HelloWorld.java    # 生成 HelloWorld.class# 第二步:运行(注意没有 .class 后缀)
java HelloWorld          # JVM 加载并执行字节码

但是,Java 11 引入了直接运行单文件源码的能力:

java HelloWorld.java     # Java 11+ 才支持,底层仍然是编译+运行

这只是语法糖,底层依然经历了编译过程,只是帮你省了手动 javac 那一步。生产环境不会这么用,但学习时很方便。

避坑指南:初学阶段建议老老实实 javac + java 两步走,这样你能清楚看到 .class 文件的生成,理解编译和运行是两个独立阶段。


坑 3:文件名和类名不一致,编译直接报错

踩坑现场

文件名叫 hello.java,里面写的是:

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

编译:

javac hello.java
# 错误: 类 HelloWorld 是公共的, 应在名为 HelloWorld.java 的文件中声明

规则:如果类声明为 public,那么文件名必须和类名完全一致(包括大小写)。HelloWorld 类必须放在 HelloWorld.java 里。

延伸知识:一个 .java 文件可以有多个类,但最多只能有一个 public 类,且 public 类名必须与文件名一致。实际项目中,一个文件一个类是基本规范。


坑 4:把 Java 的「跨平台」理解错了

踩坑现场

「Java 跨平台,所以我在 Windows 上编译的程序,拷到 Linux 上直接就能跑?」

答案是:对的——但有前提。

跨平台的不是你的源代码,也不是编译器,而是 字节码 + JVM 的配合

  1. 你的 .java 文件经过 javac 编译,生成平台无关的 .class 字节码
  2. .class 文件可以拷到任何有 JVM 的机器上运行
  3. 不同操作系统有不同版本的 JVM,JVM 负责把字节码翻译成该系统能执行的本机指令

关键点:跨平台的是字节码,不是 JVM。每个操作系统需要安装对应版本的 JVM。所以口号是 "Write Once, Run Anywhere",前提是 "Anywhere 得先装 JVM"。

常见误解

  • ❌ 「Java 不需要编译」→ 需要,编译成字节码
  • ❌ 「Java 是解释型语言」→ 不完全是,现代 JVM 有 JIT 即时编译,热点代码会被编译为本机代码
  • ❌ 「跨平台 = 性能差」→ JIT 优化后性能接近 C++,某些场景甚至更快(运行时优化)

坑 5:搞不清 Java 版本,该装哪个?

踩坑现场

打开 Oracle 官网,Java 8、Java 11、Java 17、Java 21、Java 25……选哪个?装了 Java 21 结果公司项目跑不起来?

版本选择原则

Java 采用每 6 个月发一个新版本的节奏,但不是每个版本都值得用。认准 LTS(Long-Term Support,长期支持) 版本:

LTS 版本线:8 → 11 → 17 → 21 → 25
  • 个人学习:直接装最新 LTS(目前是 21,25 即将发布)
  • 公司项目:看项目要求,很多老项目还在 Java 8
  • 新项目:至少 Java 17,推荐 Java 21

非 LTS 版本(如 Java 22、23、24)只有 6 个月支持期,生产环境别用。

实用建议:学习时装 Java 21,面试时 Java 8 的知识也要懂(很多面试题基于 Java 8),工作后跟着项目走。


总结:入门检查清单

检查项你搞清楚了吗?
JDK vs JRE vs JVM 的包含关系
.java → javac → .class → java 的两步流程
public 类名必须与文件名一致
跨平台靠的是字节码 + JVM,不是源代码
LTS 版本线:8 → 11 → 17 → 21 → 25

全部打勾,你的 Java 入门才算真正完成。


关注公众号「IT探险家」,回复「Java入门」获取完整演示代码 + 速查手册。更多面试深度解析和源码分析,欢迎加入 知识星球IT探险家·进阶圈