這一節我們來簡單的看一看對象在內存中是什么樣子呢,如何體現。
我們以上一節的測試代碼為例。
我們在函數的內存分配分析過,當該代碼運行時,首先會加載主函數在棧內存中為main函數分配一個空間;
然后運行函數中的第一行語句,Car myCar = new Car();
然后把局部變量myCar加載到棧內存,然后通過new在堆內存中分配空間,然后把這個地址賦給變量myCar;
我們看一看是不是這樣
~~~
class CarDemo
{
public static void main(String[] args)
{
//在計算中創建一個car的實例,通過new這個關鍵字.
Car myCar = new Car();//myCar就是一個類類型的引用變量,指向了該類的對象.
System.out.println(myCar);
}
}
~~~
結果:

我們看到了myCar所指的位置,這里我們就這是我們小汽車的車庫吧,它就在139a55這個地方.
而在上面的堆內存中會對象的屬性變量num,color,brand這些變量,由于堆內存中的變量會默認初始化,上面的變量會被默認初始化;
num=0,color=null,brand=null;
此時如果我們沒不做2-4行語句,而是直接運行myCar.start(),我們看看結果如下:
~~~
class CarDemo
{
public static void main(String[] args)
{
//在計算中創建一個car的實例,通過new這個關鍵字.
Car myCar = new Car();//myCar就是一個類類型的引用變量,指向了該類的對象.
//myCar.num = 4;
//myCar.color = "red";
//myCar.brand = "BWM";
myCar.start();
myCar.run();//要使用對象中的內容,可能通過 對象.成員 的形式來完成調用.
}
}
~~~
結果:

我們看到了三個屬性被默認初始化了,那么就是說我們沒有給屬性賦值,系統也會為我們打造一輛空皮汽車的.
那么再來看一下當們賦值之后,我們再來看一下我們的汽車是什么樣子:
~~~
class CarDemo
{
public static void main(String[] args)
{
//在計算中創建一個car的實例,通過new這個關鍵字.
Car myCar = new Car();//myCar就是一個類類型的引用變量,指向了該類的對象.
myCar.num = 4;
myCar.color = "red";
myCar.brand = "BWM";
myCar.start();
myCar.run();//要使用對象中的內容,可能通過 對象.成員 的形式來完成調用.
}
}
~~~
結果:

我們看到程序會先分別給num,color,brand這三個屬性賦值,也就是說我們得到了一個完完整整的寶馬汽車,而存放這輛車的地址沒有發生變化,還是原來堆內存中的地址值.
同理如果我們創建多個car的實例,內存中的加載過程都是一樣的,它們都有各自不同的空間和對應的地址.
- 前言
- 1.1 基本常識
- 1.2 Java語言概述
- 1.3 Java語言的環境搭建
- 1.4 Java程序開發之初體驗--Hello World
- 2.1 關鍵字
- 2.2 標識符
- 2.3 注釋
- 2.4 常量
- 2.5 進制掃盲
- 2.6 變量和數據類型(1)
- 2.7 變量和數據類型(2)
- 2.8 運算符
- 3.1 if語句
- 3.2 switch語句
- 3.3 while和do-while語句
- 3.4 for語句
- 3.5 for循環的嵌套
- 3.6 break語句與continue語句
- 4.1 函數的定義
- 4.2 定義函數的兩個明確
- 4.3 函數的內存加載過程
- 4.4 函數的重載
- 5.1 數組的定義
- 5.2 數組的內存分配及特點
- 5.3 數組操作中常見問題
- 5.4 數組常用操作(1)
- 5.5 數組常用操作(2)
- 5.6 二維數組
- 6.1 面向對象的概述
- 6.2 類與對象的關系
- 6.3 對象的內存體現
- 6.4 成員變量與局部變量
- 6.5 類類型參數與匿名對象
- 6.6 基本數據類型參數與引用數據類型參數的傳遞過程
- 6.7 封裝
- 7.1 構造函數概述與默認構造函數
- 7.2 構造函數與一般函數的區別
- 7.3 構造函數的重載
- 7.4 構造函數的內存加載
- 7.5 構造函數需要注意的幾個細節
- 7.6 this關鍵字的原理
- 7.7 this關鍵字的細節與應用
- 8.1 static關鍵字之特點
- 8.2 成員變量與靜態變量的區別
- 8.3 static關鍵字使用的注意細節
- 8.4 main函數的解析與細節
- 8.5 static關鍵字的使用場景
- 8.6 靜態的內存加載
- 8.7 靜態代碼塊
- 8.8 構造代碼塊
- 9.1 繼承
- 9.2 單繼承與多重繼承
- 9.3 子父類中成員變量特征體現