Skip to content

第1章:你的第一个程序

本章只讲 Java。Python 和 C++ 等你学完前半卷再来比较。

你将学会
编译运行 Java 程序
前置知识
预计时间
25 分钟
需要准备
JDK 21+
完成标志
能独立写出 Helloworld

一个故事开头

想象你要跟一个只会说标点符号的外星人对话。

"帮我算 2+3。"

外星人盯着你,一动不动。

你比划了半天,外星人终于吐出一个回答:"😂🔥👽"

完全不是你要的东西。

你跟计算机说话就是这种感觉——你觉得自己说得很清楚了,但计算机理解的完全是另一回事。计算机要求指令像乐高说明书一样精确到每一步,"组装"这个词写错一个字母它就卡住不动了。

写程序这事说白了就是学习外星人的语言,然后把你的想法翻译给它听。


1. 先跑起来再说

装一个 JDK

JDK 是 Java Development Kit 的缩写——翻译过来就是"写 Java 程序的工具箱"。里面装了编译器、运行环境、还有一大箱工具。

https://jdk.java.net/ 下载你操作系统对应的版本。

选哪个版本? 看课程要求。没要求就 JDK 21 或 25 都行。JDK 21 是上一代 LTS(2023-09),JDK 25 是最新的(2025-09),对你学语法几乎没有区别。

装完之后打开终端(Windows 叫命令提示符或 PowerShell,Mac/Linux 叫终端),输入:

bash
java --version

如果看到类似这样的输出,说明装好了:

openjdk 21.0.2 2024-01-16 LTS
Java(TM) SE Runtime Environment

如果报"不是内部或外部命令",大概率是安装时没勾"添加到 PATH"。搜一下"JDK 环境变量配置",三步搞定。

写你的第一个程序

建一个文件夹 java-learn,在里面建一个文件 HelloWorld.java,把这五行敲进去:

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

现在打开终端,cdjava-learn 文件夹,执行:

bash
javac HelloWorld.java    
java HelloWorld

你应该看到屏幕上出现:

Hello, World!

恭喜。你跟外星人的第一次对话成功了。

💥 拆了它:现在来搞事情

"Hello, World!" 改成 "Hello, 奶茶!",重新编译运行。

看到 Hello, 奶茶! 了吗?好,现在只改内容不改别的——很简单。

现在来搞点破坏:

HelloWorld.java 改成这样:

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

编译。看到什么了?

HelloWorld.java:3: error: ';' expected

报错信息告诉你三件事:

  1. 在哪HelloWorld.java:3(第三行)
  2. 怎么了';' expected(少了分号)
  3. 精确位置^ 箭头指的地方

记下这个感觉——你第一次亲手让程序崩溃了。后面十多年你会干无数次这种事。

🧪 动手试试

改完以下每个改动后重新编译运行,观察结果:

  1. main 改成 mian
  2. String 改成 string(小写)
  3. System 改成 system
  4. 把类名改成 helloWorld(小写开头),但不改文件名

每个改动你都会得到一个报错。看报错信息能不能猜到原因。


2. 这五行走的是什么魔法

现在拆开那五行代码。不说术语轰炸,打三个比方。

第一层:public class HelloWorld

想象你买了一个文件柜。柜子外面贴着标签:"HelloWorld"。

java
public class HelloWorld {
    // 这个花括号里面的东西都属于这个柜子
}
  • class = "这是一个文件柜"(Java 里叫类,就是装代码的容器)
  • HelloWorld = 柜子的标签(名字)
  • public = 这个柜子放在大厅里,谁都能打开(目前当固定格式看)

Java 有个死规矩:文件名必须跟柜子标签一模一样HelloWorld.java 里面必须有一个 public class HelloWorld。差一个大写字母都不行。

第二层:public static void main(String[] args)

这行是所有 Java 程序的"正门"。Java 启动程序的时候,它会来找这扇门——如果找不到,它就进不去。

java
public static void main(String[] args) {
    // 进了这扇门之后,里面的代码开始执行
}

每个词拆开看(现在只需要大概知道,不用背):

