1. 程式人生 > >(23)物件呼叫非靜態方法執行過程、靜態方法呼叫記憶體執行過程

(23)物件呼叫非靜態方法執行過程、靜態方法呼叫記憶體執行過程

public class Person{
    
	private String name;
	private int age;
	private static String country="cn";
	static {
		System.out.println("Demo.class啟動!!!");
	}
	{
		System.out.println("預設的成員變數的值為:"+"name="+name+"  "+"age="+age+"country="+Person.country);
	}
	Demo (String name,int age){
		this.name=name;
		this.age=age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public static void showCountry() {
		System.out.println("country="+country);
                speak();//靜態方法體內可以呼叫靜態方法,方法只有被呼叫,才能執行,靜態方法用類名.成員呼叫
                   在同一個類中,類名.可以省略
//Person.speak();也可以這樣寫  } public static void speak() { System.out.println(說說說!!11"); } }
呼叫:Person p=new Person("張三",33); p.setName(“王五”);  

物件呼叫非靜態方法記憶體圖示:


注意:呼叫非靜態方法,載入到棧中會有個this變數,誰呼叫它,它指向誰.當方法執行完後,在棧中的方法被釋放,再次呼叫該方   法時,再產生

           靜態成員都在方法區中,呼叫用類名.方法名,與棧或者堆無關