this,static關鍵字
阿新 • • 發佈:2018-11-26
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();