1. 程式人生 > >Java程式設計思想 第四版(手碼原書+菜鳥筆記) 第二章 2.1 用引用操縱物件

Java程式設計思想 第四版(手碼原書+菜鳥筆記) 第二章 2.1 用引用操縱物件

上一篇: 第二章 一切都是物件

文中筆記均為個人觀點,如有錯誤請大家不吝指出,謝謝!
原書為《java程式設計思想 第四版 中文版》


每種程式語言都有自己的操縱記憶體中元素的方式。有時候,程式設計師必須注意將要處理的資料是什麼型別。你是直接操縱元素,還是用某種基於特殊語法的間接表示(例如C和C++裡的指標)來操縱物件?
所有這一切在Java裡都得到了簡化。一切都被視為物件,因此可採用單一固定的語法。儘管一切都看作物件,但操縱的識別符號實際上是物件的一個“引用”(reference)1。可以將這一情形想象成勇遙控器(引用)來操縱電視機(物件)。只要握住這個遙控器,就能保持與電視機的連結。當有人想改變頻道或者減小音量時,實際操縱的是遙控器(引用),再由遙控器來調控電視機(物件)。如果想在房間裡四處走走,同時仍能調控電視機,那麼只需攜帶遙控器(引用)而不是電視機(物件)。

此外,即使沒有電視機,遙控器亦可獨立存在。也就是說,你擁有一個引用,並不一定需要有一個物件與它關聯。因此,如果想操縱一個詞或句子,則可以建立一個String引用:

String s

但這裡所建立的只是引用,並不是物件。如果此時向s傳送一個訊息,就會返回一個執行時錯誤。這是因為此時s實際上沒有與任何事物相關聯(即,沒有電視機)。因此,一個安全的做法是:建立一個引用的同事便進行初始化。

String s = "asdf";

但這裡用到了Java語言的一個特性:字串可以用帶引號的文字初始化。通常,必須對物件採用一種更通用的初始化方法。


文中會出現,如錯字、語句不通、理解偏差等問題,請及時聯絡或在下方評論指出。我也會盡量按照原書將內容呈獻給大家,謝謝!

下一篇: 2.1 必須由你建立所有物件


  1. 這可能會引起爭論。有人認為:“很明顯,它是一個指標。”但是這種說法是基於底層實現的某種假設。並且,Java中的引用,在語法上更接近C++的引用而不是指標。本書的第1版中,我選擇發明一個新術語“控制代碼(handle)”來表示這一概念,因此,Java的引用和C++的引用畢竟存在一些重大差異。我當時正在脫離C++陣營,而且也不想使那些已經習慣C++語言的程式設計師(我想他們將來會是最大的,熱衷於Java的群體)感到迷惑。在第2版中,我決定換回這個最為廣泛使用的術語——“引用”。並且,那些從C++陣營轉換過來的人們,理應更會處理引用,而不是僅僅理解“引用”這個術語,因而他們也會全心全意投入其中的。儘管如此,還是有人不同意用“引用”這個術語。我曾經讀到的一本書這樣說:“Java所支援的‘按址傳遞’是完全錯誤的”,因為Java物件識別符號(按那位作者所說)實際上是“物件引用”。並且他接著說任何事物都是“按值傳遞”的。也許有人會贊成這種精確卻讓人費解的解釋,但我認為我的這種方法可以簡化概念上的理解並且不會傷害到任何事物。(好了,那些語言專家可能會說我在撒謊,但我認為我只是提供了一個合適的抽象罷了。) ↩︎