/*靜態變量是隨著類加載時被完成初始化的,它在內存中僅有一個,且JVM也只會為它分配一次內存,同時類所有的實例都共享靜態變量,可以直接通過類名來訪問它。*/
/*使用時機: 我們一般在這兩種情況下使用靜態變量:對象之間共享數據、訪問方便。*/
/*局限: Static確實是存在諸多的作用,但是它也存在一些缺陷。
1、它只能調用static變量。
2、它只能調用static方法。
3、不能以任何形式引用this、super。
4、static變量在定義時必須要進行初始化,且初始化時間要早于非靜態變量。*/
/*總結:
無論是變量,方法,還是代碼塊,只要用static修飾,就是在類被加載時就已經"準備好了",也就是可以被使用或者已經被執行,都可以脫離對象而執行。
反之,如果沒有static,則必須要依賴于對象實例。*/
public class TestStatic {
/*static變量*/
private static int myNumber = 100;
/*static代碼塊 ,靜態代碼塊會隨著類的加載一塊執行*/
static {
System.out.println("ready static");
}
/*static方法*/
private static void myMethod(){
System.out.println("ready");
}
public TestStatic() {
myNumber++;
}
public static void main(String[] args) {
System.out.println("ready main");
TestStatic testStatic1 = new TestStatic();
TestStatic testStatic2 = new TestStatic();
/*結果相等*/
System.out.println("testStatic1 : "+ TestStatic.myNumber);
System.out.println("testStatic2 : "+ TestStatic.myNumber);
}
/*而且他可以隨意放,可以存在于該了的任何地方。*/
static {
System.out.println("ready static1");
}
}
輸出:
ready static
ready static1
ready main
testStatic1 : 102
testStatic2 : 102
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。