面向對象-------static(十四)

1.static關鍵字及內存圖

class Demo1_Static {
	public static void main(String[] args) {
		Person p3 = new Person();
		p3.name = "小明";		//調用姓名屬性並賦值
	        p3.country = "臺灣";		//調用國籍屬性並賦值
		p3.speak();

		Person p1 = new Person();	//創建對象
		p1.name = "小王";		//調用姓名屬性並賦值
		p1.country = "中國";		//調用國籍屬性並賦值
		p1.speak();

		Person p2 = new Person();
		p2.name = "張三";		//調用姓名屬性並賦值
	    //  p2.country = "中國";		//調用國籍屬性並賦值
		p2.speak();

		Person p4 = new Person();
		p4.name = "李四";		//調用姓名屬性並賦值
	     // p2.country = "中國";		//調用國籍屬性並賦值
		p4.speak();
		

		
		
	

		//Person.country = "日本";	//靜態多了一種調用方式,可以通過類名.
		//System.out.println(Person.country);
	}
}

class Person {
	String name;					//姓名
	static String country;				//國籍

	public void speak() {			        //說話的方法
		System.out.println(name + "..." + country);
	}
}

創建對象內存圖:

2.static關鍵字的特點

A:static關鍵字的特點
    * a:隨着類的加載而加載
    * b:優先於對象存在
    * c:被類的所有對象共享
        * 舉例:咱們班級的學生應該共用同一個班級編號。
        * 其實這個特點也是在告訴我們什麼時候使用靜態?
            * 如果某個成員變量是被所有對象共享的,那麼它就應該定義爲靜態的。
        * 舉例:
            * 飲水機(用靜態修飾)
            * 水杯(不能用靜態修飾)
            * 共性用靜態,特性用非靜態
    * d:可以通過類名調用
        * 其實它本身也可以通過對象名調用。
        * 推薦使用類名調用。
        * 靜態修飾的內容一般我們稱其爲:與類相關的,類成員

3.static的注意事項

a:在靜態方法中是沒有this關鍵字的
        * 如何理解呢?
            * 靜態是隨着類的加載而加載,this是隨着對象的創建而存在。
            * 靜態比對象先存在。
    * b:靜態方法只能訪問靜態的成員變量和靜態的成員方法
        * 靜態方法:
            * 成員變量:只能訪問靜態變量
            * 成員方法:只能訪問靜態成員方法
        * 非靜態方法:
            * 成員變量:可以是靜態的,也可以是非靜態的
            * 成員方法:可是是靜態的成員方法,也可以是非靜態的成員方法。
        * 簡單記:
            * 靜態只能訪問靜態。

class Demo2_Static {
	public static void main(String[] args) {
		//Demo d = new Demo();
		//d.print1();
		//Demo d = new Demo();
		//System.out.println(d.num1);
		System.out.println(Demo.num1);
		//Demo.print2();
	}
}



class Demo {
	int num1 = 10;					//非靜態的成員變量
	static int num2 = 20;				//靜態的成員變量

	/*public void print1() {   //非靜態的成員方法,既可以訪問靜態的成員也可以訪問非靜態的
		System.out.println(num1);
		System.out.println(num2);
	}*/

	public static void print2() {		//靜態的成員方法
		//System.out.println(this.num1);//靜態的成員方法不能訪問非靜態的,錯誤: 無法從靜態上下文中引用非靜態 變量 num1
		System.out.println(num2);
	}
}

 靜態內存圖:

 

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