經過類來直接描述現實世界中客觀存在的事物
基本特徵:封裝,繼承,多態
構造器是一個類建立對象的根本途徑,若是一個類沒有構造器,這個類一般沒法建立實例。若是類沒有編寫構造器,系統會爲該類提供一個默認的構造器。一旦程序員爲一個類提供了構造器,系統將再也不爲該類提供構造器。在Java語言中,除了8個基本數據類型值以外,一切都是對象。初始化塊總在構造器執行以前被調用,靜態初始化塊用於初始化類 。
Java參數傳遞方式只有一種:值傳遞,將實際參數值的副本傳入方法內,參數自己不會受到任何影響。
'''java
'''程序員
同一個類裏定義多個同名方法,形參列表不一樣便可。
成員變量:(不需顯示初始化,在類的準備階段或建立類實例的時候進行默認初始化)
實例變量 類成員變量(static修飾)
局部變量:(除了形參外都必須顯示初始化)
形參初始化:
方法形參(方法簽名中定義的變量) 方法內局部變量(方法內部定義的變量) 代碼塊局部變量(在代碼塊中定義的局部變量)
當在類或實例對象調用方法時,系統會在該方法棧區內爲全部的形參分配內存空間,並將實參值賦給形參。
成員變量初始化及內存中運行機制
局部變量的初始化和內存中的運行機制
局部變量定義後必須通過顯示初始化後才能使用,定義局部變量後,系統並未爲這個變量分配內存空間,直到等到程序爲這個變量賦初始值時,系統纔會爲局部變量分配內存,並將初始化值保存早這塊內存中
局部變量不屬於任何類或實例,它老是保存在方法的棧內存中
棧內存中的變量無須系統垃圾回收,每每隨方法或代碼塊的運行結束而結束,局部變量的做用域從初始化該變量開始,直到方法或代碼塊運行結束。由於局部變量只保存基本類型的值或對象引用,所以局部變量所佔的內存比較小。
將對象的成員變量和實現細節隱藏起來,不容許外部直接訪問。將方法暴露出來,讓方法來控制對這些成員變量進行安全的訪問和操做。訪問控制級別 由小到大: private --> default --> protected --> public
private default protected public 同一個類中 √ √ √ √ 同一個包中
√ √ √ 子類中
√ √ 全局範圍
√
Java默認爲全部源文件導入java.lang包下的全部類,因此在Java程序中使用String,System類時都無須使用import語句來導入這些類。
每一個子類只有一個直接父類。方法重寫要遵循「兩同兩小一大」規則兩同:方法名和形參列表相同兩小:返回值類型,子類比父類更小或相等,拋出異常,子類比父類更小或相等一大:方法訪問權限,子類的訪問權限應比父類的訪問權限大或相等
建立子類對象時,不只會爲子類對象的實例變量分配內存,也會爲從父類繼承的實例變量分配內存。
當調用子類構造器初始化子類對象時,父類構造器總會在子類構造器以前執行,以此類推。建立任何Java對象,最早執行的老是java.lang.Object類的構造器。
建立任何對象老是從該類所在繼承樹最頂層類的構造器開始執行,而後依次向下執行,最後才執行本類的構造器。
父類引用指向子類對象。在進行對象轉換前,使用instanceof 進行判斷來避免異常
一個類裏能夠有多個初始化塊,前面定義的初始化塊先執行,後面定義的初始化塊後執行。
初始化塊的修飾符只能是static,使用static修飾的初始化塊被稱爲靜態初始化塊。
建立Java對象時,老是先調用初始化塊,在執行構造器方法以前執行。
int a = 9 ;比 代碼塊a=6後執行。
注意:實際上初始化塊只是一個假象,編譯後的class類中,初始化塊的代碼會被編譯到每一個構造器中,且位於構造器的全部代碼以前。
JVM第一次主動使用某個類時,在類準備階段爲全部靜態成員變量分配內存空間,在初始化階段初始化成員變量,靜態代碼塊與聲明初始化按照源代碼順序執行