1. 程式人生 > >java 中this呼叫靜態變數及例項變數的若干錯誤

java 中this呼叫靜態變數及例項變數的若干錯誤

public class Test11{
	private int id;
	public static void main(String[] args){
		Test11 t = new Test11();
		t.m1();
		System.out.println(id);		//此行的錯誤在於靜態的主方法內不可直接呼叫非靜態的例項變數或例項方法
		t.m2();
		System.out.println(t.id);	//私有的例項變數需要由物件呼叫
		t.m3(15);
		System.out.println(Test11.id);	//此行錯誤 只有靜態變數才可以用類名.呼叫
	}
	public void m1(){
		this.id = 45;	//呼叫m1方法改變了成員變數id的值為45
		System.out.println(id);
	}
	public void m2(){
		Test11.id = 45;	//此行錯誤 只有靜態變數才可以用類名.呼叫  例項變數不可以這樣呼叫
		System.out.println(id);
	}
	public static void m3(int id){	//此行正確因為方法體中的id為形參列表中的區域性變數非類中例項變數
		id = 45;	// 此方法體中的id雖然由t.m3(15)傳入了15但是方法中又給id賦值為45 
		System.out.println(id);		//此行輸出最終為45  但是僅為區域性變數的值 不影響成員變數的值
	public static void m4(int id){
		this.id = 45;	// 此行錯誤因為在靜態方法中用 this.id 呼叫了類中的例項變數 
		System.out.println(id);		
	}
}