1.3 第一个Java程序
用记事本写 5 行代码 → javac 编译成字节码 → java 运行,屏幕打出 Hello World!。三步走完,你就完成了程序员界的成人礼,而且每一步都能对上前面学过的理论。
① Windows 默认不显示文件扩展名,保存出来的是 HelloWorld.java.txt;② 记事本的编码和 javac 默认编码不一致,中文注释导致编译报错。两个坑的解法都在正文里,先看完再动手。
1. 先看代码长什么样(解剖)
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
只有 5 行,每个部位都有讲究:
| 部位 | 作用 | 大白话 |
|---|---|---|
public class HelloWorld |
类:Java 代码必须住在类这个"大房子"里 | 全部代码的家门口挂牌 |
main 方法 |
程序唯一入口 | CPU 的书签(06 篇)从这里开始取指 |
System.out.println(...) |
输出语句 | 往屏幕打印一行字,然后换行 |
{ } |
花括号 | 房间的门,必须成对出现 |
每句话结尾的 ; |
分号 | 一句话说完的句号,必须是英文的 |
第 2 行 public static void main(String[] args) 这串咒语,前三章你只需要会抄、会认——它每个词的含义(public/static/void/String[])要等第三章"方法"和第五章"面向对象"才能全懂。程序员都是先抄后懂的。
- 文件名必须和 public 类名一模一样(含大小写):类叫
HelloWorld,文件就必须叫HelloWorld.java - Java 严格区分大小写:
System写成system、String写成string,立刻报错——这不是找茬,是编译器靠大小写区分身份
2. 动手第 0 步:让 Windows 显示文件扩展名
为什么是第 0 步:不干这个,你的文件会叫 HelloWorld.java.txt,编译器一看不是 .java 直接不认,而你在文件夹里根本看不出区别(都显示成 HelloWorld.java)。
- 打开文件资源管理器(Win + E)
- 点顶部菜单「查看」→「显示」→ 勾选「文件扩展名」(Win11);Win10 是:查看 → 勾选右侧「文件扩展名」
- 成功标志:随便找个文件,能看到
名字.后缀了(比如照片.jpg带后缀)
3. 第一步:写代码(保姆式)
- 打开文件资源管理器,进 I 盘,新建文件夹
JavaCode,进去再建day01(最终路径:I:\JavaCode\day01) - 在
day01空白处右键 → 新建 → 文本文档 - 双击打开(默认用记事本),原样抄第 1 节那 5 行——建议手抄,别复制:空格、大小写、标点的肌肉记忆从今天开始攒
- 抄完点「文件 → 保存」,弹出保存对话框:
- 保存位置:定位到
I:\JavaCode\day01 - 文件名输入:
"HelloWorld.java"—— 前后双引号也要输入!这是防记事本自作主张加.txt的老办法 - 保存类型:选「所有文件(.)」
- 编码:选「UTF-8」(Win11 记事本默认就是 UTF-8,不用动)
- 点保存 → 回文件夹看一眼:文件名必须是
HelloWorld.java,图标不是记事本样式(是 Java 图标或白纸)才算对
4. 第二步:编译(菜谱 → 字节码)
- Win + R → 输入
cmd→ 回车,开黑窗口 - 切换到代码文件夹。输入(
/d是跨盘符必需的):cd /d I:\JavaCode\day01 - 编译,输入:
javac HelloWorld.java - 看到什么算成功:什么都不显示,光标跳到下一行——Java 编译器的哲学是"没消息就是好消息"。再输入
dir回车,文件夹里多了一个HelloWorld.class→ 这就是 1.1 篇说的字节码,你亲手造出来的第一份。
如果你在代码里写了中文(比如注释),javac 报 编码GBK的不可映射字符——这是 Windows 版 javac 默认按 GBK 解码、而你存的是 UTF-8 导致的。解法:改用 javac -encoding UTF-8 HelloWorld.java。
5. 第三步:运行(JVM 上场)
继续在同一个黑窗口,输入:
java HelloWorld
注意:不带 .class 后缀! 你递给 JVM 的是"类名"(找哪间房子),不是文件名。JVM 找到 HelloWorld.class,现场翻译成机器码,CPU 从 main 开始执行——屏幕打出:
Hello World!
这行字 = 你的代码 → javac → 字节码 → JVM → CPU → 屏幕,整条链路(1.1 + 06 + 07 篇)全被你亲手跑通了一遍。
JDK 11 之后支持直接 java HelloWorld.java——编译运行一口气。但前几次请老老实实分两步:看得见 .class 文件,跨平台原理才不是纸上谈兵。等 1.4 装了 IDEA,按钮一按两步自动完成。
6. 排错专区:五种最常见的死法
情况 A:错误: 类 HelloWorld 是公共的, 应在名为 HelloWorld.java 的文件中声明
类名和文件名没对上。检查文件名是不是 HelloWorld.java(大小写也要对),代码里是不是 public class HelloWorld。
情况 B:错误: 编码GBK的不可映射字符
编码不一致(见第 4 步的 tip)。以后凡编译带中文的源码,固定用 javac -encoding UTF-8 文件名。
情况 C:错误: 需要';' 或一堆红叉
九成是中文标点:分号、引号、括号必须是英文的 ; " ",中文的 ;""() 全部不认。以及大小写:System、String 首字母大写,main、println 全小写。
情况 D:错误: 找不到文件: HelloWorld.java
cmd 不在代码文件夹里。重新 cd /d I:\JavaCode\day01,或先 dir 看当前目录里有没有这个文件——八成是文件存到别处了,或后缀还是 .txt(回第 2 步检查)。
情况 E:'javac' 不是内部或外部命令
环境变量问题,回 1.2 排错专区情况 A。注意:改完环境变量必须重开 cmd。
改了 .java 不重新 javac,运行的还是旧字节码——"我明明改了为什么没生效"是新手周经问题。记住:源码和字节码是两个文件,改前者要重造后者。
7. 常见误区
不行。java 命令后面跟的是类名,JVM 自己会去找 HelloWorld.class 文件。带后缀反而报错。
他只需要装 JRE/JVM 就能运行(不需要 javac 编译器)——这就是 1.1 篇"一次编译、到处运行"的落地:你发字节码,各平台的 JVM 负责翻译。
缩进(每行前面的空格)只是给人看的,编译器不在乎。但单词中间不能断开(Hello World 不能写成 HelloWorld 的两半)。按教程的缩进抄,是为了养成好看的习惯。
public 类名 = 文件名,这条没有商量余地。另外行业惯例:类名用大驼峰(每个单词首字母大写,如 HelloWorld、MyFirstApp)。
这 5 行的意义不在"会写",在于看懂整条链路:菜谱(源码)→ 翻译(javac)→ 中间语(字节码)→ 随身翻译官(JVM)→ 执行(CPU)。自测题 Q3、Q4 考的就是这条链。
8. 本节自测
HelloWorld.class——字节码文件,javac 编译器造的。它不是任何系统的机器码,是给 JVM 看的"中间语"(1.1 篇)。
java 命令的参数是类名,JVM 根据类名自己去定位并加载 .class 文件。带后缀它会去找一个叫"HelloWorld.class"的类,找不到,报错。
main 方法第一句——它是程序唯一入口,对应 06 篇的机制:JVM 加载类后,把程序计数器(书签)指向 main 的第一条指令。
能。字节码跨平台通用,Mac 的 JVM 负责翻译成 Mac 的机器码。但 .exe(Windows 机器码)不行——这正是 Java 和 C 程序发布方式的根本区别。
忘了重新 javac,跑的还是旧字节码。源码 → 字节码是两个独立文件,改前者必须重造后者。
9. 下一步学什么
- ☐ 1.4 Java程序的运行机制 —— JVM 拿到字节码之后干了什么(类加载、JIT、GC)
- ☐ 1.5 开发工具 IDEA 安装 —— 告别记事本和黑窗口:代码补全、一键运行、报错即时报,程序员真正的日常工具
- ☐ 第二章 变量与数据类型 —— 让程序不光会喊 Hello,还会算账
10. 相关笔记
- 1.2 Java环境搭建 ← 上一篇:javac/java 命令为什么能敲
- 计算机基础 05 编程是什么 ← 源码到机器码的完整翻译链
- 计算机基础 06 CPU ← main 入口与程序计数器
- ☕ Java基础 · 索引
- 🏠 返回主页