首先this是指當前執行類例項物件。當你建立乙個物件並呼叫該物件的方法的時候其實下面這樣的:
person p = new person();
p.show(string name);
其實在編譯之後程式設計機器語言是p.show(p , name);第乙個引數是本類的物件的引用。而在這個show方法中怎麼來用這個引用呢?其實就是用this來代替這個引用。也就是當前執行類例項物件。
而靜態方法就是沒有this的方法,也就是靜態的方法中不能使用this,因為靜態方法編譯成機器語言之後,並沒有在引數中加入本類物件的引用,也就是 p.show(string name)和原來一樣。這就是this的由來。
下面說一下this的一些使用
public
class
father
public
void
show()
}public
class
sonextends
father
public
void
show()
public
static
void
main(string args)
}
this is son's fun()
this is father's fun
son's show()
有些人對this理解不深的可能會產生疑問,為什麼結果會是這樣。我在前面已經說過:」this是指當前執行類例項物件」,所以,要看是誰呼叫了這個方法。這裡寫描述
在父類中又通過this呼叫了show()方法,因為show方法是子類繼承自父類的。而且,此時的this是指當前的呼叫者,圖中已經說過,當前的呼叫者是son,所以此時的this也是son所以呼叫的show方法也就是子類的show方法了。
public
class
father
}public
class
sonextends
father
public
static
void
main(string args)
}
this is son's fun() :son
this is father's fun :father
public
static
void
main(string args)
這裡的執行結果就是:
son
father
這就牽扯到了多型。多型的特點是,成員變數編譯時看左邊,成員方法編譯看左邊,執行看右邊
大家要記住方法是誰執行看誰,欄位是誰的就是誰的。
JAVA中的覆蓋問題
1 子類方法的名稱 引數簽名和返回型別必須與父類方法的名稱 引數簽名和返回型別一致,修飾符可以相同也可以不同,但子類的訪問許可權不能低於父類的訪問許可權。2 父類的靜態方法不能被子類覆蓋為非靜態方法。3 子類可以定義與父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的靜態方法。靜態方法只能隱藏,不...
Java中的死鎖問題
死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。簡而言之,乙個執行緒鎖住了資源a 還要使用資源b,另外乙個執行緒 鎖住了資源b 還想著得到資源a,當兩者互不相讓,就形成了死鎖。死鎖形成的條件 1 互斥條件 指程序對所分...
Java中的許可權問題
1 成員方法中許可權修飾符的訪問 同乙個包下 同一類 子類和無關類 不同包下 子類 不同包下 無關類 a private y b 預設 y y c protected y y y d public y y y y 2 類 a 許可權修飾符 public 預設 b 狀態修飾符 final c 抽象修飾...