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 指令巡莹。