Java常见编译错误包括:分号缺失和大括号不配对导致报错;字符串误用==比较引发逻辑错误;局部变量未初始化即使用;泛型擦除致运行时类型丢失。实操建议均强调利用IDE实时检查、规范编码习惯与优先编译验证。
Java 要求每条语句以分号 ; 结尾,类、方法、条件块必须用成对的大括号 {} 包裹。漏掉任一位置,javac 会直接报错,比如 error: ';' expected 或 error: illegal start of expression。
实操建议:
{ 就立刻敲回车 + 缩进 + 下一行写 },再补内容——避免写完逻辑才发现少闭合Ctrl+Alt+L(IntelliJ)或 Shift+Alt+F(VS Code)自动格式化,大括号错位会一目了然== 和 .equals() 混用引发逻辑错误对字符串或其他引用类型用 == 比较,实际比的是内存地址,不是内容。哪怕两个字符串字面值完全一样,== 也可能返回 false;而 null 调用 .equals() 会抛 NullPointerException。
实操建议:
"abc".equals(str),把字面量放左边,可避免 null 崩溃Objects.equals(a, b)(需 import java.util.Objects),它内部已处理 null
int、boolean 等)或确认是同一对象引用时,才用 ==
局部变量(方法内声明的)不会自动初始化,不赋值就直接读取,编译器会报 error: variable xxx might not have been initialized。这和成员变量不同——后者有默认值(0、false、null)。
实操建议:
String name = ""; 或 int count = 0;

if 块里赋值,else 忘了Java 泛型是编译期特性,运行时 List 和 List 都变成原始类型 List。所以不能用 instanceof 判断泛型参数,也不能在运行时 new 一个带泛型的数组(如 new ArrayList 会报错)。
实操建议:
if (list instanceof List) ,这语法都不合法List>
或 ArrayList[] 配合 @SuppressWarnings("unchecked")(仅当确认安全时)TypeReference(Jackson)或 ParameterizedType 手动提取,而不是指望泛型自己保留javac 多说几句话。