對java中static的一些理解

2021-05-23 20:32:28 字數 1563 閱讀 9905

一:static成員變數和非static成員變數的區別:

1:記憶體中的位置不同

ststic的成員變數存放在全域性變數區,只有乙份。非static的成員變數在物件例項化時隨著物件儲存在堆中,每個物件都有特定的乙個。

2:使用方法

static成員變數既可以被類名呼叫也可以被物件呼叫,非static成員變數只能被物件呼叫。

3:初始化:

無論static還是非static成員變數在類的建立時都會初始化,而且在建構函式之前。

static的類成員變數初始化時比非靜態成員變數優先    而且只會被初始化一次。

例如:public class tig

}public class card

}public class call_mail

}output:

tig 2

tig 1

tig 3

in card

---------------------

tig 1

tig 3

in card

二:static方法:

宣告為static的方法有以下幾條限制:

1:它們僅能呼叫其他的static 方法。

2:它們只能訪問static資料。

3:它們不能以任何方式引用this或super。

三:static**塊

static**塊僅在該類被載入時執行一次(通過計算來初始化static變數)

例如:public class haha

}public class ststic_block

載入順序:

class parent  

public parent()  

}  class child extends parent  

public child()  

}  public class staticiniblockordertest   

}  

問題:當執行完語句(*)時,列印結果是什麼順序?為什麼? 

解答:當執行完語句(*)時,結果是這樣乙個順序:parent static block,child static block,parent constructor,child constructor。 

分析:當執行new child()時,它首先去看父類裡面有沒有靜態**塊,如果有,它先去執行父類裡面靜態**塊裡面的內容,當父類的靜態**塊裡面的內容執行完畢之後, 接著去執行子類(自己這個類)裡面的靜態**塊,當子類的靜態**塊執行完畢之後,它接著又去執行父類的構造方法,父類的構造方法執行完畢之後,它接著再 去執行子類的構造方法,這個就是乙個物件的初始話化順序。 

總結:物件的初始化順序是首先執行父類靜態的內容,父類靜態的內容執行完畢後,接著去執行子類的靜態的內容,當子類的靜態內容執行完畢之後,再去執行父類的構造方法,父類的構造方法執行完畢之後,再去執行子類的構造方法。總之一句話,靜態的塊內容先執行。 

注意:子類的構造方法,不管這個構造方法帶不帶引數,預設的它都會先去尋找父類的不帶引數的構造方法。如果父類沒有不帶引數的構造方法,那麼子類必須用supper關鍵子來呼叫父類帶引數的構造方法,否則編譯不能通過。

對java中int與Integer的一些理解

integer與integer間的比較,從jdk1.5開始,有 自動裝箱 這麼乙個機制,在byte 128到127範圍內 ps整型的八位二進位制的表示的範圍為 128到127 如果存在了乙個值,再建立相同值的時候就不會重新建立,而是引用原來那個,但是超過byte範圍還是會新建的物件。綜上,i i1為...

對Java同步一些理解

基本概念 每個object都會有1個鎖.同步就是序列使用一些資源.說明 以下有些例子為了突出重點,省略了不必要的 特別是省掉了一些成員變數,就是需要同步的物件.1.多執行緒中對共享 可變的資料進行同步.對於函式中的區域性變數沒必要進行同步.對於不可變資料,也沒必要進行同步.多執行緒中訪問共享可變資料...

Java程式設計 關於static的一些簡單認知

看下下面 這樣寫為什麼不會報錯?去掉static呢?為什麼會報錯呢?接下來我會一一解釋 為什麼要宣告static,主函式擁有static,如果不宣告static就會報錯,因為如果不宣告,就會使 learn不進入共享區域,相當於不存在learn方法,需要例項化才能使用learn方法,因為例項化後,非靜...