作者PsMonkey (痞子军团团长)
站内java
标题Re: [问题] 有关建构子的问题....
时间Fri Mar 3 12:08:48 2006
※ 引述《TonyQ (骨头)》之铭言:
: ※ 引述《tonyrao (tonyrao)》之铭言:
: : 小弟有个问题想问...何为建构子...建构子有什麽用途...??
: : 小弟看了Thinking in JAVA这本书有提到最根本的解释...
: : 每个class都可以透过建构子的行为达到初始化的动作...
: : 小弟的问题是...为何要有这样的动作 以及如果没有建构子 会发生什麽事情??
: : 小弟是JAVA新手.....谢谢回答^^
: 简单讲讲就好 ~"~
: 所有的东西都有一个开始,才会有结束。
: 人要有出生才会有死亡,物件也要有宣告才会有GC。
: 从这个角度来看,建构子就是让一个物件出生的过程。
: 想想看,会执行建构子不是只有在new它的时候? :)
: 如果缺少建构子,就有可能因为没有变数的起始。
: 而产生nullpointerexpcetion
注意大小写阿... 你这个
猪骨
头
: 想想如果你没有new物件就使用会发生甚麽事情。:)
: 当然,变数的初始化并不限定在constructer(建构子)上作,
: 只是那就不在这里的讨论范围了,那是逆其道而行的作法。不值得推崇..
你这篇的 "变数",应该改成该物件下的 field(attribute)比较好
不然,容易让初学者混淆 @___@
为了服务新手,举个例子...
我宣告一个 Foo 的物件,基础写法是
Foo aVariable = new Foo();
如果你只写
Foo aVariable;
那麽,要嘛被警告没有初始化(method 内的区域变数)
要嘛就是执行时产生 nullPointerException(物件的 field)
所以,你在 new Foo(); 的时候
基本上你不知道 Foo 里头有没有 "重新" 写 constructer
(别忘了每个物件的老祖宗 java.lang.Object)
好,所以,如果你的 Foo 类别长的像这样
class Foo{
//懒惰点用 public... 可以少写几行程式码
public Object field;
public int primitive;
}
那麽,你 Foo aVariable = new Foo();
然後又 System.out.println(aVariable.primitive); 会得到 0
但是,如果改 println(aVariable.field); 就会出现 TonyQ 讲的内容
然後,你接着回去看 TonyQ 的文章内容...
以上...
====
不怎麽情愿地 local save
--
侃侃长论鲜窒碍 网站:
http://www.psmonkey.idv.tw
众目睽睽无心颤 个人版:telnet://legend.twbbs.org
茕居少聊常人事
杀头容易告白难 欢迎参观 Java 版(@ptt.cc) \囧/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.204.16.17