浅谈谈Java变量在内存中的运行机制
来源:互联网 发布:seo如何添加栏目 编辑:程序博客网 时间:2024/06/08 19:47
首先,我门来看看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
- 浅谈谈Java变量在内存中的运行机制
- 数组在内存中的运行机制
- java中变量在内存中的分配
- java中变量在内存中的分配
- JAVA变量在内存中的分配
- 变量在内存中的形态
- 变量在内存中的位置
- 变量在内存中的存放
- 变量在内存中的存储
- 变量在内存中的区域
- 变量在内存中的存储
- 浅谈程序在内存中的分布
- java语言中申明的类变量、实例变量、局部变量在内存中的分配问题
- C/C++变量在内存中的存储
- 关于局部变量在内存中的地址
- C++变量在内存中的存储区域
- c++变量在内存中的存储区域
- C++变量在内存中的存储区域
- java.sql.SQLException: ORA-00911: 无效字符 解决方法
- 插入排序
- JS 对象之Json
- 漫步最优化四——约束
- leetcode 477. Total Hamming Distance
- 浅谈谈Java变量在内存中的运行机制
- 617. Merge Two Binary Trees
- 基于JAVA的图书管理系统(jsp+mysql+tomcat)
- JQuery 输入文本框 简单事件
- 全面理解Java内存模型
- Python探索记(09)——字符串(上)
- HDU4507 吉哥系列故事――恨7不成妻
- 洛谷P3003 [USACO10DEC]苹果交货Apple Delivery
- 记2017—春招,令人难忘的面试经历