总感觉这里理解起来挺不可思议的,这算是“递归”吗?

总感觉这里理解起来挺不可思议的,这算是“递归”吗?

不是计算机专业的,希望可以说明一下为什么可以在一个类的内部定义一个方法调用它自己,这感觉就像是一个人抓着自己的头发离开了地球!或者像是一个人吃东西,胃把这个人给吞了。反正觉得非常地匪夷所思!!是计算机在运行一个类里的方法时,把这个方法从类中剥离出来了吗?开了新的内存??

https://img1.sycdn.imooc.com//climg/6163e64a0985a5c915001248.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小脸 2021-10-11 17:14:12

同学你好,

1、不是递归,递归是指一个方法直接或间接调用自身的行为

2、上述代码是通过主方法(main方法)进行的代码执行

扩:main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法

这里在主方法中创建Cat这个对象,然后通过对象名(cat).属性名以及对象名.方法名()来调用才可以,例如:

你知道书籍是放置在图书馆的,这个时候就需要先去图书馆(理解为创建Cat对象),然后到了图书馆找这个馆里有的书籍(理解为call()方法),若馆里没有这个本书存在,那么我们就找不到(理解为不存在的方法是不会被其所调用的)

注:同学基础部分学习的不够扎实哟~建议同学回顾这部分的课程,多看多练~

祝学习愉快~


  • 提问者 宝慕林5570576 #1

    感谢耐心的解答,但是答非所问了,可能是我问得太抽象了吧。我问的其实是那个run方法。那个run方法的参数传了包裹它的类。但是这个run方法是属于cat类内部的东西啊!可不就像是吃东西胃把自己吃了吗?

    如果是按图书馆类比的话,就相当于图书馆里面的书把整个存法它的图书馆降维之后放进书里了。。。。。

    2021-10-13 18:33:48
  • 好帮手慕小脸 回复 提问者 宝慕林5570576 #2

    同学你好,

    1、是的,老师上述理解的内容以为是同学对测试类中代码有疑惑~

    2、run()方法在是Cat类中被定义的,但是run()方法是被同类中call()方法所调用,并不能将其理解为吃东西胃把自己吃了,这里同学可以理解为,类中方法之间的调用,而不是类与方法之间的调用

    祝学习愉快~

    2021-10-14 11:05:36
  • 提问者 宝慕林5570576 回复 好帮手慕小脸 #3

    方法之间的调用我是理解的!我疑惑的是:类里面的方法,传递并使用了它的“母体”(也就是包裹它的类),这件事我觉得有点神奇。回答了两次都答非所问,很抱歉可能是我表达能力的问题,没问明白。

    不过这个问题,我似乎能理解了,我现在的理解是这样的:

    cat这个类在程序没运行时是在硬盘上存着的,在程序运行时,这个cat类通过main方法被实例化了,也就在内存中开了一块空间,因为实例化的类不是基本数据类型所以它被引用的时候传递的是存放它的内存地址,也就是程序在执行run方法的时候,是根据传递的内存地址找到的存放在那块区域的name字段的值。

    (就有点类似像:Tony是个理发师,他会理发,他给自己理发。的这种感觉)

    这个理解对吗?

    2021-10-15 10:23:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师