Java中static與this解析

2021-08-03 06:44:33 字數 1859 閱讀 6356

一、this關鍵字

/**

* 關鍵字『this'的相關解析

*@author johnyhe

* */

public

class

this_useage

}class animal

public

void

jump()

/*** 在play()方法中,this具體指的物件取決於呼叫play()方法的例項,

* 但是this的型別是可以確定的——即當前類的例項

*/public

void

play()

}class dog extends animal

public

dog(string kind)

public string getkind()

//返回物件的值

public dog getdog()

@override

public

void

jump()

}

給出執行結果:

說明:根據執行結果來看,當animal,dog例項變數呼叫例項方法jump()時,二者的行為表現取決於例項變數指向的物件中的jump()方法體行為,這就是執行時多型。敲黑板!!!當animal呼叫play()方法時表現為父類,這個不解釋;當dog呼叫父類方法play()時,play()中的this.jump()表現為子類dog的jump()方法行為。此時,this具體指向的物件才確定出來。即this與例項變數dog指向的物件相同

二、static關鍵字

1.static用於修飾成員變數和方法,這些成員變數及方法屬於類而不屬於例項。

2.static可以修飾**塊,即靜態**塊。靜態**塊也屬於類本身。

3.以上的成員變數、方法和**塊在編譯期間就已經存在了。

4.由於static修飾的成員變數、方法及**塊屬於類,因此其中不能使用當前類本身的內部例項this引用呼叫任何例項變數和例項方法,因為例項變數及方法都是在例項被建立之後才存在的。因此,如果要呼叫例項方法及變數則需要在其中建立例項然後呼叫。

5.關於static修飾的成員變數,方法的呼叫 :既可以用例項呼叫,也可以用類名呼叫。但是既然屬於類,用類的例項呼叫顯得有點矛盾,因此強烈建議用類名呼叫。

/**

* 關鍵字static的解析

* @author johnyhe

* */

public

class static_useage

static

public

static

void

main(string args)

public

static

void

method_static()

public

void

method_instance()

static

}

執行結果:

說明:根據執行結果來看,靜態**塊和靜態變數的執行要先於構造器。

JAVA之static與非static區別

關於static和非static變數的區別。static 修飾的變數稱為類變數或全域性變數或成員變數,在類被載入的時候成員變數即被初始化,與類關聯,只要類存在,static變數就存在。非static修飾的成員變數是在物件new出來的時候劃分儲存空間,是與具體的物件繫結的,該成員變數僅為當前物件所擁有...

java 內部類與static

public class mystaticclass 輸出為0 public class mystaticclass public static void main string args 輸出報錯 the field a cannot be declared static in a non sta...

Java中static方法疑惑

1 關於,main方法是static方法,但是為什麼非要是static。原因就是,如果乙個類她定義了main方法的話,那麼她的main方法會在這個類的建構函式執行之前被呼叫。由於main方法執行的時候尚未在jvm裡生成相應物件 建構函式未被執行 所以要宣告為static。2 這就涉及到下面的問題,和...