首页 新闻 会员 周边

关于Java实例化的一些疑问

0
悬赏园豆:5 [已解决问题] 解决于 2017-08-24 12:36

这里有两个类

1 class Driver
2 {
3     //构造方法
4     public Driver(){}
5 
6     //成员变量
7     Score score;
8 }

1 class Score
2 {
3     int score;
4     
5     public Score(int score)
6     {
7         this.score=score;
8     }
9 }

对于实例化对象Driver defender =new Driver();等号左边是一个对象,等号右边new了一个对象,整句就是new了一个叫做defender的对象。这是我的理解。

但是对于defender.score = new Score(5);这一句代码,等号左边是一个变量,等号右边new了一个对象,这又应该怎么解释呢?还是我对实例化的理解本身就出了问题?新手,请指点,谢谢!!

suitcase的主页 suitcase | 菜鸟二级 | 园豆:208
提问于:2017-08-23 23:44
< >
分享
最佳答案
1

Driver defender =new Driver();

等号左边 Driver defender 是告诉jvm,我现在需要一个driver类型的变量,该变量的名字叫defender。(jvm会在栈中创建一个变量,此变量是指向Driver 类型的实例的引用)

等号右边 new Driver(),告诉jvm帮我创建一个Driver类型的变量,此变量实际会在堆内存中新增,

整句代码的意思就是 让jvm在堆内存中初始化一个Driver的实例并将此实例的引用传给栈内存中的defender 变量。

defender.score = new Score(5)

这句和上边一样,jvm会先初始化一个Source类型的实例,并将此实例的引用赋值给defender的属性score。

收获园豆:5
赵_腾飞 | 菜鸟二级 |园豆:218 | 2017-08-24 09:29

非常感谢,解释很详细。看了你的答案后,自己在网上也搜了一些堆内存栈内存的知识,算是对实例化有新的理解了吧。不过你的回答中,等号右边“让jvm创建一个driver类型的变量”,这里应该是对象不是变量吧?

suitcase | 园豆:208 (菜鸟二级) | 2017-08-24 12:26

@suitcase: 能说下你对于变量和对象的理解吗?

赵_腾飞 | 园豆:218 (菜鸟二级) | 2017-08-24 15:26

@赵_腾飞: 打个比喻,对象是个人,变量是他的属性例如身高体重,这是最简单的理解了。但是这应该不够严谨,我在学习过程中经常会发现这种理解似是而非。可是我也不能比较好的把握对象和变量的关系。有人说java一切皆对象,而java又是面向对象编程的,那能不能理解为在java程序中所有的事情都只是对象做的事情,而变量只是提供了我们操纵对象的一个工具罢了?正面回答一下你的问题,看到很多资料都说堆内存用来存放由new创建的对象和数组,所以我觉得是对象不是变量。

suitcase | 园豆:208 (菜鸟二级) | 2017-08-24 19:10

@suitcase: 严格点是叫对象,我的认为是,比如 一个人 身高175cm,那么 “175cm” 是对象, “身高” 叫做 变量

赵_腾飞 | 园豆:218 (菜鸟二级) | 2017-08-24 20:45
其他回答(3)
0

第二句的意思是new了一个Score(5)的对象赋值给defender.score这个变量。

5207 | 园豆:9 (初学一级) | 2017-08-24 08:45
0
defender.score = new Score(5);
等同于
Score tempScore= new Score(5);
defender.score=tempScore

构造函数也是函数,允许传值进去。

在这里理解为初始化

hahanonym | 园豆:1460 (小虾三级) | 2017-08-24 09:01
0

这是关联类吧。初始化都靠构造函数构造

fcyh | 园豆:568 (小虾三级) | 2017-08-25 15:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册