描述Student对象:

package android.java.oop12;

// 描述Student对象实体
public class Student { private String name; private int age; protected static String country = "CN"; private Student() {} public Student(String name, int age) {
/**
* 通过拿到对象引用的地址(9998#==this),去操作 堆区内存的 name属性 age属性
*/
this.name = name;
this.age = age;
} public void showValue() {
/**
* 通过拿到对象引用的地址(9998#==this),去操作 堆区内存的 name属性 age属性
*/
System.out.println("name:" + this.name + " age:" + age);
} public static void printlnCountry() {
/**
* 通过类名就可用拿到 ---> 方法区(共享数据区) --> 中的 静态区 里面的 --> 静态数据 ,都是共享的
*/
System.out.println("country:" + Student.country);
System.out.println("country:" + country);
} }

main测试方法:

package android.java.oop12;

public class TestDemo {

    public static void main(String[] args) {

        /**
* 实例化Student对象 new Student("张三", 89);
* 拿到实例化对象引用的地址 Student student == 9998#
*/
Student student = new Student("张三", 89); /**
* 通过拿到对象引用的地址(9998#==this),去调用showValue()方法
*/
student.showValue(); /**
* 直接调用 静态区 共享的 printlnCountry() 方法
*/
Student.printlnCountry();
} }

执行结果:

以上案例对应的内存图:

1. 执行 java TestDemo   是给JVM发送指令,和JVM说:把这个 TestDemo.class 去执行;

2.JVM就去执行 TestDemo.class 文件里面的字节码,首先第一步 是把 TestDemo.class字节码加载进内存;

3.第二步,会把TestDemo 静态数据 分配到 静态区里面去;

4.第三步,main方法进栈,是直接把静态区里面的 TestDemo --> main 方法拿过来进栈运行;

5.第四步,new Student("张三", 89);

6.第五步,注意:非常重要的点 要记住 ,那就是在 new Student("张三", 89); 的时候才把,Student.class加载进内存中的---> 存放区;

7.第六步,分配Student静态数据到--->静态区;

8.第七步,在堆内存中开辟 Student对象空间,并分配对象地址,并给变量赋初始值 null 0 等;

9.第八步:构造方法Student(name, age) 进栈, 第九步:构造方法Student(name, age)弹栈;

10.第十步,在堆内存中,name age 属性 被赋值完毕;

11.第十一步,new Student(name, age); 后 得到一个对象引用地址 给student变量;

12.第十二步,调用 student.showValue();

13.第十三步:showValue()方法进栈, 并通过this去操作name、age属性,  第十四步:showValue()方法弹栈;

14.第十五步:;

15.第十六步:printlnCountry()方法进栈,并直接去访问 共享的 country 变量,  第十七步:printlnCountry()方法弹栈;

16.第十八步:main方法执行完毕,弹栈;

17.第十九步:等待 JVM GC 机制来回收 Student对象;

Android-Java-静态变量与静态方法&普通变量与普通方法(内存图 完整版)的更多相关文章

  1. Android-普通变量与普通方法内存图

    描述Worker对象: package android.java.oop11; // 描述Worker public class Worker { public String name; public ...

  2. Android kotlin静态属性、静态方法

    只需要用 companion object 包裹相应代码块即可.以静态属性为例: class Constants { companion object { val BASE_URL = "h ...

  3. 转载:JAVA的静态变量、静态方法、静态类

    静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. (1)Java静态对象和非静态对象有什么区别? 比对如下: 静态对象                                ...

  4. 【转】JAVA的静态变量、静态方法、静态类

    转自:http://blog.csdn.net/zhandoushi1982/article/details/8453522/ 静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. ( ...

  5. JAVA的静态变量、静态方法、静态类

    静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. (1)Java静态对象和非静态对象有什么区别? 比对如下: 静态对象                                ...

  6. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  7. 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

    内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...

  8. java静态变量、静态方法和静态代码段

    先上实例 public class TestStatic { public static String staticString = "this is a static String&quo ...

  9. java中静态的代码块,静态变量,静态方法

    简单了解一下java虚拟机--jvm几个内存区域: 方法区:在java的虚拟机中有一块专门用来存放已经加载的类信息.常量.静态变量以及方法代码的内存区域, 常量池:常量池是方法区的一部分,主要用来存放 ...

随机推荐

  1. 【学习】基础知识:数组和矢量计量【Numpy】

    Numpy是高性能科学计算和数据分析的基础包.功能如下: ndarray 一个具有矢量算法运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环) 用于读 ...

  2. alias命令详解:给命令设置别名

    给命令设置别名,你可以把它当作命令的"小名",但是这样做有什么意义呢? 比如笔者刚接触 Linux 时,使用的编辑器是 Vi,但是现在 Vim 的功能明显比 Vi 的功能更加强大, ...

  3. javaee_正则表达式基础和常用表达式

    正则基础: 1.1 -字符集 [ ] : 代表单个字符. [^] : 除了该字符外的所有单个字符. [a-zA-Z] : [a-z] || [A-Z]. [a-d[m-p]] :[a, d] || [ ...

  4. ArcGIS自定义工具箱-列举损坏的数据源

    ArcGIS自定义工具箱-列举损坏的数据源 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:查找地图文档中损坏的数据源链接 使用方法:参数可选,默认为当前(ar ...

  5. equals的使用

    源码:这里只是把Integer拿出来,String,Long 都一样 /** * Compares this object to the specified object. The result is ...

  6. CSS如何作小于1PX的边

    小于1PX的边能使页面变得更加精致,那么具体怎么做呢? 主要思路就是设置伪元素先放大再通过变换缩小. 代码如下 .border { position: relative;//如果有圆角 } .bord ...

  7. AltiumDesigner 常用快捷键小结

    Ctrl + o  |  打开文件夹/文档 Ctrl + p  |  打印设置 Esc   |  从当前步骤退出 Shift +鼠标滚轮  |  向左/向右移动 Ctrl + C (或 Ctrl + ...

  8. input date 支持placeholder属性

    第一种解决方法:IE,火狐浏览器,不支持input date的日历功能,火狐支持日历功能   ie,火狐,谷歌显示placeholder属性 css代码 #dateofday:before{  col ...

  9. 156. Binary Tree Upside Down反转二叉树

    [抄题]: Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left nod ...

  10. 图片识别文字, OCR

    文章引用自: https://www.cnblogs.com/stone_w/archive/2011/10/08/2202397.html 方式一.Asprise-OCR的使用. Asprise-O ...