JVM_局部变量表

本文介绍学习JVM局部变量表时,可借助jclasslib bytecode viewer工具直观了解其与方法、类的关系,该工具可在Android studio插件中添加。还通过代码展示this变量在静态方法局部变量表中的情况,介绍字节码指令相关内容,最后拓展了变量分类知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在学习JVM 局部变量表的时候, 最好是借助字节码指令查看工具 (jclasslib bytecode viewer),  可以很直观的了解局部变量表,以及其与方法或者类之间的关系

jclasslib bytecode viewer 可以在Android studiol 的plugin 插件中添加, 网上有很多教程。

1. 以一段简单的代码了解 this 变量的使用

​
public class LocalVariablesTest {
    private int mCount = 0;
    public static void main(String[] args) {

        //因为this 变量不存在于当前方法的局部变量中??
        //System.out.println(this.mCount);

        LocalVariablesTest test = new LocalVariablesTest();
        test.test1();
        LocalVariablesTest.test2();
    }

    public void test1(){
        System.out.println("test1()");
        System.out.println(this.mCount);
    }

    public static void test2(){
        System.out.println("test2()");
        //因为this 变量不存在与当前方法的局部变量中??
        //System.out.println(this.mCount);
    }
}

​

可以看出, this 变量不存在于静态方法的局部变量表中, 因此静态方法无法使用this (可通过类名.

2.  了解字节码指令 (局部变量表)

可以看到各个方法(Methods)中的 字节码指令(code) 、 行号对应表(LineNumberTable) 、局部变量表(LocalVariableTable).

test1 方法局部变量表如下所示

test2 方法局部变量表如下所示

其中, 

(1)  LocalVariableTable 表示局部变量表 

列Name表示变量名, Start PC表示变量在字节码指令的作用域的起始位置,length 表示作用域的长度或者范围。

(2) LineNumberTable 表示字节码指令行号 JAVA 代码的行号 的对用关系。

 

拓展:

变量的分类

1. 成员变量 : 

(1)类变量: Linking (链接) 的prepare 阶段会设置默认值; 在初始化阶段 赋值 (程序员写的) 

(2) 实例变量:默认值, 存放在堆中

2. 局部变量:没有默认值,在使用前必须初始化 (局部变量也会引起内存没被回收问题)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值