这里有两个类
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了一个对象,这又应该怎么解释呢?还是我对实例化的理解本身就出了问题?新手,请指点,谢谢!!
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。
非常感谢,解释很详细。看了你的答案后,自己在网上也搜了一些堆内存栈内存的知识,算是对实例化有新的理解了吧。不过你的回答中,等号右边“让jvm创建一个driver类型的变量”,这里应该是对象不是变量吧?
@suitcase: 能说下你对于变量和对象的理解吗?
@赵_腾飞: 打个比喻,对象是个人,变量是他的属性例如身高体重,这是最简单的理解了。但是这应该不够严谨,我在学习过程中经常会发现这种理解似是而非。可是我也不能比较好的把握对象和变量的关系。有人说java一切皆对象,而java又是面向对象编程的,那能不能理解为在java程序中所有的事情都只是对象做的事情,而变量只是提供了我们操纵对象的一个工具罢了?正面回答一下你的问题,看到很多资料都说堆内存用来存放由new创建的对象和数组,所以我觉得是对象不是变量。
@suitcase: 严格点是叫对象,我的认为是,比如 一个人 身高175cm,那么 “175cm” 是对象, “身高” 叫做 变量
第二句的意思是new了一个Score(5)的对象赋值给defender.score这个变量。
defender.score = new Score(5); 等同于 Score tempScore= new Score(5); defender.score=tempScore
构造函数也是函数,允许传值进去。
在这里理解为初始化
这是关联类吧。初始化都靠构造函数构造