什么意思
public门是对外开的(谁都能进来)
static门是嵌在墙上的(不用先建房子就能进门)
void进门之后不交作业(这个方法不返回值)
main这门叫 main — Java 启动时固定找这个名字
(String[] args)进门时可以带东西(先不管这个)

第一周,你就把它当成一个魔法咒语。你不需要理解为什么咒语是"阿瓦达索命"而不是"菠萝菠萝蜜"——先记住它长这样,后面自然就懂了。

📌 现在不需要理解static 是什么意思?void 是什么东西?String[] args 为什么一堆符号?全部不需要。第5章学方法时会自然解开。你现在只需要记住:Java 找 main 方法作为程序入口

第三层:System.out.println("Hello, World!")

这是真正干活的部分。它就是一个喇叭——把括号里的内容喊到屏幕上。

java
System.out.println("Hello, World!");

拆开看:

  • System — Java 标准库里自带的类(在 java.lang 包里),管的是系统层面的输入输出
  • out — System 类里的一个输出口,默认对着屏幕/终端
  • println — 喊一句话,然后换行(print line 的缩写)

⚠️ 提醒一下:把 System 叫成"你电脑的系统"只是用来帮你记住名字。实际上它是一个标准类。System.out 一般打在终端上,但程序在服务器上跑时输出也可能被重定向到日志文件。现在你只要知道它"能把字打到屏幕上"就够了。

java
System.out.println("你好");  // 喊"你好"然后换行
System.out.print("你好");    // 喊"你好"不换行
System.out.print("世界");    // 接上一行 → "你好世界"
System.out.println();        // 只换行

也可以喊数字:

java
System.out.println(42);        // 输出 42
System.out.println(3 + 4);     // 输出 7   Java 先算 3+4,再输出结果
System.out.println("3" + "4"); // 输出 34  引号里的 3 和 4 是文字,不是数字

每句话后面要加分号

java
System.out.println("Hello")  // ❌ 少分号,编译报错
System.out.println("World"); // ✅ 正确

分号等于中文的句号——告诉编译器"这句话说完了"。


3. 编译运行到底在干什么

看完上面的,你现在知道代码长什么样了。但 javacjava 这两个命令在背后干了什么?

bash
javac HelloWorld.java    # 步骤1:编译
java HelloWorld           # 步骤2:运行

打个比方:你要给一个外国朋友寄信。

步骤干什么对应编程
写中文信你写的内容HelloWorld.java
翻译成英文编译器把 Java 代码翻译成"字节码"javac HelloWorld.java → 生成 HelloWorld.class
朋友读英文信JVM(Java 虚拟机)执行字节码java HelloWorld

javac 就是翻译官(编译器),java 就是读信的人(运行环境)。

中间产物 .class 文件也叫字节码——它不是给 CPU 直接读的,是给 JVM 读的。这也是 Java 能"一次编写,到处运行"的原因:你给 Windows 编译的 .class 文件,拷到 Mac 上,用 Mac 的 JVM 一样能跑。


4. 常见的崩溃场景

💥 拆了它:新手四大天坑

下面这四个坑,每个 Java 初学者都踩过至少一次。与其等着踩,不如现在主动踩一遍。

坑1:类名跟文件名不一致

