一个对象的内存图
多个对象的内存图
两个变量指向同一个对象的内存图
this的内存原理
基本数据类型和引用数据类型的区别
局部变量和成员变量的区别
Java内存分配介绍
补充一个
标准的JavaBean类
1.类名要见名知义
2。成员变量使private修饰
3.至少两种构造方法,
一个无参构造方法
一个全部参构造方法
4.提供每一个成员变量对应的setXxx()/getXxx()
如果还有其他行为也需要写上
一个对象的内存图
创建一个对象包含以下流程:
Student s=new Student();
1.加载class文件
2.声明局部变量
3.在堆中开辟一个空间
4.默认初始
5.显示初始化
6.构造方法初始化
7.将堆内存中的地址赋值给左边的局部变量
1.一个对象的内存图:对象指向内存地址
2.两个引用指向同一个对象:会将第一个对象那个指向的内存地址也让人第二个对象那指向该内存地址,任何一个对象那个对内存进行改变都会造成两个对象那个下次调用时变量值量改变
当第一个对象那个给成员变量赋初值时他就有了初值,但是因为共用同样一个地址黑内存当第二个对象那个对他在进行赋值时会把第一个覆盖了。整个内存对应被调用时就成新的值
3.两个对象的内存图:每个对象单独对应一个内存区域:两个对象调用成员变量赋值操作时都是分别对自己的内存区域做改变不会互相影响,下次调用也只是会得到自己对应内存的值,第二次创建对象对象时不用在重新加载类
当对应方法执行完毕后对应的存储部分就变成垃圾丢弃
基本数据类型和引用数据类型
基本数据类型:
整数类型
浮点数类型
布尔类型
字符类型
引用数据类型
除了上面的所有类型
基本数据类型
每一个变量对应一个存储单元元素就存在存储单元里
引用数据类型:变量指向的是存储地址而不是直接指向数据要通过存储地址在进一步指向对应的数据
如数组变量指向的是数组地址,他只知道数组存在哪,数据都存在地址下的内存中
总结:
从内存的的角度去解释:
基本数据类型:数据值是存在自己的的空间
特点:赋值给变量也是赋的真时值
引用型数据类型:数据值是存储在其他空间中,自己空间中存储的是地址
特点:赋值给其他变量,赋的地址值。
Stuent s1=new Student();
Student s2=s1;
this的内存原理:
this的作用:区分局部变量和成员变量
this的本质:所在方法调用者的地址值
如下thi.age因为之前成员变量未被初始化故默认初始值为0
如调用sout(age)的是s那么this.age就是s地址下的age
在有如果是s1调用了thi.age就是修改s1地址下的age
如果是s2 调用方法修改thi.age 那么就是修改s2地址上的age
成员变量和局部变量的区别:
成员变量:类中方法外的变量
局部变量:方法中的变量
成员变量在类的位置可以任意