钩子
环境配好了,今天写第一个程序。但在你敲下第一行代码之前,先想一个问题:
你写的是 Hello.java,可 CPU 从头到尾没见过这个文件。
CPU 只认机器指令,而 Java 的设计者在这中间加了两道工序。搞懂这两道工序,你以后 80% 的"程序跑不起来"都能自己解决。
01 第一个程序,五行代码
新建一个文本文件,改名(注意连扩展名一起改)为 Hello.java,写入:
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
先别管每个词什么意思(第 5 篇专门拆),今天只关注它怎么跑起来。
02 两步走:先编译,再运行
打开 CMD,cd 到 Hello.java 所在目录,敲两条命令:
javac Hello.java
java Hello
第一条是编译:javac 检查你的代码有没有写错,没错就生成一个新文件 Hello.class。看一眼你的文件夹——多出来的这个文件,就是传说中的字节码。
第二条是运行:java 命令启动 JVM,把字节码翻译成当前系统的机器指令交给 CPU。屏幕上打出 Hello, Java!。

注意一个细节:第二条命令是 java Hello,不是 java Hello.class。 带了后缀反而报错——这是新手高频坑,第 6 篇会专门盘点。
03 全链路:从你的手到 CPU

串起来就是:你写源码 → javac 编译成字节码 → JVM 翻译成机器指令 → CPU 执行 → 屏幕输出。
为什么中间要隔一道字节码?还记得第 1 篇吗——同一个 Hello.class,拷到 Linux、Mac 上照样跑,因为每台机器装的 JVM 不一样,但对外接口一样。字节码是 JVM 的"普通话",JVM 负责翻译成各地方言(机器指令)。
这就是"一次编译,到处运行"的全部真相。Python 那种写完直接跑的叫解释型,Java 这种先编译再靠 JVM 跑的叫编译+解释混合——没有谁绝对更好,只是取舍不同。
04 三个高频报错,先混个脸熟
错误 1:类名和文件名不一致
错误: 类 Hello 是公共的, 应在名为 Hello.java 的文件中声明
文件存成了 hello.java 或 Test.java,只要类名是 public class Hello,文件必须叫 Hello.java——大小写也得一致。
错误 2:找不到或无法加载主类
错误: 找不到或无法加载主类 Hello
两种可能:命令带了 .class 后缀;或者当前目录不对(你人在 C 盘,文件在桌面)。
错误 3:找不到符号
错误: 找不到符号
符号: 变量 system
system 和 System 是两个东西。Java 严格区分大小写,string 和 String 也一样。
这三个错今天混个脸熟就行,第 6 篇会把 10 个新手报错连人话翻译一起盘点。
橙码酱,分享更有用的技术知识,助你成为更优秀的开发者。