这是我在看《java核心编程》教材进行java学习时碰到的一个疑惑的地方。就是书上写:通常,希望构造的对象可以多次使用,因此,需要将对象存放在一个变量中:Date deadline = new Date();
那么这个   deadline是一个对象变量,就不能将Date类的方法应用于这个对象变量上;但是 定义一个对象的时候  也是这样定义的:  GreorianCalendar now = new GreorianCalendar();为什么 now 就是一个对象呢?对象和对象变量在定义的时候如何区分呢?

解决方案 »

  1.   

    deadline 也就是一个对象而已 跟now一样哇  叫做instance什么对象变量  忽悠人的东西  翻译得跟屎一样哇
      

  2.   

    需要将对象存放在一个变量中  ->Date 类型的对象deadline是一个对象变量  -->这是一个表示对象的变量定义一个对象的时候 -->定义一个类型的对象
      

  3.   

     变量名 存在 栈中
    new后 产生一个对象 存放在 堆中
      

  4.   

    以上是LZ的误解,now 也是对象变量。
    关于对象变量和对象,通常情况下我们不是分的这么清楚的。对象变量就是对象的引用,即存储对象的地址。
    对象变量存在栈中,对象存在堆中
    GreorianCalendar now = new GreorianCalendar(); 
    new GreorianCalendar()为对象,存在堆中,
    now 为对象变量,存在栈中,存储的内容为new GreorianCalendar()对象在堆中的存放地址,类似于C中的指针。
      

  5.   

    基本上大多数reference和primitive都是存在栈上的. 对象都是在堆上生成. 
      

  6.   

    JAVA核心技术贼垃圾  ,里面有很多错误的解释!  要看就看JAVA编程思想   讲的特清楚;
    首先 GreorianCalendar now = new GreorianCalendar(); 他中的now不是对象,是对象的引用,存在栈中! 而new GreorianCalendar(); 用new创建的才是对象  存在堆中!对于对象变量没听说过   可能就是对象的引用吧!
      

  7.   

    那为什么 书上说  deadline不能用方法,  now却可以呢?
    书的问题?
      

  8.   

    看了楼主说的话我可以判断你对对象还真的一点不了解
    Date deadline = new Date(); 
    GreorianCalendar now = new GreorianCalendar(); 
    这两个语句不都是对象的声明和新建吗,不都是一样的吗,又何来疑惑呢,要说不同也只有对象的类型不同,Date deadline = new Date(); 这句不就是声明一个Date类型的变量,变量名叫deadline吗,记住deadline是new Date()这个新建对象的引用,而deadlin所引用的对象类型是Date类型的,当然可以调用Date类的方法
    同理GreorianCalendar now = new GreorianCalendar(); 也一样,区别的地方就是对象类型和变量对象的引用(变量名)不一样
    说了这么多也不知道楼主你明白了没有,建议楼主去看看对象的基础语法部分,希望对你有帮助
      

  9.   

    谁说deadline不能用方法,稍微有点常识的人都能问死他,你要明白deadline和now只是个变量的名字黑了,再你声明了对象和new了对象后,这个变量名字才有意义,现在他就是一个类型的变量了,而且是new出来的对象的引用,这个名字可以调用声明这个名字的类的所有方法,楼主你别再问了,问多了还是这几句话,不如去找对象基础语法的书看看然后自己敲敲代码验证看看,说多了也没用
      

  10.   

    楼上的大哥,  刚学java,也是第一次学面向对象设计语言,以前之学了C语言。对对象理解还是不太透彻。
    代码我已经验证过了,自己敲到电脑里,确实都一样啊。
    不是说  java核心技术是入门的圣经, 我来求证一下的,  基本上可以结帖了。
      

  11.   

    建议楼主刚开始入门看《java基础编程》
    入门后看《Thinking in java》
    希望对你有帮助,祝你早日成功
      

  12.   

    把我上面推荐给你看的两本吃透了,然后多找几个项目实战下,就可以说对JAVA了解了,再有时间学的话就多看看源码
      

  13.   

    可能是书上举的例子没有很好的表达作者的意思。
    又或者是译者的水平有限。
    总之你说的两种定义实例的方法没有区别。
    可以给你一个这样的例子:
    例1.Date deadline = new Date(); 
    例2.new Thread(new Runnable{ public void run(){}}).start();
    例1.在声明deadline以后,你需要多次使用它。可以用deadline.xxx()的形式来调用它的方法。
    例2.你只需要使用一次,故完全不用记住它是谁,让它干完它要干的活就可以滚蛋了。
      

  14.   

    用变量这个词不好,应该用"引用"
    Date deadline = new Date();
    deadline这个引用,引用了一个Date类型的对象。
    这个对象由new Data()时创建。