1.代碼塊
- 代碼塊中定義的變量是局部變量。
- 初始化代碼塊是放在構造函數中執行的,定義在類中的。
- 局部代碼塊是定義在方法中的。
1.1.靜態代碼塊
- 在加載字節碼的時候就執行了
- 在主方法之前執行的,只執行一次。
2.組合關係 class Person { Dog pet ; } 當第一次使用的時候加載到JVM當中,只加載一次,之後從內存中直接使用。
3.類的加載:當第一次創建該類對象的時候,加載到內存中。在加載的時候,會執行static
3.1.字段初始化問題
- 靜態字段初始化,是在靜態代碼塊中初始化
- 非靜態字段初始化,是在構造器中初始化
- 子類構造器默認會調用父類的構造器。
4.final關鍵字,繼承的弊端,破壞了我們的封裝,子類可以訪問父類的實現細節,,可以覆蓋父類中的方法,如何避免這種情況?
- final可以修飾字段,必須手動初始化值。 final修飾一個變量,就代表一個常量。規則是,字段大寫MAX_VALUE
- final修飾方法的時候,方法不能被覆蓋。
- final修飾類的時候,該類不能被繼承。
- final修飾基本數據類型的時候,代表值不能修改,當final修飾引用數據類型的時候,代表地址不能被修改。
5.設計模式
5.1.單例模式,一個類在內存當中只有一個對象,別人不能再創建對象。
- 餓漢模式 代碼實現 (餓漢模式的單例不能被繼承)
- 必須要在該類中創建一個對象出來。
- 私有化自己的構造器防止外界通過構造器來創建新的對象。
- 給外界提供一個方法,能夠獲取已經創建好的對象。
- 單例模式的好處
- 控制自資源的使用
- 控制實例的產生數量,節省資源
- 作爲通信媒介,數據可以共享,變量值可以共享。
5.2 如何設計工具類
- 一般都設計成static的方法,通過類名去調用
- 如果一個工具類沒有使用static,那麼我們一般把工具類設計成單例,通過單例獲取對象調用工具類方法
- 如果工具類全部使用static修飾,此時必須把工具類的構造器私有化,防止創建對象調用靜態方法。(有什麼區別)
6.包裝類:對基本數據類型進行包裝,把基本數據類型包裝成一個對象
- 把基本數據類型變成包裝類就是裝箱操作。自動裝箱,就是把一個基本數據類型的值賦值給包裝類。
- 把包裝類轉換成基本數據類型,就是拆箱操作。自動拆箱,就是一個包裝類賦值給基本數據類型。
- new Boolean("true"),除了true,其他全部是false。
6.1 基本數據類型和包裝類的區別
- 初始值不同,一個是0,一個是null
- 包裝類提供了很多方法可以直接使用
- 集合框架不允許存放基本數據類型,只能存放對象
6.2什麼時候使用基本數據類型,什麼時候使用包裝類
- 類中的成員變量一般使用包裝類
- 方法中,一般使用基本數據類型,基本數據類型存放再棧中,包裝類型存放再堆中6
6.3 包裝類的緩存設計 Integer.valueof();Integer的緩存範圍-128~127