背景与动机
学习 Java 的第一步不是背语法,而是先搞清楚一段 .java 源码如何变成可执行程序。
Java 程序的基本链路是:
- 使用
javac把.java源文件编译成.class字节码。 - 使用
java命令启动 JVM。 - JVM 加载字节码并执行
main方法。
理解这条链路后,后面的类、包、访问修饰符、异常、集合等内容才不会变成孤立知识点。
核心原理拆解
1. JDK、JRE、JVM 分别是什么
这 3 个词经常一起出现,但职责不同:
JVM:Java 虚拟机,负责加载和执行字节码。JRE:Java 运行环境,包含 JVM 和运行 Java 程序所需的基础库。JDK:Java 开发工具包,包含 JRE、编译器javac、调试工具等开发工具。

学习和开发阶段通常安装 JDK,因为只安装运行环境不能编译源码。
2. .java 和 .class 的关系
.java 是人写的源码文件,.class 是编译后生成的字节码文件。
例如:
javac Hello.java执行后会生成:
Hello.class然后再运行:
java Hello注意这里运行的是类名 Hello,不是文件名 Hello.class。
3. main 方法是程序入口
Java 应用程序的常见入口写法是:
public static void main(String[] args) {}可以先这样理解:
public:JVM 可以从类外访问这个方法。static:不需要先创建对象就能调用。void:方法没有返回值。String[] args:接收命令行参数。
4. 类名和文件名通常要一致
如果一个 .java 文件里有 public class Hello,文件名必须是:
Hello.java否则编译器会报错。这是 Java 源文件组织的基础规则。
最小可运行代码示例
创建 Hello.java:
public class Hello { public static void main(String[] args) { System.out.println("hello, java"); }}编译并运行:
javac Hello.javajava Hello输出:
hello, java常见陷阱与错误示例
1. 运行时带上 .class
错误写法:
java Hello.class正确写法:
java Hellojava 命令接收的是类名,不是字节码文件名。
2. 文件名和 public 类名不一致
错误示例:
public class Hello {}如果文件名叫 Demo.java,会编译失败。应改成 Hello.java,或者把类名改成 Demo。
3. 只安装运行环境却想编译代码
如果终端能运行 java,但不能运行 javac,通常说明当前环境没有正确安装或配置 JDK。
面试高频问题
1. JDK、JRE、JVM 有什么区别
JVM 负责执行字节码,JRE 是运行 Java 程序的环境,JDK 是开发工具包,包含编译器和开发工具。开发阶段通常需要 JDK。
2. Java 为什么能跨平台
Java 源码先编译成平台无关的字节码,再由不同平台上的 JVM 执行。跨平台的关键是 JVM 屏蔽了操作系统差异。
3. java Hello 为什么不写 .class
因为 java 命令启动的是类加载过程,参数是类名。.class 是磁盘上的文件扩展名,不是 Java 类的运行入口名称。
一句话总结
Java 程序的最小闭环是:写 .java 源码,用 javac 编译成 .class 字节码,再用 java 启动 JVM 执行包含 main 方法的类。