浅谈谈Java变量在内存中的运行机制

首先,我门来看看Java中的变量分类。如下图:
这里写图片描述

接下来我们通过代码来分析内存中的变量

public class VariableTest {

    public static void main(String[] args) {
        //在创建MyTest实例前访问类变量
        System.out.println("*********************进入main()方法*********************\n");
        System.out.println("访问MyTest类的类变量:staticStr = " + MyTest.staticStr);
        MyTest myTest = new MyTest("实例变量值");
        System.out.println("*********************离开main()方法*********************\n");
    }

}
class MyTest {
    public static String staticStr;
    private String instanceStr;

    static {
        System.out.println("*************进入静态代码块*************");
        System.out.println("初始化类变量staticStr = " + (staticStr = "类变量staticStr值"));
        int i = 10;//局部变量需要显式初始化后才能使用
        System.out.println("定义并初始化静态代码块中的局部变量 i = " + i);
        System.out.println("*************离开静态代码块*************\n");
    }
    {
        System.out.println("*************进入普通代码块*************");
        System.out.println("获取实例变量instanceStr的初始值:instanceStr = " + instanceStr);
        int i = 140;
        System.out.println("定义并初始化局部变量 i = " + i);
        System.out.println("*************离开普通代码块*************\n");
    }

    public MyTest(String instanceStr) {
        System.out.println("***************进入构造器***************");
        this.instanceStr = instanceStr;
        System.out.println("获取初始化后的实例变量 instanceStr = " + this.instanceStr);
        System.out.println("***************离开构造器***************\n");
    }

    public static void staticMethod(String param) {
        System.out.println("*************进入静态方法staticMethod()**************");
        int i = 110;
        System.out.println("静态代码块中的局部变量: i = " + i);
        System.out.println("*************离开静态方法staticMethod()**************\n");
    }
    public void method(String param) {
        System.out.println("*************进入实例方法method()**************");
        int i = 110;
        System.out.println("实例方法中的局部变量: i = " + i);
        System.out.println("*************离开实例方法method()**************\n");
    }
}

首先给出运行结果:
这里写图片描述

以上的运行结果的代码执行顺序如下图所示:
这里写图片描述

在给出内存图之前首先明白一点:对于局部变量,其作用范围就是该方法体或者代码块,也就是说局部变量随着方法或者代码块的开始而开始,结束而结束。因此,我们只演示成员变量在内存中的运行机制。
类准备阶段:在堆内存中只由MyTest类的信息包括类变量staticStr——此时系统已经为staticStr分配了内存空间并赋予了默认初始值。
这里写图片描述
在创建对象后,栈内存中才会出现对象的引用变量以及在堆内存中由对应的对象。如图所示:
这里写图片描述
完毕!

献此拙文,如有错误或不足,欢迎留言指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值