跳到内容

元数据卡

  • 前置知识:见过 Hello World 代码结构(ch01-code-explained.md
  • 预计时间:15 分钟
  • 完成标志:能说出 Java 四个核心语法规则

代码能跑不能跑,关键看语法。就像自然语言有语法规则("我吃饭"对,"饭吃我"错),编程语言也有自己的规矩。

老陈师傅把一张发黄的羊皮纸铺在桌上——上面写着变量村法典的四条铁律。


规则一:花括号必须配对

java
public class HelloWorld {  // ← 房顶
    public static void main(String[] args) {  // ← 门框
        System.out.println("Hello World!");
    }  // ← 门框关闭
}  // ← 房顶关闭

每个 { 必须有一个对应的 }

老陈拿了两根木棍放在桌上:"一根搭上去,一根收回来。只搭不收,房子塌了。"

java
// 错误——花括号没配对
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    // 少了一个 } —— class 的领地没关!

编译器会报这样的错误:

HelloWorld.java:5: error: reached end of file while parsing
}
 ^

原则: 花括号就像俄罗斯套娃——最晚打开的,最早关闭

技巧: 每次打 { 后立刻打 },再移光标到中间写代码。


规则二:每条语句以分号结尾

"分号是 Java 的句号。" —— 老陈师傅

Java 里绝大部分"做事"的句子叫"语句"(statement),每条语句末尾都要有一个英文分号 ;

java
System.out.println("Hello World!");  // ← 分号结束

没有分号,编译器就不知道这句话说完了,它会一直等,然后不耐烦地报错:

HelloWorld.java:3: error: ';' expected
 System.out.println("Hello World!")
                                    ^

但要注意:有些地方不需要分号。花括号后面通常不加分号,类头部、方法头部也没有分号。判断标准很简单——只有在"执行动作"的句子末尾加分号。

⚠️ 中文分号是隐藏炸弹。 英文分号 ; 和中文分号 长得几乎一样,但编译器只认英文的。写代码时确保输入法在英文模式。

bash
# 中文分号导致的错误
javac HelloWorld.java
# error: illegal character: ';'

规则三:Java 区分大小写

"System 不是 systemmain 不是 MainString 不是 string。"

Java 对大小写非常敏感。HelloWorldhelloworld 在 Java 看来是两个完全不同的名字。

java
// 错误——大小写写错
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");  // 正确
    }
}

常见死法:system 报错找不到符号,Main 编译通过但运行找不到方法,String[] Args 不规范但能跑。

怎么避免? 代码编辑器会在代码里把 Java 关键词高亮——颜色不对就说明拼错了。class 会显示为蓝色或紫色,String 会显示为另一种颜色。利用这个视觉提示。


规则四:文件名必须等于 public 类名

这是 Java 区别于很多语言的一个硬性规定。

java
// HelloWorld.java 文件里
public class HelloWorld {  // ← 必须匹配文件名
    ...
}

规则只有一条:如果一个类被声明为 public,它必须放在一个同名的 .java 文件中,大小写完全一致。

bash
# 错误示范
# 文件名:hello.java(小写 h)
# 类名:HelloWorld(大写 H)

javac hello.java

编译器会直接拒绝:

hello.java:1: error: class HelloWorld is public,
 should be declared in a file named HelloWorld.java
public class HelloWorld {
                    ^

那如果去掉 public 呢? class HelloWorld(没有 public)是默认可见性,编译器就不再检查文件名了。但——别这么干。永远让文件名等于主类的类名,大小写也必须一致。这是一个不需要思考的约定,违反它只会给自己找麻烦。


四条规则一句话总结

花括号要成对 ✅  分号不能漏 ✅  大小写要看准 ✅  文件名字要对 ✅
mermaid
graph TD
    A[写一段 Java 代码] --> B{花括号成对?}
    B -->|否| C[编译错误:预期花括号]
    B -->|是| D{末尾有分号?}
    D -->|否| E[编译错误:';' expected]
    D -->|是| F{大小写正确?}
    F -->|否| G[编译错误或运行时找不到类]
    F -->|是| H{文件名=类名?}
    H -->|否| I[编译错误:文件名不匹配]
    H -->|是| J[✅ 编译通过,准备运行!]


验收标准

  • [ ] 你能说出 Java 的四个核心语法规则
  • [ ] 你能解释为什么花括号必须成对出现
  • [ ] 你知道英文分号和中文分号的区别
  • [ ] 你知道 Systemsystem 在 Java 里是不是一回事
  • [ ] 你知道文件名必须和什么匹配

下一步

规则都知道了,但错误还是会发生——漏了一条分号、拼错了类名、文件名没对齐。这些错误长什么样?怎么快速解决?

下一步:ch01-pitfalls.md —— 常见编译和运行错误全解析。

Built with VitePress | Software Systems Atlas