Java基础入门:面向对象-简单内存模型

88 阅读1分钟

JVM 内存结构

  • JVM运行时内存区域结构

image.png

JMM(Java Memory Model)

Java 对象模型

  • HotSpot (OOP - klass model)

image.png

  • 变量在内存中的存储

    • 当创建变量时需要在内存中申请空间
    • 内存系统根据变量类型来分配存储空间,分配的空间只能用于存储该类型的数据
    • 基本类型:存储在栈区,直接存储值
    • 引用类型:对象存储在heap区,栈区存储真实对象的地址引用
  • 过程演示:

public static void main(String[] args) {
    User user = new User();
    System.out.println(user.id);    // 0
    System.out.println(user.name);  // null
    System.out.println(user);       // User@1b6d3586
    user.id = 1;
    user.name = "Java";
    System.out.println(user.id);    // 1
    System.out.println(user.name);  // "Java"
    System.out.println(user);       // User@1b6d3586 值变了,地址不变
    
    user.sayHello();
    user.login();
    
}

image.png

  • 两个对象指向同一个地址:
public static void main(String[] args) {
    User user2 = new User();
    user2.id = 2;
    user2.name = "xx";
    System.out.println(user2.id);
    System.out.println(user2.name);

    User user3 = user2;
    user3.id = 3;
    user3.name = "ivan";
    System.out.println(user3.id);
    System.out.println(user3.name);
    System.out.println(user2.id);
    System.out.println(user2.name);
}

image.png

this

  • 构造器中 this 指向正要初始化的对象地址
  • 普通方法中 this 指向调用该方法的对象地址
  • this 不能用在出现 static 的地方
  • this():调用构造方法,必须在第一行