1. 程式人生 > >static(靜態)成員與非靜態變數(和普通成員方法)的關係

static(靜態)成員與非靜態變數(和普通成員方法)的關係

1.static ( 被其修飾的是靜態成員類成員,屬於整個類所有,不是針對某個物件即類中所有物件所有。
          可以使用類名訪問,也可以使用物件名訪問 ) 使用之靜態變數   static可修飾變數、方法、程式碼塊
  1)靜態成員(方法)直接呼叫(訪問)靜態成員,不能直接呼叫非靜態成員(變數、方法),需要通過物件
    訪問非靜態成員(變數、方法)
  2)普通成員方法可以直接訪問同類中的靜態成員(變數、方法)&& 非靜態成員

  3)類名訪問,能訪問靜態變數,不能訪問非靜態成員

  4)類方法不能使用this關鍵字 ,因為沒有this的例項 可供使用

2.static
  1)沒有加static的成員、屬性、方法,稱例項成員、屬性、方法
  2)加有static的成員、屬性、方法,稱類成員、屬性、方法

public class jingtaibianliang {
	
	static String className = "JAVA開發一班";
	
	public static void main(String[] args) {
		//類名訪問(只能訪問靜態變數)
		System.out.println(jingtaibianliang.className);
//		System.out.println(jingtaibianliang.numName);   錯的(類名訪問,只能訪問靜態變數)		

		//建立一個物件
		jingtaibianliang class01 = new jingtaibianliang();
		//物件名訪問
		System.out.println(class01.className);
		//用該物件對className修改
		class01.className = class01.className + "牛逼";
		
		//類名訪問
		System.out.println(jingtaibianliang.className);
		
		
		
	}

}

執行結果:

JAVA開發一班
JAVA開發一班
JAVA開發一班牛逼
public class jingtaifangfa {
	
	String name1 = "nihao";		//非靜態變數
	static String name2 = "你好";		//靜態變數
	
	public static void main(String[] args) {

		//建立一個物件
		jingtaifangfa work1 = new jingtaifangfa();
		
		//直接訪問靜態變數
		System.out.println(name2);
		//通過物件訪問同一個類的非靜態變數
		System.out.println(work1.name1);
		//通過物件訪問靜態變數
		System.out.println(work1.name2);
		
		
		//直接呼叫靜態方法
		print();
		//通過物件呼叫普通成員方法
		work1.show();
		//通過物件呼叫靜態方法
		work1.print();
		
	}
	
	//普通成員方法
	public void show() {
		System.out.println("普通成員方法");
		//普通成員方法直接訪問非靜態變數
		System.out.println(name1);
		//普通成員方法直接訪問靜態變數
		System.out.println(name2);
	}
	
	//靜態方法
	public static void print(){
		System.out.println("靜態方法");
	}

}

執行結果:

你好
nihao
你好
靜態方法
普通成員方法
nihao
你好
靜態方法