必须掌握javac编译、java运行、jdb调试、jar打包四步指令链:1. javac编译.java为.class,注意类名与文件名一致、编码指定及输出目录预建;2. java运行时勿加.class后缀;3. jdb支持启动调试、断点控制和进程附加;4. jar打包需正确配置manifest.mf并用-cvfm或-c参数。

要在命令行里把 Java 代码从 .java 文件变成可执行程序,必须掌握 javac 编译、java 运行、jdb 调试、jar 打包这一整套指令链,漏掉任一环节都跑不起来。
编译 Java 源文件:生成 .class 字节码
第一步:确保你当前终端所在目录下有 Hello.java 文件,内容为 public class Hello { public static void main(String[] args) { System.out.println("OK"); } }。
第二步:执行 【javac Hello.java】,成功后生成同名的 Hello.class 文件。注意:public 类名必须与文件名完全一致,否则报错。
第三步:若源码含中文字符且保存为 UTF-8 编码(推荐),必须显式指定编码,否则 Windows 下默认用 GBK 解码会爆“不可映射字符”错误:【javac -encoding UTF-8 Hello.java】。
第四步:想把 .class 输出到单独目录(如 classes/),先手动创建该目录,再运行 javac -d classes Hello.java —— 不提前建目录会直接报错,且不会自动创建父路径。
运行已编译的字节码
在 Hello.class 所在目录下,直接执行 java Hello 即可运行。记住:【不要加 .class 后缀】,写成 java Hello.class 会提示“找不到或无法加载主类”。
如果类在包中(比如 package com.example;),则必须在包根目录(即 com 目录的上一级)执行 java com.example.Hello,且 Hello.class 必须位于 com/example/ 目录结构内。
调试 Java 程序:用 jdb 逐行跟踪
方法一:基础启动调试
执行 jdb Hello 启动调试器,此时未运行;输入 run 命令才真正开始执行,遇到异常会停在出错行。
方法二:断点控制
启动后先输入 stop in Hello.main 设置断点,再 run,程序会在 main 方法首行暂停;接着用 step 单步进入,next 单步跳过,print 变量名查看值。
方法三:附加到正在运行的进程
先用 jps 查看 Java 进程 PID,再执行 jdb -attach PID,适用于调试已启动但卡死的服务。
打包成可分发的 JAR 文件
第一步:准备 MANIFEST.MF 清单文件,至少包含 Main-Class: Hello(末尾空一行),保存在 META-INF/ 目录下。
第二步:确保所有 .class 文件(含依赖类)都在当前目录或子目录中,执行 jar cvfm hello.jar META-INF/MANIFEST.MF Hello.class。
第三步:验证是否可执行,运行 java -jar hello.jar —— 若报错“no main manifest attribute”,说明 MANIFEST.MF 格式不对或未正确嵌入。
第四步:打包整个项目目录(含多级包结构),用 jar cvf app.jar -C classes/ . ,其中 classes/ 是编译输出根目录,-C 表示切换到该目录再归档,否则包内路径会多一层冗余。











