Ubuntu上Java编译与运行调试全流程
一 环境准备与快速验证
sudo apt update && sudo apt install default-jdkjava -version、javac -versionnano ~/.bashrcexport JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
source ~/.bashrcjavac HelloWorld.java
java HelloWorld
以上步骤可确保编译与运行环境正常,为后续调试打好基础。
二 编译期问题定位
javac -cp .:/path/to/your/library.jar MyClass.java
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
int result = divide(10, 0); // 运行期会抛出 ArithmeticException
System.out.println("Result: " + result);
}
public static int divide(int a, int b) {
return a / b;
}
}
以上做法覆盖了最常见的编译期问题及修复路径。
三 运行期与命令行调试
javac -g HelloWorld.java(生成包含调试信息的 .class 文件,便于断点、变量查看)jdb HelloWorld
常用命令:
stop in HelloWorld.mainrunstepcontlistprint resultjps(确认 Java 进程与启动类)jstack <pid>(分析死锁、阻塞与线程状态)
以上流程覆盖命令行下的断点、单步、变量检查与线程分析,适合服务器或无图形界面环境。四 IDE与远程调试
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 HelloWorld
五 常见错误速查表
| 症状 | 可能原因 | 快速修复 |
|---|---|---|
Error: Could not find or load main class HelloWorld |
类路径不对或包声明不匹配 | 确认目录结构与包名一致;使用 java -cp . HelloWorld 或在正确包根下运行 |
HelloWorld is public, should be declared in a file named HelloWorld.java |
公共类名与文件名不一致 | 将文件重命名为与公共类同名 |
Exception in thread "main" java.lang.NullPointerException |
空指针解引用 | 在可能为 null 的对象上增加判空或日志 |
ArithmeticException: / by zero |
除数为 0 | 增加参数校验或异常捕获 |
javac: command not found |
未安装 JDK 或 PATH 未包含 $JAVA_HOME/bin |
安装 OpenJDK 并配置 JAVA_HOME 与 PATH |
| 依赖库找不到 | 未通过 -cp 指定依赖 | 使用 javac -cp .:lib/* YourClass.java 与 java -cp .:lib/* YourClass |
以上条目覆盖了最常见的编译与运行期问题及对应处理办法,可据此快速排查与修复。