Java零基础-方法执行内存分析

通过一个类,可以实例化 N 个对象:new 类名();

new 运算符的作用:创建对象,在 JVM 堆内存 当中开辟新的内存空间

方法区内存:在类加载的时候,class 字节码代码片段被加载到该内存空间中
栈内存(局部变量):方法代码片段执行的时候,会给该方法分配内存空间,在 栈内存 中压栈
堆内存:new 的对象在 堆内存 中存储

分析下面语句

1
Student s = new Student();
  1. Student 是一个引用数据类型
  2. s 是一个局部变量(在栈内存中存储),也是一个引用
  3. new Student() 是一个学生对象
  4. 什么是对象??
    • new 运算符在 堆内存 中开辟的内存空间——对象
  5. 什么是引用??
    • 引用是一个变量,只不过这个变量中保存了另一个 Java 对象的内存地址
  6. 所以,s 是引用,不是对象,new Student() 才是对象,s 保存的是对象的内存地址
  7. Java 中,程序员不能直接操作堆内存,没有指针,不像 C 语言。只能通过 “引用” 去访问堆内存当中对象内部的实例变量

访问实例变量的语法格式

  • 读取数据:引用.变量名
  • 修改数据:引用.变量名 = 值
1
2
3
4
5
6
7
Student stu = new Student();
System.out.println(类名.name);

// 编译报错:name 这个实例变量不能直接采用“类名”的方式访问
// 因为它是对象级别的变量,变量存储在 Java 对象的内部,必须先有对象
// 通过对象才能访问实例变量
System.out.println(Student.name);