A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊攀 初级黑马   /  2013-3-28 19:38  /  1749 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 熊攀 于 2013-3-28 22:02 编辑

class car
{
   String name="无名汽车";
}

class Driver
{  
   String name;
   int color;
   Car car;                                          1
}  
public class person
{  public static void main(String [] args)
   {   Driver driver=new Driver();                   2
       driver.car=new Car();                           3
       s.o.p(driver.car.name);
   }
}

---------------------------------------------------
我想问下,3这里, "driver.car "   这里  driver.car是给这个Driver类的对象的car赋值,这里面的car是对象drvier的属性, 我就是闹不明白了, driver.car=new car(); 这句话为什么可以成立,  第一,我理解 driver.car 就是对象里面的car的值; 第二,就算, car=new car();  也只是类里面属性car才能实例创造对象,我觉得对象driver里面的car 并不可以这样写吧, 好吧,不知道写的大家看的懂不,精简就是 diver.car=new car();  不懂这个是什么意思.
前者是个值,后者是new对象。
坐等楼下解答.

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-28 20:46

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
首先你要明白,类Driver里面的car是一个变量,还是引用类型的,这个类型还是Car类型。然后你任何一个实例化的对象,如你这个driver,都可以点出来,如driver.car。driver.car和任何一个引用变量没什么不同,由于是一个引用类型,所以使用前必须实例化,你这个driver.car的类型是Car,所以要这样driver.car=new car(); 你把driver.car当成一个普通的引用的类型就可以了,前面多个driver只不过是因为你把这个car交给driver管理了,但car依然还是car,本质没有变。你要理解为什么要用类,为什么有类这个东西,只不过方便我们管理变量和方法罢了,如果要控制car这个变量的使用范围,所以要使用不同修饰符,好好理解类的概念。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
driver.car=new car();这句话必须可以成立,你实例化Driver类,而你的driver.car=null;如果 driver.car=new Car(); 你不写的话,你认为你的sor()打印的出来是什么呢?试一下。“前者是个值,后者是new对象。”前者不是值,如果前者是值了那么 你能解释一下  int a  = 4; a是什么吗??

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
其实你已经说出来了啊,driver.car和Car car其实就是相等的,你用driver.car=new Car();就相当于是Car car=new car(); ,这是没问题的。
其实,在你创建Driver driver=new Driver();的时候,是将这个Driver类进行了加载,这时候,已经在栈内存中存在了Driver中的三个引用型变量;当调用driver.car的时候,就是再使用Driver中的car这个属性,那么你可以将new Car()赋值给这个属性,即这个变量。

看图吧:

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马