java 一切皆物件
Java語言是面向物件的程式語言,當我們用Java做實際開發時,我們必須將思想轉化到面向物件的世界中。這是作為一個Java程式設計師的基本功,如果你兼備使用這種語言的一種能力,會使你學起來更加簡單。我們在專案開發中,經常做到會new物件、會使用物件已經足夠了。想知道java物件在程式內怎麼儲存怎麼使用的嗎?今天的內容深入剖析java物件。
一、用引用操縱物件
什麼是引用:
在java程式中,儘管我們一切都將看作為物件,但實際上操作物件的識別符號實際上是物件的一個“引用(referen)”。
為了讀者方便理解,我們可以將操縱物件的識別符號想象成電視機的遙控器(引用),電視機為物件。只要握住遙控器,我們就可以保持與電視機的連線。當我們減小電視機的音量時,我們的實際操控是遙控器(引用),再由遙控器操縱電視機(物件)。以上形象的比喻就是我們在java中使用物件時,不是直接對物件進行操作,而是通過引用進而對物件的控制操作。
即使我們沒有電視機,遙控器也可以獨立的存在。也就是說,我們可以單獨的擁有一個引用,並不一定需要一個物件去關聯。下面舉個小例子詳細說明,我們可以建立一個String的引用。
String s;
這裡所建立的只是引用,並不是物件。如果此時此刻對s進行輸出使用,執行時就會返回一個錯誤。因為s實際上沒有與任何的事物關聯。因此,為了安全起見,我們通常在專案中建立一個引用通常做初始化處理:String = “abc”;
這裡用到的是字串帶文字的初始化,通常還有另外一種更通用的方法。
二、物件的建立與儲存
我們一旦建立了引用就必須關聯一個物件,通常用new關鍵字來實現。new關鍵字的意思是“給我一個新物件”,所以另一種初始化字串的方式為:
String s = new String(“abc”);
除此之外,java中還有很多資料型別,以上只是舉個小例子。
三、物件儲存到了什麼地方?
很多人對會在程式中很輕鬆的new出一個物件,但是物件到底儲存到什麼地方呢?特別是記憶體會發生什麼變化呢?下邊的講解會對你有很大的幫助。
- 暫存器。這是這是最快的儲存區,因為這是位於不同於其他的儲存位置—處理器內部。但是暫存器的數量有限,所以暫存器根據需求進行分配。
- 棧堆。位於RAM(隨機訪問儲存器)中,通過棧堆指標從處理器那獲取直接支援。如果棧堆指標向下移動,則重新分配新的記憶體。若指標向上移動,則釋放記憶體空間。某些的java資料就儲存到棧堆中,比如上面講到的遙控器(引用)就儲存到該區域,而物件並不儲存到其中。
- 堆。一種通用的記憶體池,(位於RAM)中,用於存放java所有的物件。堆不同於棧堆的好處就是:編譯器不知道儲存到堆裡的資料存活多長時間。因此,在堆裡分配儲存有很大的靈活性。當需要一個物件時,只需要new寫一行程式碼,當執行到該程式碼時,會自動在堆裡進行儲存分配。堆的分配清理空間比棧堆的花費的時間要長。
- 常量儲存。常量值通常直接存放到程式的內部,這樣做是安全的,因為他們的值永遠不會被改變。在嵌入式系統開發中,常量本身會和其他部分分隔開,在這種情況下,我們可以選擇將其存放到ROM(只讀儲存器)中。
5. 非RAM儲存。如果資料完全存活於程式之外,那麼它可以不受程式任何控制,在程式沒有執行時也可以存在。兩個基本 的例子就是流物件和持久化物件。在流物件中,資料轉化為位元組流,通常被髮送到另一個機器。在“持久化物件”中,對 象被存放於磁碟上,因此即使程式終止,他們仍可以保持原有的狀態。這種儲存方式的技巧在於:把物件轉化成可以存 放在其他媒體的事物,在需要時,再恢復成常規,基於RAM的物件