java javac javap

java

help

java -help

用法: java [-options] class [args...]
           (執(zhí)行類)
   或  java [-options] -jar jarfile [args...]
           (執(zhí)行 jar 文件)
其中選項包括:
    -d32          使用 32 位數(shù)據(jù)模型 (如果可用)
    -d64          使用 64 位數(shù)據(jù)模型 (如果可用)
    -server       選擇 "server" VM
                  默認(rèn) VM 是 server.

    -cp <目錄和 zip/jar 文件的類搜索路徑>
    -classpath <目錄和 zip/jar 文件的類搜索路徑>
                  用 ; 分隔的目錄, JAR 檔案
                  和 ZIP 檔案列表, 用于搜索類文件丙唧。
    -D<名稱>=<值>
                  設(shè)置系統(tǒng)屬性
    -verbose:[class|gc|jni]
                  啟用詳細(xì)輸出
    -version      輸出產(chǎn)品版本并退出
    -version:<值>
                  警告: 此功能已過時, 將在
                  未來發(fā)行版中刪除宇挫。
                  需要指定的版本才能運(yùn)行
    -showversion  輸出產(chǎn)品版本并繼續(xù)
    -jre-restrict-search | -no-jre-restrict-search
                  警告: 此功能已過時, 將在
                  未來發(fā)行版中刪除哩簿。
                  在版本搜索中包括/排除用戶專用 JRE
    -? -help      輸出此幫助消息
    -X            輸出非標(biāo)準(zhǔn)選項的幫助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度啟用斷言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具有指定粒度的斷言
    -esa | -enablesystemassertions
                  啟用系統(tǒng)斷言
    -dsa | -disablesystemassertions
                  禁用系統(tǒng)斷言
    -agentlib:<libname>[=<選項>]
                  加載本機(jī)代理庫 <libname>, 例如 -agentlib:hprof
                  另請參閱 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<選項>]
                  按完整路徑名加載本機(jī)代理庫
    -javaagent:<jarpath>[=<選項>]
                  加載 Java 編程語言代理, 請參閱 java.lang.instrument
    -splash:<imagepath>
                  使用指定的圖像顯示啟動屏幕
有關(guān)詳細(xì)信息, 請參閱 http://www.oracle.com/technetwork/java/javase/documentation/index.html昭卓。

example

-version

java -version

java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

run main method

java IntegerTest

當(dāng)我們使用java命令運(yùn)行一個.class文件愿险,需要使用該類的全限定類名和在當(dāng)前路徑下有該類的包層次目錄旺拉。這就要求編譯時使用javac -d 參數(shù)。否則需要自己來建立包層次目錄撑蒜。

javac -encoding UTF-8  -d . IntegerTest.java
java com/james/example/IntegerTest

javac

javac是用來編譯.java文件為.class文件的指令

help

javac -help

用法: javac <options> <source files>
其中, 可能的選項包括:
  -g                         生成所有調(diào)試信息
  -g:none                    不生成任何調(diào)試信息
  -g:{lines,vars,source}     只生成某些調(diào)試信息
  -nowarn                    不生成任何警告
  -verbose                   輸出有關(guān)編譯器正在執(zhí)行的操作的消息
  -deprecation               輸出使用已過時的 API 的源位置
  -classpath <路徑>            指定查找用戶類文件和注釋處理程序的位置
  -cp <路徑>                   指定查找用戶類文件和注釋處理程序的位置
  -sourcepath <路徑>           指定查找輸入源文件的位置
  -bootclasspath <路徑>        覆蓋引導(dǎo)類文件的位置
  -extdirs <目錄>              覆蓋所安裝擴(kuò)展的位置
  -endorseddirs <目錄>         覆蓋簽名的標(biāo)準(zhǔn)路徑的位置
  -proc:{none,only}          控制是否執(zhí)行注釋處理和/或編譯歹啼。
  -processor <class1>[,<class2>,<class3>...] 要運(yùn)行的注釋處理程序的名稱; 繞過默認(rèn)的搜索進(jìn)程
  -processorpath <路徑>        指定查找注釋處理程序的位置
  -parameters                生成元數(shù)據(jù)以用于方法參數(shù)的反射
  -d <目錄>                    指定放置生成的類文件的位置
  -s <目錄>                    指定放置生成的源文件的位置
  -h <目錄>                    指定放置生成的本機(jī)標(biāo)頭文件的位置
  -implicit:{none,class}     指定是否為隱式引用文件生成類文件
  -encoding <編碼>             指定源文件使用的字符編碼
  -source <發(fā)行版>              提供與指定發(fā)行版的源兼容性
  -target <發(fā)行版>              生成特定 VM 版本的類文件
  -profile <配置文件>            請確保使用的 API 在指定的配置文件中可用
  -version                   版本信息
  -help                      輸出標(biāo)準(zhǔn)選項的提要
  -A關(guān)鍵字[=值]                  傳遞給注釋處理程序的選項
  -X                         輸出非標(biāo)準(zhǔn)選項的提要
  -J<標(biāo)記>                     直接將 <標(biāo)記> 傳遞給運(yùn)行時系統(tǒng)
  -Werror                    出現(xiàn)警告時終止編譯
  @<文件名>                     從文件讀取選項和文件名

example

-encoding

javac -encjavaoding UTF-8 -d . IntegerTest.java

java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

java com/james/example/IntegerTest

javap

javap是JDK自帶的反匯編器,查看java編譯器為我們生成的字節(jié)碼减江。 -c 對代碼進(jìn)行反匯編

help

