1. 程式人生 > >this,static關鍵字

this,static關鍵字

this關鍵字

1:在類的方法定義中使用的this關鍵字代表使用該方法的物件的引用
(對哪個物件呼叫的方法,this指的就是誰)。
2:當必須指出當前使用方法的物件是誰要使用this。
3:有時使用this可以處理方法中非成員變數和引數重名的情況。
4:this可以看做是一個變數,它的值是當前物件的引用。

例項:

public	class	Leaf{
	int	i = 0 ;		//成員變數。
	Leaf ( int	i ) { this.i = i ; }		//構造方法。另:此處有兩個變數 “i”,此處的“i”是形參,無法區分,遵循就近宣告的原則,即大括號中的第二個“i”是形參,而“this.i”中的“i”是成員變數。(即第三條)
	Leaf increament () {		//返回值是Leaf型別。
		i++;
		return this;		//返回Leaf型別。
	}
	void print () { System,out.println ("i = "+ i ); }
	public static void main(String [] args){
		Leaf leaf = new leaf(100);		//自身這個“i”變成了100.
		leaf.increament().increament ().print ();		呼叫了兩次方法“Leaf increament”,成員變數“i”的值從100變為101再變為102,之後呼叫print方法,打印出102.	
	}
}

static關鍵字:

1:在類中,用static宣告的成員變數為靜態成員變數,它為該類的公共變數,在第一次使用時被初始化,對於該類中的所有物件來說,static成員變數只有一份。
2:用static宣告的方法為靜態方法,在呼叫該方法時,不會將物件的引用傳遞給它,所以在static方法中不可訪問非static的成員。
3:靜態方法不再是針對於某個物件呼叫,所以不能訪問非靜態成員。
4:可以通過物件引用或類名(不需要例項化)訪問靜態成員。

例項:

public	class	Cat{
	private	static	int	sid = 0;		//成員變數“sid”(許可權修飾,static修飾),靜態變數存放在“date	segment(資料區)。屬於整個類”
	private	String  name;
	int	id;
	Cat(String name) {				//構造方法。
		this.name = name;		//使用this關鍵字,把輸入的name值傳給成員變數name。
		id = sid++;
	}
	public	void	info(){
		System.out.println
				( “My name is”+name+" No." +id);
	}
	public	static	void	main(String args[]){
		Cat.sid = 100;		//此時還未new處物件,sid的值變成100。
		
		//new了兩隻貓,兩個“id”兩個“name”。
		
		Cat mimi = new Cat("mimi");		
		Cat pipi = new Cat("pipi");
		mimi.info();		//輸出的id為100,sid變成101;
		pipi.info();		//輸出的id為101,sid變成102.
	}
} 	

如果把static去掉:

public	class	Cat{
	private	int	sid = 0;		
	private	String  name;
	int	id;
	Cat(String name) {				//構造方法。
		this.name = name;		//使用this關鍵字,把輸入的name值傳給成員變數name。
		id = sid++;
	}
	public	void	info(){
		System.out.println
				( “My name is”+name+" No." +id);
	}
	public	static	void	main(String args[]){
		//Cat.sid = 100;		(無法執行,因為去掉了static,sid屬於某一個物件,不new出任何的物件,sid不存在。故刪除這條語句。)
		
		//new了兩隻貓,兩個“id”兩個“name”。
		
		Cat mimi = new Cat("mimi");		
		Cat pipi = new Cat("pipi");
		mimi.info();		//輸出的id為0,sid變成1。
		pipi.info();		//輸出的id為0,sid變成1。
	}
}

另:

public	static	void	main(String args[]){		//static,註明main方法是靜態,即main方法執行時不需要new物件。
		static	id = 9;		// id不裝在某一個物件中是無法訪問的。name加一個static,main方法就可以直接訪問了。	
		//Cat.sid = 100;	
		Cat mimi = new Cat("mimi");		
		Cat pipi = new Cat("pipi");
		mimi.info();		
		pipi.info();