这是我在看《java核心编程》教材进行java学习时碰到的一个疑惑的地方。就是书上写:通常,希望构造的对象可以多次使用,因此,需要将对象存放在一个变量中:Date deadline = new Date();
那么这个 deadline是一个对象变量,就不能将Date类的方法应用于这个对象变量上;但是 定义一个对象的时候 也是这样定义的: GreorianCalendar now = new GreorianCalendar();为什么 now 就是一个对象呢?对象和对象变量在定义的时候如何区分呢?
那么这个 deadline是一个对象变量,就不能将Date类的方法应用于这个对象变量上;但是 定义一个对象的时候 也是这样定义的: GreorianCalendar now = new GreorianCalendar();为什么 now 就是一个对象呢?对象和对象变量在定义的时候如何区分呢?
new后 产生一个对象 存放在 堆中
关于对象变量和对象,通常情况下我们不是分的这么清楚的。对象变量就是对象的引用,即存储对象的地址。
对象变量存在栈中,对象存在堆中
GreorianCalendar now = new GreorianCalendar();
new GreorianCalendar()为对象,存在堆中,
now 为对象变量,存在栈中,存储的内容为new GreorianCalendar()对象在堆中的存放地址,类似于C中的指针。
首先 GreorianCalendar now = new GreorianCalendar(); 他中的now不是对象,是对象的引用,存在栈中! 而new GreorianCalendar(); 用new创建的才是对象 存在堆中!对于对象变量没听说过 可能就是对象的引用吧!
书的问题?
Date deadline = new Date();
GreorianCalendar now = new GreorianCalendar();
这两个语句不都是对象的声明和新建吗,不都是一样的吗,又何来疑惑呢,要说不同也只有对象的类型不同,Date deadline = new Date(); 这句不就是声明一个Date类型的变量,变量名叫deadline吗,记住deadline是new Date()这个新建对象的引用,而deadlin所引用的对象类型是Date类型的,当然可以调用Date类的方法
同理GreorianCalendar now = new GreorianCalendar(); 也一样,区别的地方就是对象类型和变量对象的引用(变量名)不一样
说了这么多也不知道楼主你明白了没有,建议楼主去看看对象的基础语法部分,希望对你有帮助
代码我已经验证过了,自己敲到电脑里,确实都一样啊。
不是说 java核心技术是入门的圣经, 我来求证一下的, 基本上可以结帖了。
入门后看《Thinking in java》
希望对你有帮助,祝你早日成功
又或者是译者的水平有限。
总之你说的两种定义实例的方法没有区别。
可以给你一个这样的例子:
例1.Date deadline = new Date();
例2.new Thread(new Runnable{ public void run(){}}).start();
例1.在声明deadline以后,你需要多次使用它。可以用deadline.xxx()的形式来调用它的方法。
例2.你只需要使用一次,故完全不用记住它是谁,让它干完它要干的活就可以滚蛋了。
Date deadline = new Date();
deadline这个引用,引用了一个Date类型的对象。
这个对象由new Data()时创建。