13.Java面向对象知识大全(下)

简介: 13.Java面向对象知识大全(上)

六、对象内存图

先来复习一下java内存分配:

1.一个对象的内存图

程序从main方法开始执行,首先将TestStudent字节码文件加载到方法区里面,这个时候将main方法进行了临时存储,然后虚拟机会自动调用程序的主入口main方法,main方法会被加载到栈里面,然后执行main方法里面的代码

第一句代码:Student s=new Student();

创建对象(由上图可知需要七步)

(1)加载class文件

在方法区会把Student.class加载到里面临时存储,class里面会有Student的所有信息,比如说所有的成员变量和所有的成员方法,

(2)申明局部变量

其实就是在创建对象时等号左边的代码

在main方法中开创了一块空间,空间名字叫做s,这个空间以后可以存储Student这个类对象的地址值

(3)在堆内存中开辟一个空间

其实就是在创建对象时等号右边的代码

new Student()

由new关键字就是在堆里面开辟了一个空间,而堆里面的空间都是有地址值的.

这个空间的地址值假设是001,这个空间里面会把Student这个类里所有的成员变量拿过来拷贝一份,除此之外,还有所有成员变量存储方法的地址.有地址的原因是以后用对象调用方法的时候,我们能找到对应的方法.此时这个001里面就是我们平时所说的对象

但是这个对象还没有创建完毕,因为name,age还没有值,所以通过4,5,6步骤还要进行赋值

(4)默认初始化

(5)显示初始化

如果在定义成员变量的时候直接给值(下面圈出来的部分),这就叫做显示初始化.没有给出值的时候,可以忽略显示初始化.

(6)构造方法初始化

小括号里面什么都没写,表示调用的是空参构造.空参构造里面什么也没写,所以我们可以忽略构造方法初始化.如果用的是有参初始化构造,此时name和age就有值了.

(7)将堆内存中的地址值赋值给左边的局部变量

此时一个对象创建完毕.

执行过程:

执行完main方法里面的代码之后,main方法出去,main方法里面的变量也消失,变量指向堆内存的对象,由于没有变量去用它(也就是说没有变量指向这个空间了),这个对象也会消失

2.两个对象的内存图

测试类Test2Student字节码文件加载到方法区里面,对main方法进行临时存储,虚拟机调用main方法.

执行main方法里面的代码:

执行第一句的时候参考上面一个对象的内存图的讲解.

在创建第二个对象时,过程如下:

执行完毕之后:

3.两个引用指向同一个对象

执行过程:

重点图:

堆内存中的对象没有人用它的时候,就会消失:

执行完毕之后:main方法出栈

注意:

当两个变量指向同一个空间的时候,只要其中一个变量对这个空间里面的值发生了改变,那么其他的变量再次访问的时候就是改变之后的值.

4.基本数据类型和引用数据类型内存原理

基本数据类型是在变量中存储的是真实的数据值.

引用数据类型记录的是其它空间的地址值.

比如我们在代码中创建的对象,数组;都是引用数据类型.

数组:

总结:

5.this的内存原理图

this的作用:区分局部变量和成员变量

this的本质:所在方法调用者的地址值

案例1:

案例2:

总结:

6.成员变量和局部变量的区别


总结

今天的内容你是否有所收获呢友友们🥰如果有写的不对的地方,欢迎大家帮我指正.最后,希望友友们点赞收藏一下博客关注后续的Java学习内容哦~😘💕💕下篇文章内容是超全的面向对象综合案例哦❤️

相关文章
|
1月前
|
存储 Java 数据处理
Java基础—笔记—面向对象篇
该内容是关于面向对象编程的介绍,包括类(用于定义数据和处理方法)、对象(通过类创建,存储和处理数据)的创建和使用,`this`关键字(代表调用方法的对象,用于区分成员变量和局部变量),成员变量与局部变量的区别(定义位置、初始化值、内存区域、作用域和生命周期),构造器(无返回值、与类名相同的特殊方法,用于对象创建和初始化),以及封装的概念(数据隐藏和暴露控制)和实现步骤(私有化成员变量,提供公共的setter和getter,以及构造器)。
17 0
|
5天前
|
存储 安全 Java
Java面向对象最新超详细总结版!
Java面向对象最新超详细总结版!
24 7
Java面向对象最新超详细总结版!
|
1天前
|
Java
java面向对象——包+继承+多态(一)-2
java面向对象——包+继承+多态(一)
15 3
|
1天前
|
SQL Java 编译器
java面向对象——包+继承+多态(一)-1
java面向对象——包+继承+多态(一)
15 2
|
11天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
10 0
|
12天前
|
Java
java使用面向对象实现图书管理系统
java使用面向对象实现图书管理系统
|
12天前
|
Java
Java语言---面向对象的三大特征之继承
Java语言---面向对象的三大特征之继承
|
12天前
|
机器学习/深度学习 Java Python
Java面向对象知识体系---基础版
Java面向对象知识体系---基础版
|
16天前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类
|
16天前
|
Java
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
16 0