java
// 文件名:HelloWorld.java
public class HelloWorldd {  // 多了个 d

编译报错:class HelloWorldd is public, should be declared in a file named HelloWorldd.java

电脑说:"你文件名叫 HelloWorld.java,但里面那个柜子贴的标签是 HelloWorldd。我该信哪个?"

坑2:大小写弄反了

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

上面这段看起来对。改一个看看:

java
public static void Main(String[] args) {  // M 大写

Java 会告诉你:找不到 main 方法。因为 Java 启动时找的是全小写的 main,不是大写的 Main

坑3:运行时加了 .class

bash
java HelloWorld.class  # ❌ 不要加 .class
java HelloWorld        # ✅ 这样才对

java 命令自动知道要找 .class 文件。你加上了它反而找不到了。

坑4:路径不对

你在 /home/user/java-learn 下面编译了,但运行的时候在 /home/user 下面。

bash
cd /home/user/java-learn
javac HelloWorld.java   # ✅ 编译,HelloWorld.class 在 java-learn 里

cd ..
java HelloWorld         # ❌ 当前目录是 /home/user,找不到 HelloWorld.class

运行 java 的时候,它默认在当前目录找 .class 文件。


5. 写一个你自己的程序

打开一个新的文件 MyFirstProgram.java

java
public class MyFirstProgram {
    public static void main(String[] args) {
        System.out.println("你好,世界!");
        System.out.println("我是新手程序员。");
        System.out.println(8 + 7);
    }
}

编译运行:

bash
javac MyFirstProgram.java
java MyFirstProgram

输出:

你好,世界!
我是新手程序员。
15

🧪 动手试试

不改代码——改内容。把第三行的 8 + 7 换成别的运算:

java
System.out.println(10 - 3);
System.out.println(9 * 8);
System.out.println(15 / 3);
System.out.println(10 / 3);    // 猜猜这个会输出什么?

最后一个 10 / 3 输出的不是 3.33,而是 3。为什么?因为 103 都是整数,Java 的整数除法只保留整数部分。这点第3章会细讲,先留个悬念。


6. 我猜你会问

Q: 为什么 Java 这么啰嗦?Python 写 print("Hello") 一行就完了。 A: Java 的设计哲学是"明确说出来你每一步想干什么"——有点像签合同,条款多但不容易误会。Python 自由度大,但自由度大也意味着容易出奇怪的 bug。各有各的好处。

Q: // 开头的行是什么? A: 注释。写给人类看的,Java 会完全忽略。

java
// 这是单行注释——Java 看到 // 就跳过这一行
System.out.println("Hello"); // 注释也可以跟在代码后面

/*
  这是多行注释
  中间的内容全被忽略
*/

写注释是好习惯——你过两周再看自己写的代码,如果不加注释,你会觉得是三个月前的陌生人写的。

Q: javac 不认识怎么办? A: 说明你只装了 JRE(只有运行环境)没装 JDK(包含编译器)。去下载完整 JDK。


你现在学会的东西

写 Java 程序要经过三步:写代码(.java)→ 编译(javac)→ 运行(java)。

一个最小的 Java 程序长这样:

java
public class 类名 {
    public static void main(String[] args) {
        System.out.println("想说的话");
    }
}

确保这三样一致:

  1. 文件名 = 类名 + .java
  2. 类名第一个字母大写
  3. 每句话以 ; 结尾

遇到报错看三样:

  1. 行号 — 哪一行出问题
  2. 错误信息 — 什么问题
  3. 箭头位置 — 具体哪个字符


✅ 验收标准

完成本章后,你应该能:

  • [ ] 在电脑上装好 JDK,java --version 能正常输出版本号
  • [ ] 手写一个 HelloWorld.java,用 javac 编译、java 运行看到输出
  • [ ] 故意删掉分号,自己看懂报错信息里的行号提示和错误类型
  • [ ] 解释 main 方法是程序的入口
  • [ ] 知道 System.out.println 大概在干什么(把内容输出到终端)

📌 常见卡点

  • 文件名和类名大小写不一致——Java 大小写敏感,推荐都首字母大写
  • `javac` 不认识——只装了 JRE 没装 JDK,去下载完整 JDK
  • 漏掉分号——每句话结尾加分号,包括最后一句
  • 中文符号——编译器不认识中文标点,全部用半角符号

🔜 现在不需要理解

  • `public`、`static`、`void` 这几个关键字的具体含义——第5章会讲
  • `String[] args` 是什么意思——后面用到时自然解开
  • JVM 到底怎么执行字节码的——第一卷后半深入

🧪 练习

1. 改一改:把 HelloWorld 里的 "Hello, World!" 改成你的名字,重新编译运行。

2. 算一算:在 main 里写 System.out.println(15 + 27)System.out.println(100 - 33),看看输出。

3. 找错题:下面这段代码有什么问题?

java
public class Test {
    public static void main(String[] args) {
        System.out.println("Hello")
    }
}

下一篇

第2章 变量与类型

用 ❤️ 构建 | Software Systems Atlas