【Java】面向对象、内存调用

Java面向对象

1.面向过程和面向对象

面向过程: 当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节,这样的叫做面向过程。

面向对象: 当需要实现一个具体的功能的时候,不关心具体的步骤,而是找一个已经具有该功能的对象,来帮我完成这件事。

面向过程编程举例:

在这里插入图片描述

面向对象编程举例:

在这里插入图片描述

面向对象直接使用的是一个对象,一个封装好的Package;而面向过程编程则需要对一整个方法步骤进行逐步编写,容错率更低。


2.面向对象的特征

封装、继承、多态

  • 封装:
  • 继承:
  • 多态:

3.类和对象的关系

:是一组相关属性和行为的集合,可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。

现实中,类就是描述一类事物:

  • 属性:就是该类事物的状态信息
  • 行为:就是该事物能够做什么

对象:是一类事物的具体体现,对象是类的一个实例,必须具备该类事物的属性和行为。

现实中,一类事物的一个实例。

类是一类事物的描述,是抽象的。

对象是一类事物的实例,是具体的。


4.类的定义

定义一个类的过程:
在这里插入图片描述


5.对象的内存调用

根据使用的内存基本涉及三大块方法区来看,对象的调用内存过程应该为以下步骤:

  1. 先将方法存放进方法区,之后根据main方法找到程序的运行入口。方法记录的是.class信息,会记录方法的地址。
  2. 所有的方法需要运行的话,首先是需要进行压栈操作的。先运行的需要先进栈,后来的后进栈,根据栈(Stack) 的数据结构,后进栈的反而在上面。根据图解可以看出。
  3. 需要运行的本地局部变量压栈之后,类之中存放的成员变量以及成员方法(成员方法在堆中保存的是地址值,真正的操作信息属于方法,保存在方法区中,需要调用方法的时候根据地址值寻找到方法区中的方法进行调用)被new操作之后就会进入堆(Heap) 之中。
  4. 在运行到具体对象的时候,对象以及对象对应的成员方法被调用的时候会进行压栈操作。压栈之后,根据方法对应的地址找到方法区中相应的方法,进行相关操作,再根据具体情况,是否要对堆内存中的成员变量做出相应的操作。
  5. 当方法调用完毕的时候,方法进栈运行完毕之后会立即进行弹栈操作,从栈内存中弹出

具体演示如下图:
在这里插入图片描述


6.两个对象使用同一个方法的内存调用

在对象被使用的时候,内存的调用大致上是相同的。

对于一个JAVA程序来说,内存中首先有东西的将会是方法区。方法区存放的是.class信息,会接收到导入的包(Package)的内存地址。之后再将需要运行的部分先压栈,进入栈空间。这其中,new操作得来的数据将会被存放在堆空间中。根据变量存放的位置以及其数据性质,再根据地址找到相应的数据存放的实际空间,再根据情况读取或者修改调用数据。进行完一个全部的操作步骤之后,压栈的部分被调用完毕之后,将会立即进行弹栈操作,释放栈的一部分空间。正是因为栈的数据空间结构特性,先进后出,所以对于一般程序而言,先进栈的main方法将会在最开始的时候压栈,然后在处理完所有的步骤之后再最后弹出,结束程序的运行也对空间进行了释放。


在上一个例子之后,对于两个对象使用同一个方法的实例中,内存调用的情况如下:

在这里插入图片描述

实际上就是两个对象根据存放在堆空间中相同的成员方法地址值,在方法区中找到相同的成员方法进行调用。调用过程和一个对象的案例基本一致。


7.两个引用指向同一个对象的内存调用

在这种情况中,即将一个对象的地址赋值给另外一个对象,实际上内存地址为同一个,在堆空间中创建的内存空间也仅有一个。具体情况如下图所示:

在这里插入图片描述


8.使用对象类型作为方法的参数

在这里插入图片描述

使用对象作为方法的参数时,内存的调用过程如图所示。

实际使用过程中,将对象类型作为返回值类型,定义使用:

在这里插入图片描述

Phone作为方法返回值类型,返回的是one这个对象。

在这个代码之中,main方法调用了后面创建的getPhone方法,这个方法返回的是一个Phone类型,将one这个类型返回到main方法中的two类型之中。在内存调用中,发生的是:

在这里插入图片描述

这个时候,main方法中调用方法getPhone的时候,在方法中使用new操作,对成员变量做出了赋值修改操作。调用方法之后,会赋值给Phone two这个对象,其实就是将这个对象的地址赋值给two,实则操作之后两者指向的是同一个对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值