一: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方法,因為例項化後,非靜...