瘋狂Java之學習筆記(18)-------------繼承">瘋狂Java之學習筆記(18)-------------繼承
708
2025-04-07
瘋狂Java之學習筆記(25)-------------修飾符
java中的修飾符分為類修飾符,字段修飾符,方法修飾符。根據功能的不同,主要分為以下幾種。
1、權限訪問修飾符
public,protected,default,private,這四種級別的修飾符都可以用來修飾類、方法和字段。
包外???????? 子類????????? 包內?????????? 類內
public????? yes??????? yes????????? yes???????? yes
protected?? no???????? yes????????? yes???????? yes
default???? no???????? no?????????? yes???????? yes
private???? no???????? no?????????? no????????? yes
2、final修飾符
final的意思是不可變,他可以修飾類、字段、方法。修飾類后類不能被擴展(extends),也就是不能被繼承。修飾字段后字段的值不能被改變,因此如果有final修飾字段,應該對字段進行手動初始化。修飾方法后該方法不能被改變,也就是重寫。
3、abstract修飾符
abstract是抽象的意思,用來修飾類和方法,修飾類后,該類為抽象類,不能被實例化,必需進行擴展。修飾方法后,該方法為抽象方法必須被子類重寫(override)。
4、static修飾符
static用來修飾內部類,方法,字段。修飾內部類說明該內部類屬于外部類而不屬于外部類的某個實例。修飾字段說明該字段屬于類而不屬于類實例。修飾方法說明該方法屬于類而不屬于類實例。
類修飾符
Public
可以從其他類中訪問
obstract
本類不能被實例化
final
不能再聲明子類
構造器修飾符
Public
可以從所有的類中訪問
Protected
只能從自己的類和它的子類中訪問
Private
只能在本類中訪問
域修飾符
Public
可以從所有的類中訪問
Protected
只能從本類和它的子類中訪問
Private
只能從本類中訪問它
Static
對該類的所有實例只能有一個域值存在
transient
不是一個對象持久狀態的一部份
Volatile
可以被異步的線程所修改
final
必須對它賦予初值并且不能修改它
局部變量修飾符
final
必須對它賦予初值并且不能修改它
方法修飾符
Public
可以從所有的類中訪問它
Protected
只能從本類及其子類中訪問它
Private
只能從本類中訪問它
abstract
沒有方法體,屬于一個抽象類
final
子類不能覆蓋它
static
被綁定于類本身而不是類的實例
native
該方法由其他編程語言實現
asnchronized
在一個線程調用它之前必須先給它加
---------------------------------------------------------------------------------------------------------------------------------------------------------
關于Java中各種修飾符與訪問修飾符的說明
類:
訪問修飾符? 修飾符??class 類名稱?extends 父類名稱 implement 接口名稱
(訪問修飾符與修飾符的位置可以互換)
訪問修飾符
名稱
說明
備注
public
可以被所有類訪問(使用)
public類必須定義在和類名相同的同名文件中
package
可以被同一個包中的類訪問(使用)
默認的訪問權限,可以省略此關鍵字,可以定義在和public類的同一個文件中
private
修飾內部類
修飾符
名稱
說明
備注
final
使用此修飾符的類不能夠被繼承
abstract
如果要使用abstract類,之前必須首先建一個繼承abstract類的新類,新類中實現abstract類中的抽象方法。
類只要有一個abstract方法,類就必須定義為abstract,但abstract類不一定非要保護abstract方法不可
變量
l???????? Java中沒有全局變量,只有方法變量、實例變量(類中的非靜態變量)、類變量(類中的靜態變量)。
l???????? 方法中的變量不能夠有訪問修飾符。所以下面訪問修飾符表僅針對于在類中定義的變量。
l???????? 聲明實例變量時,如果沒有賦初值,將被初始化為null(引用類型)或者0、false(原始類型)。
l???????? 可以通過實例變量初始化器來初始化較復雜的實例變量,實例變量初始化器是一個用{}包含的語句塊,在類的構造器被調用時運行,運行于父類構造器之后,構造器之前。
l??????????? 類變量(靜態變量)也可以通過類變量初始化器來進行初始化,類變量初始化器是一個用static{}包含的語句塊,只可能被初始化一次。
訪問修飾符
名稱
說明
備注
public
可以被任何類訪問
protected
可以被同一包中的所有類訪問
可以被所有子類訪問
子類沒有在同一包中也可以訪問
private
只能夠被當前類的方法訪問
缺省
無訪問修飾符
可以被同一包中的所有類訪問
如果子類沒有在同一個包中,也不能訪問
修飾符
名稱
說明
備注
static
靜態變量(又稱為類變量,其它的稱為實例變量)
可以被類的所有實例共享。
并不需要創建類的實例就可以訪問靜態變量
final
常量,值只能夠分配一次,不能更改
注意不要使用const,雖然它和C、C++中的const關鍵字含義一樣
可以同static一起使用,避免對類的每個實例維護一個拷貝
transient
告訴編譯器,在類對象序列化的時候,此變量不需要持久保存
主要是因為改變量可以通過其它變量來得到,使用它是為了性能的問題
volatile
指出可能有多個線程修改此變量,要求編譯器優化以保證對此變量的修改能夠被正確的處理
方法
訪問修飾符修飾符返回類型方法名稱(參數列表)throws 違例列表
l 類的構造器方法不能夠有修飾符、返回類型和throws子句
l? 類的構造器方法被調用時,它首先調用父類的構造器方法,然后運行實例變量和靜態變量的初始化器,然后才運行構造器本身。
l? 如果構造器方法沒有顯示的調用一個父類的構造器,那么編譯器會自動為它加上一個默認的super(),而如果父類又沒有默認的無參數構造器,編譯器就會報錯。super必須是構造器方法的第一個子句。
l? 注意理解private構造器方法的使用技巧。
訪問修飾符
名稱
說明
備注
public
可以從所有類訪問
protected
可以被同一包中的所有類訪問
可以被所有子類訪問
子類沒有在同一包中也可以訪問
private
只能夠被當前類的方法訪問
缺省
無訪問修飾符
可以被同一包中的所有類訪問
如果子類沒有在同一個包中,也不能訪問
修飾符
名稱
說明
備注
static
靜態方法(又稱為類方法,其它的稱為實例方法)
提供不依賴于類實例的服務
并不需要創建類的實例就可以訪問靜態方法
final
防止任何子類重載該方法
注意不要使用const,雖然它和C、C++中的const關鍵字含義一樣
可以同static一起使用,避免對類的每個實例維護一個拷貝
abstract
抽象方法,類中已聲明而沒有實現的方法
不能將static方法、final方法或者類的構造器方法聲明為abstract
native
用該修飾符定義的方法在類中沒有實現,而大多數情況下該方法的實現是用C、C++編寫的。
參見Sun的Java Native接口(JNI),JNI提供了運行時加載一個native方法的實現,并將其于一個Java類關聯的功能
synchronized
多線程的支持
當一個方法被調用時,沒有其它線程能夠調用該方法,其它的synchronized方法也不能調用該方法,直到該方法返回
接口
訪問修飾符?interface 接口名稱?extends 接口列表
l???????? 接口不能夠定義其聲明的方法的任何實現
l???????? 接口中的變量總是需要定義為“public static final 接口名稱”,但可以不包含這些修飾符,編譯器默認就是這樣,顯示的包含修飾符主要是為了程序清晰
訪問修飾符
名稱
說明
備注
public
所有
無訪問修飾符(默認)
訪問修飾符
名稱
說明
備注
public
可以被所有類訪問(使用)
public類必須定義在和類名相同的同名文件中
package
可以被同一個包中的類訪問(使用)
默認的訪問權限,可以省略此關鍵字,可以定義在和public類的同一個文件中
private
修飾內部類
修飾符
名稱
說明
備注
final
使用此修飾符的類不能夠被繼承
abstract
如果要使用abstract類,之前必須首先建一個繼承abstract類的新類,新類中實現abstract類中的抽象方法。
類只要有一個abstract方法,類就必須定義為abstract,但abstract類不一定非要保護abstract方法不可
變量
l???????? Java中沒有全局變量,只有方法變量、實例變量(類中的非靜態變量)、類變量(類中的靜態變量)。
l???????? 方法中的變量不能夠有訪問修飾符。所以下面訪問修飾符表僅針對于在類中定義的變量。
l???????? 聲明實例變量時,如果沒有賦初值,將被初始化為null(引用類型)或者0、false(原始類型)。
l???????? 可以通過實例變量初始化器來初始化較復雜的實例變量,實例變量初始化器是一個用{}包含的語句塊,在類的構造器被調用時運行,運行于父類構造器之后,構造器之前。
l??????????? 類變量(靜態變量)也可以通過類變量初始化器來進行初始化,類變量初始化器是一個用static{}包含的語句塊,只可能被初始化一次。
訪問修飾符
名稱
說明
備注
public
可以被任何類訪問
protected
可以被同一包中的所有類訪問
可以被所有子類訪問
子類沒有在同一包中也可以訪問
private
只能夠被當前類的方法訪問
缺省
無訪問修飾符
可以被同一包中的所有類訪問
如果子類沒有在同一個包中,也不能訪問
修飾符
名稱
說明
備注
static
靜態變量(又稱為類變量,其它的稱為實例變量)
可以被類的所有實例共享。
并不需要創建類的實例就可以訪問靜態變量
final
常量,值只能夠分配一次,不能更改
注意不要使用const,雖然它和C、C++中的const關鍵字含義一樣
可以同static一起使用,避免對類的每個實例維護一個拷貝
transient
告訴編譯器,在類對象序列化的時候,此變量不需要持久保存
主要是因為改變量可以通過其它變量來得到,使用它是為了性能的問題
volatile
指出可能有多個線程修改此變量,要求編譯器優化以保證對此變量的修改能夠被正確的處理
方法
訪問修飾符修飾符返回類型方法名稱(參數列表)throws 違例列表
l 類的構造器方法不能夠有修飾符、返回類型和throws子句
l? 類的構造器方法被調用時,它首先調用父類的構造器方法,然后運行實例變量和靜態變量的初始化器,然后才運行構造器本身。
l? 如果構造器方法沒有顯示的調用一個父類的構造器,那么編譯器會自動為它加上一個默認的super(),而如果父類又沒有默認的無參數構造器,編譯器就會報錯。super必須是構造器方法的第一個子句。
l? 注意理解private構造器方法的使用技巧。
訪問修飾符
名稱
說明
備注
public
可以從所有類訪問
protected
可以被同一包中的所有類訪問
可以被所有子類訪問
子類沒有在同一包中也可以訪問
private
只能夠被當前類的方法訪問
缺省
無訪問修飾符
可以被同一包中的所有類訪問
如果子類沒有在同一個包中,也不能訪問
修飾符
名稱
說明
備注
static
靜態方法(又稱為類方法,其它的稱為實例方法)
提供不依賴于類實例的服務
并不需要創建類的實例就可以訪問靜態方法
final
防止任何子類重載該方法
注意不要使用const,雖然它和C、C++中的const關鍵字含義一樣
可以同static一起使用,避免對類的每個實例維護一個拷貝
abstract
抽象方法,類中已聲明而沒有實現的方法
不能將static方法、final方法或者類的構造器方法聲明為abstract
native
用該修飾符定義的方法在類中沒有實現,而大多數情況下該方法的實現是用C、C++編寫的。
參見Sun的Java Native接口(JNI),JNI提供了運行時加載一個native方法的實現,并將其于一個Java類關聯的功能
synchronized
多線程的支持
當一個方法被調用時,沒有其它線程能夠調用該方法,其它的synchronized方法也不能調用該方法,直到該方法返回
接口
訪問修飾符?interface 接口名稱?extends 接口列表
l???????? 接口不能夠定義其聲明的方法的任何實現
l???????? 接口中的變量總是需要定義為“public static final 接口名稱”,但可以不包含這些修飾符,編譯器默認就是這樣,顯示的包含修飾符主要是為了程序清晰
訪問修飾符
名稱
說明
備注
public
所有
無訪問修飾符(默認)
C++ Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。