【NB】Java面向对象之类、方法、属性、对象(二)

3366255622   ·   发表于 2021-3-7   ·   编程代码
经过前文,我们已经知晓了如何构建一个类,并知晓它的成员及方法有什么作用,这次继续深入剖析,再给大家介绍一些类的新特性。
我们从数组那节认识了栈,知道了数组名相当于一个指针,指向了堆中的实际数据。我们又从上一节知晓了方法在内存中是作为一个栈帧存在的,这样介绍有些许混乱,如上文所说,栈中既有栈帧,又存在指针,他们的关系又是什么,接下来我们来探讨一下。
强烈建议读者开启左下角的楼主模式!!!
强烈建议读者开启左下角的楼主模式!!!
强烈建议读者开启左下角的楼主模式!!!

20 Reply   |  Until 2021-3-15 | 1583 View

klmkq
发表于 2021-3-7

指针与栈帧
到目前为止,我们认识了两类数据类型,第一类叫做基本数据类型,基本数据类型比较简单,就是int、float那些,需要知道的是String并不是绝对意义上的基本数据类型,这个我们后面会详细来说一下String这个特殊的类型。除了基本数据类型外,就是数组了,起初笔者介绍数组给出的描述是:数组的存储结构很像对象存储,事实确实如此,我们在上节也说过,对象就是指向堆中的实际数据的,也就是说,对象本身并无意义,有意义的是对象能够存储堆中的地址(指针通常占用4个字节)。

评论列表

  • 加载数据中...

编写评论内容

173406131
发表于 2021-3-7

首先来看基本数据类型在栈中是如何存储的,基本数据类型就是存储在栈帧中的。基本数据类型是这样存储的,那对象(数组)类型呢?广义上讲,对象类型也是存储在栈帧中的,狭义上讲对象是存储在堆中的,栈只是存储了这个指针(堆中的内存地址,图1)。方法中在访问时先通过指针中存储的地址找到堆中实际存储的数据的位置,然后才能对数据进行读写操作,你可能会有疑问,为何多此一举?直接传入对象的值,然后进行运算不好吗,效率还高(图2),Java这样设计自然有道理所在,我们后文详述。

评论列表

  • 加载数据中...

编写评论内容

柚子论坛
发表于 2021-3-7

引用与实例
在说为何方法参数不直接传入基本类型的问题前,我们不妨给对象类型下个定义,也可以说取个名字,毕竟一直对象类型叫着也比较拗口。

评论列表

  • 加载数据中...

编写评论内容

江山狂念
发表于 2021-3-7

遗憾的是,笔者也无法具体定位自己的理解在哪个位置,笔者仅分享自己的理解,为的是帮助大家理解,若对这两个词无疑问,本节跳过也无大碍(其实只需要知道这两个词描述的是对象类型就可以了)。

评论列表

  • 加载数据中...

编写评论内容

贼娘网
发表于 2021-3-7

引用与实例都是描述对象类型的,这两个词看起来特别晦涩,以至于很多有经验的Java工程师也无法实打实的描述这两个词背后的含义,笔者刚接触Java的时候被别人问到时也是十分不解。这两个词会经常出现在各类文章、书籍、博客中,我们把:将对象类型称作引用(实例)作为一种习惯,缺说不出为何叫对象类型为引用(实例)。

评论列表

  • 加载数据中...

编写评论内容

yuforum
发表于 2021-3-7

首先来说实例,我们称类为模板,即声明这个物体能做什么,他有哪些属性,在上一节中我们通过Car类制造了一辆保时捷,这辆保时捷就可以称作实例,如何理解?我们可以将所有汽车的特征归纳为:汽车有4轮胎、2倒车镜等,试问现实生活中的汽车的确都是4轮胎、2倒车镜,但是轮胎相同吗?倒车镜相同吗?每个汽车厂家都有自己的实现,也可以称作汽车厂家都按照这个标准实现。

评论列表

  • 加载数据中...

编写评论内容

wuhui
发表于 2021-3-7

加油[滑稽][大拇指]

评论列表

  • 加载数据中...

编写评论内容

salkfdn
发表于 2021-3-7

前文说过类即模板,模板是抽象的,抽象的物体我们不能直接拿来用,如:我要开4个轮胎的汽车,那是个什么样子的4个轮胎?因此我们就需要提供具体的东西,例如:保时捷、法拉利。实例的理解方案也由此浮出水面:我们可以拆开理解,实为实实在在,例为例子,合并称为实实在在的例子,正如前文所说,保时捷就是汽车生产的一个例子,因此可以称为保时捷对象是一个实例。

评论列表

  • 加载数据中...

编写评论内容

xiaoxiao
发表于 2021-3-7

有了实例基础,我们再聊引用就快的多了,我们通过保时捷对象可以让它跑起来,即调用run方法,那么是保时捷真正的在跑吗?广义上讲没错,因为是保时捷对象调用的run方法,狭义上讲不是,因为保时捷存储的只是指针,真正意义上的执行是找到这块内存所对应的地址去执行,因此在绝对意义上来说并不能全是保时捷在跑。脱离了保时捷我们能使汽车跑起来吗?是什么样的汽车跑起来?诸多不解的问题由之而来,你可能会说直接在堆中分配内存,然后我们直接操控堆中的内存就可以拜托对象了,遗憾的是我们并没有权限去直接操作堆内存中的数据,我们只能通过对象访问。

评论列表

  • 加载数据中...

编写评论内容

1008611
发表于 2021-3-7

与其说是对象,不如说是地址,我们通过地址去访问堆中实际的数据,我们可以将对象就视为堆中的内存,但是我们要知道它并不是,我们使用这个对象,对象帮我们转发给实际的堆内存空间,这就是引用,它类似于Windows桌面的快捷方式,快捷方式本身存储实际文件(夹)地址,我们点击快捷方式,快捷方式便帮我们转发至实际文件。

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content