1. 程式人生 > >讀《瘋狂Java講義》筆記總結三

讀《瘋狂Java講義》筆記總結三

1.初始化塊

實際上初始化塊是一個假象,使用javac命令編譯Java類後,該Java類中的初始化塊會消失——初始化塊中程式碼會被 “還原” 到每個構造器中,且位於構造器所有程式碼的前面。

2.p125-p128   自動裝箱,自動拆箱不太懂

3.包裝類


4.單例類

例項:

//提供一個靜態方法,用於返回Singleton例項  
//該方法可以加入自定義控制,保證只產生一個singleton物件  
public static Singleton getInstance() {  
  
    //如果instance為null,則表明還不曾建立Singleton物件  
    //如果instance不為null,則表明已經建立了Singleton物件  
    //將不會重新建立新的例項  
    if (instance == null)  
    {  
        //建立一個Singleton物件,並將其快取起來  
        instance = new Singleton ();  
    }  
    return instance;  
}   

5.final修飾基本型別變數和引用型別變數的區別

當使用final修飾基本型別變數時,不能對基本型別變數重新賦值,因此基本型別變數不能被改變,但對於引用型別變數而言,它儲存的僅僅是一個引用,final只保證這個引用型別變數所引用的地址不會發生改變,即一直引用同一個物件,但這個物件完全可以發生改變。

6.可執行“巨集替換”的final變數

對於一個final變數來說,不管它是類變數、例項變數,還是區域性變數,只要該變數滿足三個條件,這個final變數就不再是一個變數,而是相當於一個直接量。

  • 使用final修飾符修飾
  • 在定義該final變數時指定了初始值
  • 該初始值可以在編譯時就被確定下來
final修飾符的一個重要用途就是定義“巨集變數”。當定義final變數時就為該變數指定了初始值,而且該初始值可以在編譯時就確定下來,那麼這個final變數本質上就是一個“巨集變數”,編譯器會把程式中所有用到該變數的地方直接替換成該變數的值。
Java會使用常量池來管理曾經用過的字串直接量,例如執行String a = "java";語句之後,常量池中就會快取一個字串“java”;如果程式再次執行String b = "java";,系統就會讓b直接指向常量池中的“java”,因此a == b 就會返回true。 7.內部類 非靜態內部類的子類不一定是內部類,它可以是一個外部類。但非靜態內部類的子類例項一樣需要保留一個引用,該引用指向其父類所在外部類的物件。也就是說,如果有一個內部類子類的物件存在,則一定存在與之對應的外部類物件。 8.effectively final