類、方法、成員變量和局部變量的可用修飾符
修飾符 類 成員方法 構造方法 成員變量 局部變量 abstract Y Y _ _ _ static _ Y _ Y _ public Y Y Y Y _ protected _ Y Y Y _ private _ Y Y Y _ synchronized _ Y _ _ _ native _ Y _ _ _ transient _ _ _ Y _ volatile _ _ _ Y _ final Y Y _ Y Y
1、訪問控制修飾符:
Java語言采用訪問控制修飾符來控制類及類的方法和變量的訪問權限,從 而只向使用者暴露接口,但隱藏實現細節。
公開級別:用public修飾,對外公開
受保護級別:用protected修飾,向子類及同一個包中的類公開
默認級別:沒有訪問控制修飾符,向同一個包中的類公開
私有級別:用private修飾,只有 類本身可以訪問,不對外公開
頂層類只有默認或公開級別,因此不能用private和protected來修飾。
2、abstract修飾符:
用來修飾類和成員方法,抽象類不能被實例化,抽象方法不提供具體的實現 。
抽象類中可以沒有抽象方法,但包含了抽象方法的類必須被定義為抽象類
如果子類沒有實現父類中所有的抽象方法,那麼子類也必須被定義為抽象類
沒有抽象構造方法,也沒有抽象靜態方法
抽象類中可以有非抽象的構造方法,創建子類的實例時可能會調用這些構造 方法
抽象類及抽象方法不能被final修飾符修飾(原因?)
3、final修飾符:
具有“不可更改的”意義,它可以修飾非抽象類飛、非抽象成員 方法和變量。
用final修飾的類不能被繼承,沒有子類
用final修飾的方法不能被子類的方法覆蓋
用final修飾的變量表示常量,只能被賦一次值
final不能用來修飾構造方法,無意義(為什麼?)
final類:
不是專門繼承而設計的類
出於安全的原因,類的實現細節不允許有任何改動
在創建對象模型時,確信這個類不會再被擴展
final方法:
出於安全的原因,父類不允許子類覆蓋某個方法,此時可以把這個方法聲明 為final
final變量特征:
可以修飾靜態變量,實例變量和局部變量,分別表示靜態常量,實例常量和 局部常量
final變量都必須顯示初始化
final變量只能賦一次值
如果將引用類型的變量用final修飾,那麼該變量只能始終只能引用一個對象 ,但可以改變內容
final定義常量,有如下作用:
提高程序的安全性,禁止非法修改取值固定且不允許改變的數據
提高程序代碼的可維護性
提高程序代碼的可讀性
4、static修飾符:
用static修飾的變量表示靜態變量,可以直接通過類名來訪問。
用static修飾的成員方法表示靜態方法,可以直接通過類名來訪問。
用static修飾的程序代碼塊表示靜態代碼塊,當Java虛擬機加載類時,就會 執行該快代碼
static變量:
靜態變量在內存中只有一個拷貝
對於實例變量每創建一個實例,就分配一次內存;而且互不影響
靜態變量能被類的所有實例共享,可作為實例之間進行交流的共享數據
static方法(why)
靜態方法中不能用this關鍵字,也不能直接訪問所屬類的實例變量和實例方 法
可以直接訪問所屬類的靜態變量和靜態方法
靜態方法中也不能用super關鍵字
一個靜態的方法不能被定義為抽象方法,必須實現
static代碼塊
類中也可以包含靜態代碼塊,它不存在於任何方法體中。
Java虛擬機加載類時會執行這些靜態代碼塊。類的構造方法用於初始化類的 實例,而類的靜態代碼塊則可用於初始化類。
靜態代碼塊與靜態方法一樣,也不能直接訪問類的實例變量和實例方法,而 必須通過實例的引用來訪問