Task1實(shí)驗(yàn)材料:
javap的用法
用法: javap <options> <classes>
其中, 可能的選項(xiàng)包括:
--help -help -h -? 輸出此幫助消息
-version 版本信息
-v -verbose 輸出附加信息
-l 輸出行號(hào)和本地變量表
-public 僅顯示公共類和成員
-protected 顯示受保護(hù)的/公共類和成員
-package 顯示程序包/受保護(hù)的/公共類
和成員 (默認(rèn))
-p -private 顯示所有類和成員
-c 對(duì)代碼進(jìn)行反匯編
-s 輸出內(nèi)部類型簽名
-sysinfo 顯示正在處理的類的
系統(tǒng)信息(路徑、大小、日期、SHA-256 散列)
-constants 顯示最終常量
--module <模塊>, -m <模塊> 指定包含要反匯編的類的模塊
-J<vm-option> 指定 VM 選項(xiàng)
--module-path <路徑> 指定查找應(yīng)用程序模塊的位置
--system <jdk> 指定查找系統(tǒng)模塊的位置
--class-path <路徑> 指定查找用戶類文件的位置
-classpath <路徑> 指定查找用戶類文件的位置
-cp <路徑> 指定查找用戶類文件的位置
-bootclasspath <路徑> 覆蓋引導(dǎo)類文件的位置
--multi-release <version> 指定要在多發(fā)行版 JAR 文件中使用的版本
GNU 樣式的選項(xiàng)可使用 = (而非空白) 來(lái)分隔選項(xiàng)名稱
及其值。
如果只是單純的用javap +class文件名的話,那只是單純的反編譯class文件而已。
我們都知道class文件的字節(jié)碼文件,是難以理解的。
用javap詳細(xì)輸出
javap -v Main.class
很好理解。這里保存了最新更改時(shí)間和文件大小為414字節(jié)。
類聲明:
public class Main
版本信息:
minor version: 0
major version: 61
這表示 Java 編譯器的次要版本為 0,主要版本為 61。Java 版本號(hào) 61 對(duì)應(yīng) JDK 17。
訪問(wèn)標(biāo)志:
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
這表示類具有 ACC_PUBLIC
和 ACC_SUPER
兩個(gè)訪問(wèn)標(biāo)志。
類層次結(jié)構(gòu):
this_class: #21
super_class: #2
this_class
表示當(dāng)前類為索引為 21 的常量池項(xiàng)(#21 = Class #22 // Main
),而 super_class
表示其父類為索引為 2 的常量池項(xiàng)(#2 = Class #4 // java/lang/Object
)。
接口、字段、方法和屬性統(tǒng)計(jì):
interfaces: 0, fields: 0, methods: 2, attributes: 1
該類沒(méi)有實(shí)現(xiàn)接口,沒(méi)有字段,有兩個(gè)方法,一個(gè)屬性。
常量池:
Constant pool: ...
常量池包含了類中使用的常量信息,包括方法引用、字段引用、字符串等。
方法信息:
#25 = Utf8 main
#26 = Utf8 ([Ljava/lang/String;)V
這表示類中有一個(gè)名為 main
的方法,其描述符為 ([Ljava/lang/String;)V
,即主方法。
源文件信息:
#27 = Utf8 SourceFile
#28 = Utf8 Main.java
表示源文件名為 Main.java
。
-
構(gòu)造函數(shù):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-801941.html
-
aload_0
:將當(dāng)前對(duì)象的引用加載到操作數(shù)棧上。 -
invokespecial #1
:調(diào)用父類的構(gòu)造函數(shù)。 -
return
:返回。
-
-
主函數(shù):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-801941.html
-
getstatic #7
:從靜態(tài)字段區(qū)獲取java.lang.System.out
對(duì)象。 -
ldc #13
:將字符串常量"Hello world!"加載到操作數(shù)棧上。 -
invokevirtual #15
:調(diào)用java.io.PrintStream.println
方法,將字符串輸出到控制臺(tái)。 -
return
:返回。
-
到了這里,關(guān)于解析用GraalVm編譯的class文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!