javap -help

用法: javap <options> <classes>
其中, 可能的選項包括:
  -help  --help  -?        輸出此用法消息
  -version                 版本信息
  -v  -verbose             輸出附加信息
  -l                       輸出行號和本地變量表
  -public                  僅顯示公共類和成員
  -protected               顯示受保護(hù)的/公共類和成員
  -package                 顯示程序包/受保護(hù)的/公共類
                           和成員 (默認(rèn))
  -p  -private             顯示所有類和成員
  -c                       對代碼進(jìn)行反匯編
  -s                       輸出內(nèi)部類型簽名
  -sysinfo                 顯示正在處理的類的
                           系統(tǒng)信息 (路徑, 大小, 日期, MD5 散列)
  -constants               顯示最終常量
  -classpath <path>        指定查找用戶類文件的位置
  -cp <path>               指定查找用戶類文件的位置
  -bootclasspath <path>    覆蓋引導(dǎo)類文件的位置

example

public class MyIntegerTest {
    public static void main(String[] args) {
        int result = test();
        System.out.println(result);
    }
    public static int test() {
        int a = 1;
        int b = 2;
        return a + b;
    }
}

-p

javac -encoding UTF-8 MyIntegerTest.java
javap -p MyIntegerTest

警告: 二進(jìn)制文件MyIntegerTest包含com.james.example.MyIntegerTest
Compiled from "MyIntegerTest.java"
public class com.james.example.MyIntegerTest {
  public com.james.example.MyIntegerTest();
  public static void main(java.lang.String[]);
}

-c

javac -encoding UTF-8 MyIntegerTest.java
javap -c MyIntegerTest

警告: 二進(jìn)制文件MyIntegerTest包含com.james.example.MyIntegerTest
Compiled from "MyIntegerTest.java"
public class com.james.example.MyIntegerTest {
  public com.james.example.MyIntegerTest();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #2                  // Method test:()I
       3: istore_1                          // 將操作數(shù)棧頂?shù)恼麛?shù)值(test()方法的返回值)出棧并存入局部變量表的第一個Slot中
       4: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;
       7: iload_1                           // 將局部變量表中的第一個Slot中的整型值復(fù)制到操作數(shù)棧頂
       8: invokevirtual #4                  // Method java/io/PrintStream.println:(I)V
      11: return

  public static int test();
    Code:
       0: iconst_1  // 將常量1壓入操作數(shù)棧
       1: istore_1  // 將操作數(shù)棧頂?shù)恼椭党鰲2⒋娣湃刖植孔兞勘碇械牡谝粋€Slot中
       2: iconst_2  // 將常量2壓入操作數(shù)棧
       3: istore_2  // 將操作數(shù)棧頂?shù)恼椭党鰲2⒋娣湃刖植孔兞勘碇械牡诙€Slot中
       4: iload_1   // 將局部變量表中的第一個Slot中的整型值復(fù)制到操作數(shù)棧頂
       5: iload_2   // 將局部變量表中的第二個Slot中的整型值復(fù)制到操作數(shù)棧頂
       6: iadd      // 將操作數(shù)棧中頭兩個棧頂元素出棧,做整型的加法捻爷,然后將結(jié)果重新入操作數(shù)棧
       7: istore_2  // 將操作數(shù)棧頂?shù)恼椭党鰲2⒋娣湃刖植孔兞勘碇械牡谌齻€Slot中
       8: iload_2   // 將局部變量表中的第三個Slot中的整型值復(fù)制到操作數(shù)棧頂
       9: ireturn   // 將操作數(shù)棧中的棧頂值返回給此方法的調(diào)用者
}

當(dāng)int取值-1-5采用iconst指令辈灼,取值-128-127采用bipush指令,取值-32768-32767采用sipush指令也榄,取值-2147483648~2147483647采用 ldc 指令巡莹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市甜紫,隨后出現(xiàn)的幾起案子降宅,更是在濱河造成了極大的恐慌,老刑警劉巖囚霸,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腰根,死亡現(xiàn)場離奇詭異,居然都是意外死亡拓型,警方通過查閱死者的電腦和手機(jī)额嘿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劣挫,“玉大人册养,你說我怎么就攤上這事⊙构蹋” “怎么了球拦?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我坎炼,道長愧膀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任点弯,我火速辦了婚禮扇调,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抢肛。我一直安慰自己狼钮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布捡絮。 她就那樣靜靜地躺著熬芜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪福稳。 梳的紋絲不亂的頭發(fā)上涎拉,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機(jī)與錄音的圆,去河邊找鬼鼓拧。 笑死,一個胖子當(dāng)著我的面吹牛越妈,可吹牛的內(nèi)容都是我干的季俩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼梅掠,長吁一口氣:“原來是場噩夢啊……” “哼酌住!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阎抒,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤酪我,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后且叁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體都哭,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年逞带,在試婚紗的時候發(fā)現(xiàn)自己被綠了质涛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡掰担,死狀恐怖汇陆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情带饱,我是刑警寧澤毡代,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布阅羹,位于F島的核電站,受9級特大地震影響教寂,放射性物質(zhì)發(fā)生泄漏捏鱼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一酪耕、第九天 我趴在偏房一處隱蔽的房頂上張望导梆。 院中可真熱鬧,春花似錦迂烁、人聲如沸看尼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藏斩。三九已至,卻和暖如春却盘,著一層夾襖步出監(jiān)牢的瞬間狰域,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工黄橘, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留兆览,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓塞关,卻偏偏與公主長得像抬探,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子描孟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351