1.3 Java 的基本语法规则
前置知识:逐行理解 Java 代码
预计时间:15 分钟
完成标志:能根据编译器位置修复括号、分号、大小写和文件名问题
规则一:分隔符必须配对
Hello World 中可以看到这些分隔符:
public class HelloWorld { // { 与 }
public static void main(String[] args) { // ( 与 )、[ 与 ]
System.out.println("Hello World!"); // ( 与 )、" 与 "
}
}{}包围类体、方法体和其他代码块;()包围参数列表或调用参数;[]是数组类型或数组访问的一部分;- 成对双引号包围字符串字面量。
结构嵌套时,最后打开的分隔符先关闭。漏掉右花括号时,编译器可能直到文件末尾才确认结构不完整,所以箭头位置不一定就是你最初漏写的位置。
一个实用习惯:输入左括号后立即补右括号,再回到中间填写内容。编辑器的格式化功能也能暴露异常缩进,但最终仍以编译结果为准。
规则二:需要分号的语句才加分号
变量声明、赋值、方法调用和 return 等语句通常以英文分号结束:
int count = 1;
count = count + 1;
System.out.println(count);
return;类声明、方法声明以及后接代码块的 if、for、while 通常不在右花括号后添加分号:
if (count > 0) {
System.out.println("positive");
}所以“每一行都加分号”不是规则。Java 也允许一条语句跨多行,或多条短语句写在同一行;是否换行主要影响可读性,语法结束由记号决定。
中文分号 ; 与英文分号 ; 是不同字符。源代码中误用全角标点时,编译器通常会报告非法字符或语法错误。
规则三:标识符区分大小写
以下名字彼此不同:
System system
String string
main Main
HelloWorld Helloworldclass、public、static 是关键字;System、String、main 和 println 不是关键字,它们分别是类名、方法名或成员名。编辑器配色由主题和语义分析决定,不能把“颜色不对”当作可靠诊断。优先阅读 javac 的错误类型、行号和插入符号位置。
常见命名约定:
- 类名用大驼峰:
HelloWorld、BankAccount; - 方法和变量用小驼峰:
main、accountName; - 常量通常用大写下划线:
MAX_RETRY_COUNT。
约定不全是编译器强制规则,却能降低阅读成本。
规则四:公开顶层类型与文件名对应
// 文件:HelloWorld.java
public class HelloWorld {
}如果把它保存在 hello.java,编译器会报告公开类应位于 HelloWorld.java。
去掉 public 后,HelloWorld 变成包私有顶层类,不是“仍然公开”。此时 Java 允许文件名不同,但没有充分理由时不要利用这个例外。初学项目采用一文件一个主要类,并让文件名与类名一致。
规则五:空白通常分隔记号,字符串中的空白属于数据
下面两段代码语义相同,但第二段很难读:
int total = 1 + 2;int total=1+2;而字符串里的空格会进入输出:
System.out.println("Hello World");
System.out.println("HelloWorld");这两行结果不同。不要为了“整齐”随意修改字符串内容。
最小检查顺序
1. 文件名与公开类名是否一致
2. 括号和引号是否成对、嵌套是否正确
3. 需要分号的语句是否使用英文分号
4. 类名、方法名和变量名的大小写是否一致
5. 从第一条编译错误开始修,再重新编译后面的错误可能由第一处语法破坏连锁产生。一次只处理最早的一个,往往能同时消掉多条诊断。
离开这一页前
能说清“每行都要分号”为何不准确,知道 System 和 String 不是关键字,并能解释漏括号时错误箭头为什么可能落在后面。真正排错时从第一条诊断开始,每次只修一个明确原因。
现在去看这些错误实际长什么样。