前言
本文将讲述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关键字储存原理
图源自黑马程序员
结语
知道存储原理便于理解方法是如何执行的,在写代码时也能避免一定错误,如果觉得看文字版讲解不够清楚的话,可以点击链接查看有关视频