JavaSE 面向對象內存圖&靜態變量內存圖

1.創建對象內存圖

package cn.itcast.oop;

public class PhoneDemo {
	public static void main(String[] args) {
		Phone p = new Phone();
		//給成員變量賦值
		p.brand = "小米";
		p.price = 1999;
		p.color = "紅色";
		System.out.println(p.brand+"---"+p.price+"---"+p.color);
		//調用方法
		p.call("風清揚");
		p.sendMessage();
		p.playGame();
		
		//第二個手機
		Phone p2 = new Phone();
		//給成員變量賦值
		p2.brand = "華爲";
		p2.price = 1699;
		p2.color = "黑色";
		System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
		//調用方法
		p2.call("令狐沖");
		p2.sendMessage();
		p2.playGame();
	}
}
class Phone{
	String brand;//品牌
	int price;//價格
	String color;//顏色
	//打電話
	public void call(String name){
		System.out.println("給"+name+"打電話");
	}
	//發短信的方法
	public void sendMessage() {
		System.out.println("羣發短信");
	}
	//玩遊戲的方法
	public void playGame() {
		System.out.println("玩遊戲");
	}
}

步驟:

1.加載類的字節碼對象,PhoneDemo.class 以及Phone.class-->在方法區的class內容區域

2.main方法進棧,同時開闢一段內存給main方法

3.Phone p-->在堆內存中new一個Phone對象開闢一段內存空間,進行初始化值brand=null;price=0;color=null;

4.賦值給p的屬性進行賦值,brand變爲小米,price變爲1999,color變爲灰色,此時的p指向了堆內存中的new Phone()對象

5.調用p.call方法-->進棧執行完程序 出棧,調用p.senMessage方法-->進棧執行完程序 出棧,調用p.playGame方法-->進棧執行完程序 出棧.
6.同理p2指向堆內存中new出來的Phone().... 注:地址不同.

2.靜態的理解:


靜態變量是存在於方法區中的靜態區中,是隨着類的加載而加載,是專屬於類的,而不是專屬於某個單獨的對象的,每一個對象都可以共享靜態變量.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章