標籤:tran .com 添加 執行個體變數 外部 靜態內部類 java final 非靜態內部類
1. 定義類
[修飾符] class 類名{ 零到多個構造器定義... 零到多個成員變數... 零到多個方法...}
1.1 定義構造器
[修飾符] 構造器名(形參列表){ // 構造器名必須與類名相同 // 由零到多條可執行語句組成}
2. 修飾符
2.1 修飾符適用範圍
| |
外部類/介面 |
成員屬性 |
方法 |
構造器 |
初始化塊 |
成員內部類 |
局部成員 |
| public |
√ |
√ |
√ |
√ |
|
√ |
|
| protected |
|
√ |
√ |
√ |
|
√ |
|
| 包訪問 |
√ |
√ |
√ |
√ |
O |
√ |
O |
| private |
|
√ |
√ |
|
√ |
|
√ |
|
| abstract |
√ |
|
√ |
|
|
|
√ |
|
| final |
√ |
√ |
√ |
|
|
√ |
√ |
| static |
|
√ |
√ |
|
√ |
√ |
|
| strictfp |
√ |
|
√ |
|
|
√ |
|
| synchronized |
|
|
√ |
|
|
|
|
| native |
|
|
√ |
|
|
|
|
| transient |
|
√ |
|
|
|
|
|
| volatile |
|
√ |
|
|
|
|
|
| default |
|
|
√ |
|
|
|
|
| 相同顏色不能同時出現(或同時出現無意義(灰色)) |
2.2 修飾符使用詳情
| 類(class)([12] [~34]) |
方法([1234] [~5] [~67]) |
| public |
可被所有類使用(需類名與檔案名稱相同) |
public |
4.全域範圍內可被訪問 |
| default(空) |
只能被相同包的其它類訪問 |
protected |
3.可以被不同包的子類訪問 |
| abstract |
抽象類別, 不能建立執行個體, 只能作為父類 |
default(空) |
2.可被相同包的其它類訪問 |
| final |
將無法被作為父類 |
private |
1.只能在當前類內部被訪問 |
| 成員變數([1234] [~5] [~6]) |
[1] static |
無此修飾, 則只能通過執行個體來調用 |
| public |
4.全域範圍內可被訪問 |
abstract |
含抽象方法的類只能被定義成抽象類別 |
| protected |
3.可以被不同包的子類訪問 |
final |
子類不允許覆蓋父類的final方法 |
| default(空) |
2.可被相同包的其它類訪問 |
構造器(沒有傳回值聲明) |
| private |
1.只能在當前類內部被訪問(常) |
public |
4.全域範圍內可被訪問(常) |
| [1] static |
通過其修飾, 可通過類或執行個體調用 |
protected |
3.可以被不同包的子類訪問 |
| final |
不允許為final變數重新賦值 |
default(空) |
2.可被相同包的其它類訪問 |
| 初始化塊{} (在執行構造器之前執行) |
private |
1.只能在當前類內部被訪問 |
| static |
(不能對執行個體變數初始化)在類初始化階段執行, 而不是建立對象時執行. |
private修飾此類所有構造器, 子類將無法調用該類構造器, 從而無法繼承. 此類將不能直接建立執行個體, 但可通過建立一個(public static 類 方法)來返回執行個體並加以控制(P174) |
| default(空) |
| static修飾的方法中不能使用this引用, 所以static修飾的方法不能訪問不使用static修飾的普通成員 |
| 內部類([1234] [~5] [~67]) |
final修飾的成員變數必須顯式地指定初始值.
(1.類變數: 必須在靜態初始化模組中或聲明該類變數時指定初始值;
2.執行個體變數: 必須在非靜態初始化模組、聲明該執行個體變數或構造器中指定初始值) |
| public |
4.全域範圍內可被訪問 |
| protected |
3.可以被外部類不同包的子類訪問 |
| default(空) |
2.可被外部類相同包的其它類訪問 |
| private |
1.只能在當前外部類內部被訪問 |
| static |
非靜態內部類不能擁有靜態成員 |
final修飾局部變數可以在聲明時指定, 也可以在後面的代碼中賦初始值, 但只能一次. |
| abstract |
抽象類別, 不能建立執行個體, 只能作為父類 |
| final |
將無法被作為父類 |
final修飾形參, 形參會在調用該方法時由系統根據傳入的參數來完成初始化, 因此不能被賦值 |
| 介面裡定義內部類預設使用public static修飾 |
| 局部內部類(方法中定義)不能使用存取控制修飾符 |
final 修飾引用變數時只保證變數引用的地址不變 |
| 所有局部變數不能使用static修飾 |
abstract修飾的類只能被繼承abstract不能和static/private同時修飾某個方法 |
| 匿名內部類: new 實現介面() | 父類構造器(實參) {} |
| 匿名內部類適合建立那種只需要使用一次的類 |
abstract修飾的方法被定義時沒有{}, 只定義不實現abstract修飾的方法必須由子類提供實現(重寫) |
| J8之前匿名/局部內部類只能訪問final局部變數J8會自動為其訪問的局部變數使用final修飾 |
| 枚舉類enum(與class, interface地位相同) |
| |
|
繼承 |
可以實現一個或多個介面 |
| |
|
預設繼承java.lang.Enum而不是Object,因此枚舉類不能顯示的繼承其它父類 |
| |
|
Enum類實現了java.lang.Serializable和java.lang.Comparable兩個介面 |
| |
|
使用enume定義、非抽象的枚舉類預設使用final |
| |
|
構造器 |
只能使用private(可省略)存取控制符 |
| |
|
枚舉類的執行個體必須在枚舉類第一行顯示列出(‘,’隔開), 否則這個枚舉類永遠都不能產生執行個體. 列出這些執行個體時, 系統會自動添加public static final修飾, 無需程式員顯示添加. |
| |
|
values()方法 |
可方便的遍曆所有枚舉值 |
3. 介面(定義多個類共同的公用行為規範)
| [public | 空] interface 介面名 extends 父介面1, 父介面2, ... (與class不同, 介面支援多繼承) |
| 一個Java源檔案最多隻能有一個public介面, 源檔案的主檔案名必須與該介面一致 |
| 介面裡的成員都是public存取權限, 修飾符可省略(系統自動指定), 指定的話只能使用public |
| 成員變數 |
只能是靜態常量. 總是使用public static final來修飾(可省略, 系統自動使用) |
| 方法 |
抽象執行個體方法 |
總是使用public abstract來修飾(可省略), 沒有方法體 |
| 類方法(J8) |
需要使用static修飾, 不能使用default修飾 |
| 預設方法(J8) |
需要使用default修飾, 不能使用static修飾 |
| 內部類 |
內部介面, 枚舉. 總是使用public static來修飾(可省略) |
| [修飾符] class 類名[ extends 父類] implements 介面1, 介面2, ... (介面的實現) |
| 實現介面方法 |
只能用public修飾, 因為子類重寫父類方法時存取權限必須更大或相等 |
java--物件導向