Skip to content

运行常见错误

写完代码运行报错,最常遇到的是「找不到类」「main 方法不存在」「版本不支持」。理解这些错误的含义,才能快速定位和解决问题。

编译时错误

找不到符号

Test.java:3: 错误: 找不到符号
  System.out.printlnln("Hello");
  符号:   方法 printlnln(String)

原因:拼写错误,方法不存在。检查方法名是否正确。

类型不兼容

Test.java:3: 错误: 不兼容的类型: 从 String 转换到 int 可能会有损失
int num = "123";

原因:类型不匹配。使用正确的类型转换:int num = Integer.parseInt("123");

缺少分号

Test.java:5: 错误: 需要 ';'
System.out.println("Hello")

解决:在语句末尾添加分号。

运行时错误

找不到主类

Error: Could not find or load main class HelloWorld

排查步骤:

bash
# 1. 确认类文件存在
ls HelloWorld.class

# 2. 确认类名正确(不含 .class 后缀)
java HelloWorld  # ✅
java HelloWorld.class  # ❌

# 3. 使用类路径
java -cp . HelloWorld

常见原因:类名拼写错误、使用了 -cp 但路径不对、包结构与运行目录不匹配。

main 方法找不到

Error: Main method not found in class HelloWorld, please define the main method as:
public static void main(String[] args)

解决:检查 main 方法签名。

java
// ✅ 正确签名
public static void main(String[] args) { }

// ❌ 常见错误
public void main(String[] args) { }           // 缺少 static
public static void main(String arg) { }        // 参数类型错误
public static main(String[] args) { }          // 缺少 void

版本不支持

Error: UnsupportedClassFileVersion 52.0

原因:编译版本高于运行版本。ClassFileVersion 52 = JDK 8,55 = JDK 11,61 = JDK 17。

解决:确保运行环境的 JDK 版本 >= 编译版本的 JDK。

类路径问题

Exception in thread "main" java.lang.NoClassDefFoundError: com/example/Util

排查步骤:

bash
# 查看编译输出的目录结构
ls out/com/example/

# 使用正确的类路径运行
java -cp out com.example.Main

# 检查依赖是否在类路径中
java -cp "out:lib/*" com.example.Main

常见错误速查

错误信息原因解决
找不到符号拼写错误检查方法名/变量名
需要 ';'缺少分号添加分号
不兼容的类型类型不匹配正确转换
Could not find or load main class类路径问题使用 -cp 指定正确路径
Main method not foundmain 方法缺失或签名错误检查方法签名
UnsupportedClassFileVersionJDK 版本不兼容确保运行版本 >= 编译版本
NoClassDefFoundError类依赖缺失添加依赖到类路径

调试技巧

bash
# 打印类加载信息,查看类从哪里加载
java -verbose:class HelloWorld

# 检查 JAVA_HOME
echo $JAVA_HOME

# 检查 java 和 javac 路径
which java
which javac

# 清理并重新编译
rm *.class && javac *.java

Windows 和 Linux 报错不一样?检查类路径分隔符——Windows 用 ;,Linux/macOS 用 :

后续可阅读:Java 程序运行机制JVM/JRE/JDK 区别Java 垃圾回收简介

基于 VitePress 构建