Re: [問題] 有關建構子的問題....
※ 引述《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
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章