java成员变量6_JAVA-初步认识-第六章-成员变量和局部变量的显示初始化

一.

04f4fe0d48b737778e2a0eb4b769cbf6.png

c149678917868497d58b03eb4f6ffe58.png

这就是说,描述类中出现了同名的成员变量和局部变量,接着在创建类中,对相同名称的变量进行赋值,最后输出,结果是怎样的?→这个变量的作用范围有关。

63347e3a7341d52dc464b7a9bda4594b.png

Dos的结果显示为10,我有些不明白,在变量创建类中,不是重新对实体对象进行了赋值么,虽然c调用了描述类中的函数,但本质不应该还是对象么?

解析:当调用方法的时候,方法需要进栈。方法一进栈的话,方法进栈后就分配一个变量num=10,是局部变量。当方法进行输出的时候,它所属的栈当中就有num,那就直接输出这个num。如果描述类的方法中没有num,在栈里面没找着,那就到堆里面去寻找num。如果堆里面也没有,那就直接报错。

核心:自己所属内存区域有东西,就不用出去找了。

上面的讲解说明一个问题,创建对象的类完全是依赖于描述对象的类。这里有一些疑问。对于创建对象的类在计算机中的过程,我们是了解的,但是描述事物的类在计算机中是怎样的情况,我们是不清楚的。

0ecda17b433780907529e1bffac01338.png

3a9ec9556a34ed11d3db8bcdbccb9322.png

我们现在思考一下这个程序在计算机中的流程。这仅是个人理解,不一定对。由于创建对象的类中有主函数,那么开始加载入内存的应该是CarDemo,创建对象的类。我们先不看c.num=4; c.color=”red”; 这两个语句。c这个变量是在栈中的,它是属于主函数的局部变量,当然也会叫做类类型引用变量。同时堆内存中也会依照描述类中的描述,在堆内存中开辟Car类型的类,将其堆内存的地址给c局部变量。c会根据地址去堆内存中搜寻数据。至于描述类中的void main函数的位置是在哪呢?功能函数不清楚存放在哪个内存中,当运行c.run()时,是在调用函数,函数中的执行语句是输出num和color变量。由于是c调用的,c引用的是堆内存中的Car(),Car()中有根据描述类加载的变量num和color。这时调用输出,自然是输出Car()中的数据。如果是run()方法中已经有定义的num,和方法要有的输出变量一致,那么c在调用方法时,c.run()就直接按照方法中的执行语句,没有输入,直接输出num=10。这样一来就和描述类中的属性没有任何关联性。→这里得出的结论就是,描述;类中的成员变量和函数是独立,有些时候,函数中的执行语句会和成员变量搭上关系。一定要通过调用方法来输出成员变量么?可以直接输出。

63698c40fd4f87541ecfa2ea10219dc4.png

二. 显示初始化

c69a3f78be4dd148878c8449e202634b.png

所有的小汽车都要是四个轮子,在描述类中直接固定了num=4,。这样一来,在对内存中开辟Car()空间,并建立num和color时,num的初始值就为4。之前的num=0叫做默认初始化值,这里的叫做显式初始化值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值