目錄
寫在前面
卡片01、用引用操作對象
卡片02、程式運行時,記憶體是怎麼分配的呢?
首頁 Java java教程 Java程式設計思想:用引用操作物件、內存在程式運行時的分配方式

Java程式設計思想:用引用操作物件、內存在程式運行時的分配方式

Aug 03, 2018 pm 02:56 PM
java 程式設計思想

寫在前面

首先我想說的是Java程式設計想法-知識卡 將會是一系列文章,文章的內容是我閱讀《 Java程式設計思想》這本書的心得體會,那我為什麼要寫這一系列的文章呢?原因有幾個面向:

  • 重拾Java,因為工作專案的特殊性,我已經一年多沒使用Java語言了。

  • 想利用自己的空閒時間寫點東西幫助那些需要幫助的人。

  • 將整本書的知識碎片化,充分利用自己零碎的時間。

一般情況下,最新文章會在我的微信公眾號:Java程式設計社群 更新,有興趣的話呢,可以加加關注。
好了,我們開始進入正題:

卡片01、用引用操作對象

學Java的人都知道,Java是一門物件導向的語言(OOP),儘管Java是基於C 的,但相較之下,Java是一種更「純粹」的物件導向程式設計語言。正所謂“萬物皆物件”,Java語言假設我們只進行物件導向的程式設計,也就是說,我們開始使用Java進行設計之前必須轉換思想,將我們的注意力轉換到物件上來 。這個是我們使用Java語言的基本功能。

每種程式語言都有自己的資料處理方式。有些時候,程式設計師必須隨時留意準備處理的是什麼類型,是直接操縱元素,還是用某種基於特殊語法的間接表示來操縱物件?在C和C 裡我們使用的是指標。在Java裡這一切都得到了簡化,因為“萬物皆對象”,一切都被視為物件。 儘管一切都看作對象,但操縱的標識符實際上是對象的一個引用。這裡透過一個生活中的例子來幫助理解。 生活中我們使用遙控器(引用)來操縱電視機(物件)。當要改變電視機的頻道或音量時,實際操縱的是遙控器(引用),再由遙控器來控制電視(物件)。如果想在房間裡四處走走,同時又能操縱電視機,那麼只需攜帶遙控器(引用)而不是電視機(物件)
我們來建立一個String引用:

String str;
登入後複製

這裡的str只是一個引用,並非對象,引用是可以獨立存在的,不一定需要一個物件與之關聯,就如即使沒有電視機,遙控器也可以獨立存在。但是上面這種創建並不安全,安全的做法是,我們創建引用的同時進行初始化。例如:

String str = "hello";
登入後複製

卡片02、程式運行時,記憶體是怎麼分配的呢?

程式在運作時,有五個不同的地方可以儲存資料:

  • #1、暫存器:這是最快的儲存區,因為他位於不同於其他儲存區的地方--處理器內部。但是寄存器的數量及其有限,所以寄存器根據需求進行分配,你不能直接控制,也不能在程式中感覺到寄存器存在的任何跡象。

  • 2、堆疊位於通用RAM(隨機存取記憶體)中,但透過堆疊指標可以從處理器那裡獲得直接支持。堆疊指標若向下移動,則分配新的記憶體;若向上移動,則釋放那些記憶體。這是一種快速有效的分配儲存的方法,僅次於寄存器。 在建立程式時,Java系統必須知道儲存在堆疊內所有項目的確切宣告週期,以便上下移動堆疊指標。這項限制限制了程式的彈性,所以雖然有些Java資料儲存在堆疊中--特別是物件引用,但是Java物件並不會儲存其中。

  • 3、一個通用的記憶體池(也位於RAM區),用來存放所有的Java物件。堆不同於堆疊的好處是:編譯器不需要知道儲存的資料在堆裡存活多久。因此,在堆里分配有很大的靈活性。當需要一個物件時,只要用new寫一行簡單的程式碼,執行這行程式碼時,就會自動在堆裡進行儲存分配。當然,為這種靈活性必須付出相應的代價:用堆進行存儲分配和清理可能比用堆疊進行存儲分配需要更多的時間

  • ##4、

    常數儲存常數值通常直接存放在程式碼內部,這樣做是安全的,因為他們永遠不會被改變。有時在嵌入式系統中,常數會和其他部分隔離開,所以,在這種情況下,可以選擇將其存放在ROM(只讀記憶體)中。

  • 5、非RAM儲存:如果資料完全存活於程式之外,那麼他可以不受程式的任何限制,在程式沒有運行時也可以存在。其中兩個基本的例子是:流對象和持久化對象,在“流對象”中,對象轉化成字節流,通常被發送給另一台機器,在“持久化對象”中,物件被存放在磁碟上,因此即使程式終止,他們仍可以保持自己的狀態。這種儲存方式的技巧在於:把物件轉化成可以存放在其他媒介上的事物,在需要時,可以恢復成常規的、基於RAM的物件。 Java提供了對輕量級持久化的支持,而諸如JDBC和hibernate這樣的機制提供了更複雜的對在資料庫中儲存和讀取物件資訊的支援。

相關文章:

Java的程式設計思想總結

對Java的面對對象程式設計中物件與引用以及內部類別的理解

#

以上是Java程式設計思想:用引用操作物件、內存在程式運行時的分配方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

如何在Spring Tool Suite中運行第一個春季啟動應用程序? 如何在Spring Tool Suite中運行第一個春季啟動應用程序? Feb 07, 2025 pm 12:11 PM

Spring Boot簡化了可靠,可擴展和生產就緒的Java應用的創建,從而徹底改變了Java開發。 它的“慣例慣例”方法(春季生態系統固有的慣例),最小化手動設置

See all articles