首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 程式編譯運行圖解:javac、java、javap 命令全解析

     編輯:Java 程式設計入門

環境準備

  1. 安裝 JDK(非 JRE)
  2. 配置 JAVA_HOME 及 Path 包含 %JAVA_HOME%\bin
  3. 驗證:java -version、javac -version

目錄切換技巧

D:              # 切換到 D 槽
cd D:\workspace # 進入專案目錄
pushd D:\path   # 記錄並切換(popd 可返回)

核心命令詳解

1. javac - 編譯器

javac -d . Hello.java
參數作用
-d <dir>指定 .class 輸出目錄,自動建立包目錄結構
-sourcepath指定原始碼搜尋路徑
-cp / -classpath依賴類路徑
-encoding UTF-8原始碼編碼(防中文亂碼)

關鍵差異:

  • javac Hello.java → 當前目錄產生 Hello.class,無包目錄
  • javac -d . Hello.java → 依 package com.xxx; 在當前目錄建立 com/xxx/Hello.class

2. java - 運行器

java -cp . com.xxx.Hello
  • 需使用全限定類名(包名.類名)
  • -cp . 將當前目錄加入類路徑,使 JVM 能找到 com/xxx/Hello.class
  • 錯誤 Could not find or load main class 通常是類路徑或包結構錯誤

3. javap - 反編譯/位元碼檢視

javap -c -v com.xxx.Hello

完整實戰演示

// 檔案:E:\test\JavacTest.java
package com.stopTalking.test;
public class JavacTest {
    public static void main(String[] args) {
        byte a = 5; short b = 6;
        System.out.println("JavacTest [a=" + a + ", b=" + b + "]");
    }
}
  1. 編譯:javac -d . JavacTest.java → 產生 ./com/stopTalking/test/JavacTest.class
  2. 運行:java com.stopTalking.test.JavacTest → 正常輸出
  3. 反編譯:javap -c com/stopTalking/test/JavacTest → 顯示 bipush 5, bipush 6, invokevirtual println 等位元碼

常見錯誤與對策

選項說明
-c輸出方法位元碼指令
-v / -verbose輸出常量池、行號表、LocalVariableTable 等詳細資訊
-p / -private顯示所有成員(預設只顯 public/protected)

進階:JDK 11+ 單檔案源碼直接運行

java Hello.java  # 無需預先 javac,支援多類別同檔
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤原因解決
找不到主類未用全限定名、或 -cp 錯誤確認 .class 位置、用 java -cp . pkg.Main
編碼亂碼源檔非 UTF-8javac -encoding UTF-8
缺少依賴類未加入 -cpjavac -cp lib/*:. *.java