JAVA_SE基礎——24.面向對象的內存分析

黑馬程序猿入學blog ...


接著上一章的代碼:

//車類
class Car{//事物的公共屬性使用成員變量描寫敘述。

String name; //名字的屬性 String color; //顏色屬性 int wheel; //輪子數 //事物的公共行為使用函數描寫敘述。 public void run(){ System.out.println(name+"飛快的跑起來啦..."); } } class Demo1{ public static void main(String[] args) { //使用了Car類聲明了一c變量, c變量指向了一個車對象。

Car c = new Car(); //設置車對象的屬性值。 c.name = "BMW"; c.color = "白色"; c.wheel = 4; //訪問車對象的屬性值 System.out.println("名字:"+ c.name+" 顏色:"+ c.color+" 輪子數:"+c.wheel); c.run(); } }

結果是:

名字:BMW 顏色:白色 輪子數:4

BMW飛快的跑起來了



上面代碼在內存中是怎么執行的呢?

以下我來給大家分析下:


c是局部變量

1.先聲明了c變量 分配在棧內存

2.new Car ?在堆內存創建了一個車對象 ?看看Car有那些成員屬性,然后再給對象分配初始值,為name=null。color=null。wheel=0? ? ?(成員一旦創建。對象的成員變量也會立即分配默認的初始值) ?然后把地址0x97賦給了c ? ? ? c就指向了車的這個對象。

3.

c.name ?就是c拿著地址找到車的對象 ? 然后把name改成BMW. ? ? ??

c.color 就是c拿著地址找到車的對象 ? 然后把color?改成白色.

c.wheel?就是c拿著地址找到車的對象 ? 然后把wheel改成4.



以下再看個樣例:

//車類
class Car{//事物的公共屬性使用成員變量描寫敘述。String	name; //名字的屬性String	color; //顏色屬性int wheel;	//輪子數//事物的公共行為使用函數描寫敘述。

public void run(){ System.out.println(name+"飛快的跑起來啦..."); } } class Demo1{ public static void main(String[] args) { Car c1 = new Car(); Car c2 = new Car(); c1.name = "寶馬"; c2.name = "大眾"; System.out.println("名字:"+ c1.name); } }

結果:名字:寶馬

 

看下圖解釋:

1.先聲明了c1變量 分配在棧內存

2.new Car ?在堆內存創建了一個車對象 ?看看Car有那些成員屬性,然后再給對象分配初始值,為name=null,color=null。wheel=0 ? ?(成員一旦創建。對象的成員變量也會立即分配默認的初始值) ?然后把地址0x97賦給了c1 ? ? ? c1就指向了車的這個對象。

3.再聲明了c2變量 分配在棧內存

4.再new 一個 Car ?在堆內存再創建了一個車對象 ?看看Car有那些成員屬性。然后再給對象分配初始值。為name=null,color=null,wheel=0 ? ?(成員一旦創建,對象的成員變量也會立即分配默認的初始值) ?然后把地址0x67賦給了c2 ? ? ? c2就指向了車的這個對象。

5. ? ? ? ? ? c1.name ?就是c1拿著地址找到車的對象 ? 然后把name改成" 寶馬 " ? ?

6. ? ? ? ? ? c2.name ?就是c2拿著地址找到車的對象 ? 然后把name改成“ 大眾 ”

7. ? ? ? ? ? ?最后輸出c1.name ? ? ? ? ? ?c1就拿著地址找到相應的對象 ?輸出了那個對象的name ?

所以結果是:寶馬

以下再把這個樣例改下:

//車類
class Car{//事物的公共屬性使用成員變量描寫敘述。String	name; //名字的屬性String	color; //顏色屬性int wheel;	//輪子數//事物的公共行為使用函數描寫敘述。

public void run(){ System.out.println(name+"飛快的跑起來啦..."); } } class Demo1{ public static void main(String[] args){ Car c1 = new Car(); c1.name = "寶馬"; Car c2 = new Car(); c2.name = "大眾"; c1 = c2; System.out.println("名字:"+ c1.name); } }

結果:大眾

下圖解釋:


1.先聲明了c1變量 分配在棧內存

2.new Car ?在堆內存創建了一個車對象 ?看看Car有那些成員屬性。然后再給對象分配初始值,為name=null,color=null,wheel=0 ? ?(成員一旦創建,對象的成員變量也會立即分配默認的初始值) ?然后把地址0x97賦給了c1 ? ? ? c1就指向了車的這個對象。

3. ? ? ? ? ? c1.name ?就是c1拿著地址找到車的對象 ? 然后把name改成" 寶馬 " ?

4.再聲明了c2變量 分配在棧內存??

5.再new 一個 Car ?在堆內存再創建了一個車對象 ?看看Car有那些成員屬性,然后再給對象分配初始值。為name=null,color=null,wheel=0 ? ?(成員一旦創建。對象的成員變量也會立即分配默認的初始值) ?然后把地址0x67賦給了c2 ? ? ? c2就指向了車的這個對象。

6. ? ? ? ? ? c2.name ?就是c2拿著地址找到車的對象 ? 然后把name改成“ 大眾 ”

7.把c2的持有地址賦給了c1 ? ? ? c1的地址原來是0x97 改為 0x67 ? ?

8. ?最后輸出c1.name ? ? ? ??c1拿著改后的地址去找地址為0x67的對象 ? ? ? ?輸出為0x67地址的對象中的屬性name.

所以結果為;大眾

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280782.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280782.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280782.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

煮茶社區AVR開發板第二版[轉]

原圖:http://blossom.cnblogs.com/gallery/image/21891.html

[Kogel.Subscribe.Mssql]SQL Server增量訂閱,數據庫變更監聽

此框架是SQL Server增量訂閱,用來監聽增刪改數據庫數據變更目前僅支持SQL Server,后續會支持MySQL和Oracle,Nuget上可以下載安裝或者使用Nuget命令添加包dotnet add package Kogel.Subscribe.Mssql --version 0.0.0.1可以用來處理DB主從同步&…

java instanceof運算符

instanceof 運算符 該運算符用于操作對象實例,檢查該對象是否是一個特定類型(類類型或接口類型)。 instanceof運算符使用格式如下: ( Object reference variable ) instanceof (class/interface type) 如果運算符左側變量所指的對…

C# XML添加刪除/SelectNodes/xpath

SelectNodes中的XPath //從當前節點的兒子節點中選擇名稱為 item 的節點。 SelectNodes("item")//從根節點的兒子節點中選擇名稱為 item 的節點。 SelectNodes("/item")// 從任意位置的節點上選擇名稱為 item 的節點。要重點突出這個任意位置,…

Python中*args 和**kwargs的用法

http://blog.csdn.net/chenjinyu_tang/article/details/8136841 好久沒有學習python了,應為工作的需要,再次拾起python,喚起記憶。 當函數的參數不確定時,可以使用*args 和**kwargs,*args 沒有key值,**kwar…

MFC載入JPG圖片

## 1.定義畫圖函數 HRESULT CIPCamDlg::draw(char *lpImageFile, HWND hWnd, int nScrWidth, int nScrHeight) {HDC hDC_Temp::GetDC(hWnd);IPicture *pPic; IStream *pStm;BOOL bResult;HANDLE hFileNULL; DWORD dwFileSize,dwByteRead;hFileCreateFile(lpImageFile,GENERIC_R…

DLR 的擴展庫 Dynamitey

.NET 在 CLR 對動態語言或者腳本語言的支持是通過DLR 完成的, Miguel de Icaza對 DLR 的特點概括如下:一個針對動態語言的共享式類型系統;一個共享的 AST,可以被語言開發人員用來創建新的動態語言;針對編譯器開發人員的…

MFC 單選按鈕Radio使用注意

使用MFC Radio時遇到問題:數據交換時出現斷言崩潰框 定位于: 解決方法: 1、按CTRLD,保證同一組內的radio的tab序號是連續的; 2、同一組內,設置 radio1的屬性: group、tabstop、auto均為true&am…

C# 字符串操作:split、substring、Format

1.split split可以使用多個字符切割。 "test[12]"切割后是3個字符串,最后一個為空。 string testString "test[12]";string[] testData testString.Split([,]);int testLength testData.Length;Console.WriteLine(testLength.ToString());…

flac格式轉換mp3格式_MP3,FLAC和其他音頻格式之間有什么區別?

flac格式轉換mp3格式Digital audio has been around a very long time so there’s bound to be a plethora of audio formats out there. Here are some of the more common ones, what differentiates them, and what to use them for. 數字音頻已經存在了很長時間&#xff…

Kubernetes:Flomesh 服務網格與多集群通信

Kubernetes 成功普及了容器集群的概念。許多用戶已經在多個集群中部署應用,組織需要運行多個 Kubernetes 集群可能來自以下原因(并非詳盡列表):? 位置? 延遲(盡可能在靠近客戶的地方運行應用程序)? 管轄…

Java四種線程池的使用

FixedThreadPool 由Executors的newFixedThreadPool方法創建。它是一種線程數量固定的線程池,當線程處于空閑狀態時,他們并不會被回收,除非線程池被關閉。當所有的線程都處于活動狀態時,新的任務都會處于等待狀態,直到有…

袁永福軟件行業從業經歷

簡化版》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》 袁永福簡歷 袁永福,男,1980年生于江西省九江市都昌縣,2001年南京東南大學動力工程系本科畢業。畢業后一直從事計算機軟件開發工作&…

小程序之地圖導航

同學們平常使用地圖的時候應該都有注意到,當我們在一個應用中選擇一個地址,打開一個地圖,往往會有兩種顯示方式,一個是顯示當前自己的位置;一個是顯示對方,也就是目的地的位置;如下圖&#xff1…

PS2019攝影后期處理(一)

高高手之路筆記 一、學習方法 內外兼修:技術會淘汰、更新,自己內在也要提高。 二、照片格式、色彩空間 JPEG TIFF RAW sRGB:互聯網相關圖片,電子設備 三、照片風格 自己定義照片格式,直接后期效果 相機自帶工具&a…

mdnsresponder_什么是mDNSResponder.exe / Bonjour,如何卸載或刪除它?

mdnsresponderYou are no doubt reading this article because you’ve noticed the mDNSResponder.exe process running in Task Manager, you don’t remember installing it, and it doesn’t show up in the Add/Remove programs in Control Panel. So what is it, and how…

Windows 10下,如何使用PowerShell批量重啟局域網電腦

PowerShell 在Windows 10中越來越受到微軟重視,甚至被微軟安排在開始按鈕超級菜單中替換了一直以來默認的命令提示符(當然還可以換回去),這和該工具越來越強大密不可分。這次就介紹一個“群重啟”命令,可讓局域網內的電腦集體重啟。1、單機重…

.NET MAUI學習指南

由于.NET MAUI這項技術出來不久相關的學習資源暫時除了官網以外沒有太好的學習資源,這篇文章主要向大家分享幾種學習.NET MAUI的學習途徑,如果有好的學習資源歡迎大家私信給我然后更新到后續的文章里。(以下推薦學習途徑均為免費且無廣告的資…

循序漸進DB2(第2版)——DBA系統管理、運維與應用案例

《循序漸進DB2(第2版)——DBA系統管理、運維與應用案例》基本信息作者: 牛新莊出版社:清華大學出版社ISBN:9787302323013上架時間:2013-7-3出版日期:2013 年7月開本:16開頁碼:612版次&#xff1…

Oracle Unicode轉中文(解碼)

Oracle Unicode轉中文(解碼) CreateTime--2018年3月29日15:23:30 Author:Marydon 情景描述: 將數據庫中的某個字段誤存儲的是Unicode編碼,需要將其改成中文。 測試: --將Unicode轉中文 select unistr(REPLACE(\u6d4b\u…