Java面向对象基础4——内存图

Java面向对象基础——内存图

前言

本文将讲述Java面向对象编程中的内存原理

步骤

  1. 加载class文件
  2. 声明局部变量
  3. 在堆内存中开辟空间
  4. 默认初始化
  5. 显示初始化(仅在定义时有初始值才会有这个步骤)
  6. 构造方法初始化(如果是空参构造就没有这个步骤)
  7. 堆内存中地址值赋值给左边变量

一个对象的内存图——实例

public class Student{
          
   
	
	String name;
	int age;
	

	public void study(){
          
   
	System.out.println("好好学习,天天向上");
	}
}
public class TestStudent{
          
   
	public static void main(String[] args){
          
   
	Student s = new Student();
	System.out.println(s.name + " " +s.age);
	s.name = "张三";
	s.age = 20;
	System.out.println(s.name + " " +s.age);
	s.study();
	}
}

两个对象的内存图——实例

public class Student{
          
   
	
	String name;
	int age;
	

	public void study(){
          
   
	System.out.println("好好学习,天天向上");
	}
}
public class TestStudent{
          
   
	public static void main(String[] args){
          
   
	Student s1 = new Student();
	System.out.println(s.name + " " +s.age);
	s.name = "张三";
	s.age = 20;
	System.out.println(s.name + " " +s.age);
	s.study();
	Student s2 = new Student();
	System.out.println(s.name + " " +s.age);
	s.name = "李四";
	s.age = 20;
	System.out.println(s.name + " " +s.age);
	s.study();
	}
}

两个引用指向同一个对象——实例

与上述两个对象的内存图不同,堆内存只开辟了一个空间,s1和s2都指向那个新开辟的空间,如下图所示

this关键字储存原理

图源自黑马程序员

结语

知道存储原理便于理解方法是如何执行的,在写代码时也能避免一定错误,如果觉得看文字版讲解不够清楚的话,可以点击链接查看有关视频

经验分享 程序员 微信小程序 职场和发展