首先我想說的是Java程式設計想法-知識卡 將會是一系列文章,文章的內容是我閱讀《 Java程式設計思想》這本書的心得體會,那我為什麼要寫這一系列的文章呢?原因有幾個面向:
重拾Java,因為工作專案的特殊性,我已經一年多沒使用Java語言了。
想利用自己的空閒時間寫點東西幫助那些需要幫助的人。
將整本書的知識碎片化,充分利用自己零碎的時間。
一般情況下,最新文章會在我的微信公眾號:Java程式設計社群 更新,有興趣的話呢,可以加加關注。
好了,我們開始進入正題:
學Java的人都知道,Java是一門物件導向的語言(OOP),儘管Java是基於C 的,但相較之下,Java是一種更「純粹」的物件導向程式設計語言。正所謂“萬物皆物件”,Java語言假設我們只進行物件導向的程式設計,也就是說,我們開始使用Java進行設計之前必須轉換思想,將我們的注意力轉換到物件上來 。這個是我們使用Java語言的基本功能。
每種程式語言都有自己的資料處理方式。有些時候,程式設計師必須隨時留意準備處理的是什麼類型,是直接操縱元素,還是用某種基於特殊語法的間接表示來操縱物件?在C和C 裡我們使用的是指標。在Java裡這一切都得到了簡化,因為“萬物皆對象”,一切都被視為物件。 儘管一切都看作對象,但操縱的標識符實際上是對象的一個引用。這裡透過一個生活中的例子來幫助理解。 生活中我們使用遙控器(引用)來操縱電視機(物件)。當要改變電視機的頻道或音量時,實際操縱的是遙控器(引用),再由遙控器來控制電視(物件)。如果想在房間裡四處走走,同時又能操縱電視機,那麼只需攜帶遙控器(引用)而不是電視機(物件)。
我們來建立一個String引用:
String str;
這裡的str只是一個引用,並非對象,引用是可以獨立存在的,不一定需要一個物件與之關聯,就如即使沒有電視機,遙控器也可以獨立存在。但是上面這種創建並不安全,安全的做法是,我們創建引用的同時進行初始化。例如:
String str = "hello";
程式在運作時,有五個不同的地方可以儲存資料:
#1、暫存器:這是最快的儲存區,因為他位於不同於其他儲存區的地方--處理器內部。但是寄存器的數量及其有限,所以寄存器根據需求進行分配,你不能直接控制,也不能在程式中感覺到寄存器存在的任何跡象。
2、堆疊:位於通用RAM(隨機存取記憶體)中,但透過堆疊指標可以從處理器那裡獲得直接支持。堆疊指標若向下移動,則分配新的記憶體;若向上移動,則釋放那些記憶體。這是一種快速有效的分配儲存的方法,僅次於寄存器。 在建立程式時,Java系統必須知道儲存在堆疊內所有項目的確切宣告週期,以便上下移動堆疊指標。這項限制限制了程式的彈性,所以雖然有些Java資料儲存在堆疊中--特別是物件引用,但是Java物件並不會儲存其中。
3、堆:一個通用的記憶體池(也位於RAM區),用來存放所有的Java物件。堆不同於堆疊的好處是:編譯器不需要知道儲存的資料在堆裡存活多久。因此,在堆里分配有很大的靈活性。當需要一個物件時,只要用new寫一行簡單的程式碼,執行這行程式碼時,就會自動在堆裡進行儲存分配。當然,為這種靈活性必須付出相應的代價:用堆進行存儲分配和清理可能比用堆疊進行存儲分配需要更多的時間
常數儲存:常數值通常直接存放在程式碼內部,這樣做是安全的,因為他們永遠不會被改變。有時在嵌入式系統中,常數會和其他部分隔離開,所以,在這種情況下,可以選擇將其存放在ROM(只讀記憶體)中。
5、非RAM儲存:如果資料完全存活於程式之外,那麼他可以不受程式的任何限制,在程式沒有運行時也可以存在。其中兩個基本的例子是:流對象和持久化對象,在“流對象”中,對象轉化成字節流,通常被發送給另一台機器,在“持久化對象”中,物件被存放在磁碟上,因此即使程式終止,他們仍可以保持自己的狀態。這種儲存方式的技巧在於:把物件轉化成可以存放在其他媒介上的事物,在需要時,可以恢復成常規的、基於RAM的物件。 Java提供了對輕量級持久化的支持,而諸如JDBC和hibernate這樣的機制提供了更複雜的對在資料庫中儲存和讀取物件資訊的支援。
相關文章:
以上是Java程式設計思想:用引用操作物件、內存在程式運行時的分配方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!