.field private static HELLO_WORLD:Ljava/lang/String;
direct methods
.method static constructor ()V
.registers 1
.prologue
.line 3
const-string v0, “Hello World!”
sput-object v0, LHello;->HELLO_WORLD:Ljava/lang/String;
return-void
.end method
.method public constructor ()V
.registers 1
.prologue
.line 1
invoke-direct {p0}, Ljava/lang/Object;->()V
return-void
.end method
.method public static main([Ljava/lang/String;)V
.registers 3
.prologue
.line 6
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
sget-object v1, LHello;->HELLO_WORLD:Ljava/lang/String;
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 7
return-void
.end method
文件头
首先看一下文件头部分:
.class public LHello; // 类名
.super Ljava/lang/Object; // 父类名
.source “Hello.java” // 源文件名称
.class
后面是 访问修饰符和当前类,这里类名用 LHello
表示。那么这个 L
代表什么呢?其实之前的 Class 文件中也出现过这种表示方法,JVM 的字节码指令和 Dalvik 的字节码指令有很多地方都是类似的。Java 中分为基本类型和引用类型,DalviK 对这两种类型分别有不同的描述方法。对于基本类型和 Void 类型,都是用一个大写字母表示。对于引用类型,使用字母 L
加上对象类型的全限定名来表示。具体规则如下表所示: