導航:首頁 > 編程語言 > java修飾符作用

java修飾符作用

發布時間:2024-08-19 23:01:46

java中的修飾符

static 表示靜態,它可以修飾屬性,方法和代碼塊。

1,static修飾屬性(類變數),那麼這個屬性就可以用 類名.屬性名 來訪問,也就是使這個屬性成為本類的類變數,為本類對象所共有。這個屬性就是全類公有。(共有的類變數與對象無關,只和類有關)。

類載入的過程,類本身也是保存在文件中(位元組碼文件保存著類的信息)的,java會通過I/O流把類的文件(位元組碼文件)讀入JVM(java虛擬機),這個過程成為類的載入。JVM(java虛擬機)會通過類路徑(CLASSPATH)來找位元組碼文件。

類變數,會在載入時自動初始化,初始化規則和實例變數相同。

注意:類中的實例變數是在創建對象時被初始化的,被static修飾的屬性,也就是類變數,是在類載入時被創建並進行初始化,類載入的過程是進行一次。也就是類變數只會被創建一次。

2,static修飾方法(靜態方法),會使這個方法成為整個類所公有的方法,可以用類名.方法名 訪問。

注意:static修飾的方法,不直接能訪問(可以通過組合方式訪問)本類中的非靜態(static)成員(包括方法和屬性),本類的非靜態(static)方法可以訪問本類的靜態成員(包括方法和屬性),可以調用靜態方法。靜態方法要慎重使用。在靜態方法中不能出現this關鍵字。

注意:父類中是靜態方法,子類中不能覆蓋為非靜態方法,在符合覆蓋規則的前提下,在父子類中,父類中的靜態方法可以被子類中的靜態方法覆蓋,但是沒有多態。(在使用對象調用靜態方法是其實是調用編譯時類型的靜態方法)

注意:父子類中,靜態方法只能被靜態方法覆蓋,父子類中,非靜態方法只能被非靜態方法覆蓋。

java中的main方法必須寫成static的因為,在類載入時無法創建對象,因為靜態方法可以不通過對象調用
所以在類的main方法。所在在類載入時就可以通過main方法入口來運行程序。

注意:組合方式,就是需要在方法中創建一個所需要的對象,並用這個對象來調用任意所需的該對象的內容,不會再受只能訪問靜態的約束。

3,static修飾初始代碼塊,這時這個初始代碼塊就叫做靜態初始代碼塊,這個代碼塊只在類載入時被執行一次。可以用靜態初始代碼塊初始化一個類。

動態初始代碼塊,寫在類體中的「{}」,這個代碼塊是在生成對象的初始化屬性是運行。這種代碼塊叫動態初始代碼塊。

類在什麼時候會被載入,構造(創建)對象時會載入類,調用類中靜態方法或訪問靜態屬性也是會載入這個靜態方法真正所在的類。在構造子類對象時必會先載入父類,類載入會有延遲載入原則,只有在必須載入時才會載入。

final修飾符,可以修飾變數,方法,類

1,final修飾變數
被fianl修飾的變數就會變成常量(常量應當大寫),一旦賦值不能改變,(可以在初始化時直接賦值,也可以在構造方法里也可以賦值,只能在這兩種方法里二選一,不能不為常量賦值),fianl的常量不會有默認初始值,對於直接在初始化是賦值時final修飾符常和static修飾符一起使用。

2,final修飾方法,被final修飾的方法將不能被其子類覆蓋,保持方法的穩定不能被覆蓋。
3,final修飾類,被final修飾的類將不能被繼承。final類中的方法也都是final的。

注意:final,不能用來修飾構造方法,在父類中如果有常量屬性,在子類中使用常量屬性時是不會進行父類的類載入。靜態常量如果其值可以確定,就不會載入該類,如果不能確定則會載入該常量所在的類。

不變模式,對象一旦創建屬性就不會改變。用final修飾屬性,也用final修飾類(強不變模式),用final修飾屬性(弱不變模式)。

不變模式的典型體現:java.lang.String類,不變模式可以實現對象的共享(可以用一個對象實例賦值給多個對象變數。)

池化的思想,把需要共享的數據放在池中(節省空間,共享數據)
只有String類可以用「」中的字面值創建對象。在String類中,以字面值創建時,會到Java方法空間的串池空間中去查找,如果有就返回串池中字元串的地址,並把這個地址付給對象變數。如果沒有則會在串池裡創建一個字元串對象,並返回其地址付購對象變數,當另一個以字面值創建對象時則會重復上述過程。
如果是new在堆空間中創建String類的對象,則不會有上述的過程。

String類中的intern()方法會將在堆空間中創建的String類對象中的字元串和串池中的比對,如果有相同的串就返回這個串的串池中的地址。

不變模式在對於對象進行修改,添加操作是使相當麻煩的,他會產生很多的中間垃圾對象。創建和銷毀的資源的開銷是相當大的。

String類在字元串連接時會先的效率很低,就是因為它所產生的對象的書性是不能夠修改的,當連接字元串時也就是只能創建新的對象。

對於很多的字元串連接,應當使用StringBuffer類,在使用這個類的對象來進行字元串連接時就不會有多餘的中間對象生成,從而優化了效率。

abstract(抽象)修飾符,可以修飾類和方法

1,abstract修飾類,會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變數聲明的類型,也就是編譯時類型,抽象類就像當於一類的半成品,需要子類繼承並覆蓋其中的抽象方法。

2,abstract修飾方法,會使這個方法變成抽象方法,也就是只有聲明(定義)而沒有實現,實現部分以";"代替。需要子類繼承實現(覆蓋)。

注意:有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。
abstract修飾符在修飾類時必須放在類名前。

abstract修飾方法就是要求其子類覆蓋(實現)這個方法。調用時可以以多態方式調用子類覆蓋(實現)後的方法,也就是說抽象方法必須在其子類中實現,除非子類本身也是抽象類。

注意:父類是抽象類,其中有抽象方法,那麼子類繼承父類,並把父類中的所有抽象方法都實現(覆蓋)了,子類才有創建對象的實例的能力,否則子類也必須是抽象類。抽象類中可以有構造方法,是子類在構造子類對象時需要調用的父類(抽象類)的構造方法。

final和abstract,private和abstract,static和abstract,這些是不能放在一起的修飾符,因為abstract修飾的方法是必須在其子類中實現(覆蓋),才能以多態方式調用,以上修飾符在修飾方法時期子類都覆蓋不了這個方法,final是不可以覆蓋,private是不能夠繼承到子類,所以也就不能覆蓋,static是可以覆蓋的,但是在調用時會調用編譯時類型的方法,因為調用的是父類的方法,而父類的方法又是抽象的方法,又不能夠調用,所以上的修飾符不能放在一起。

抽象(abstract)方法代表了某種標准,定義標准,定義功能,在子類中去實現功能(子類繼承了父類並需要給出從父類繼承的抽象方法的實現)。
方法一時間想不到怎麼被實現,或有意要子類去實現而定義某種標准,這個方法可以被定義為抽象。(abstract)

模板方法模式

用abstract把制訂標准和實現標准分開,制定的標准就是模板,實現就是按模板標准來實現,也就是繼承模板,實現模板中相應功能的方法。模板中不允許修改的方法可以用fianl來修飾,這個方法不能使抽象方法,為保證安全,封裝,把模板中不公開的部分用protected(保護)修飾。

❷ java修飾符作用范圍

1、java中的修飾符

1)訪問修飾符:

2)靜態修飾符:


static是一個修飾符,用於修飾成員(成員變數和成員函數)

❸ java中有幾種修飾符

java中的修飾符分為類修飾符,欄位修飾符,方法修飾符。根據功能的不同,主要分為以下五種。

1、許可權訪問修飾符

public,protected,default,private,這四種級別的修飾符都可以用來修飾類、方法和欄位。

(3)java修飾符作用擴展閱讀:

修飾符的特點:

static是一個修飾符,用於修飾成員(成員變數和成員函數)

靜態成員隨著類的載入而載入。靜態成員優先於對象存在。靜態成員被所有對象所共享靜態成員多了一個中調用方式,可以被類名直接調用。

使用的注意事項:

靜態方法只能訪問靜態成員, 非靜態方法既可以訪問靜態又可以訪問非靜態。靜態方法中不可以定義this,super關鍵字。因為this代表是對象。而靜態存在時,有可能沒有對象。所以靜態方法運行時,this是沒有任何對象代表的。

簡單說,先進內存的數據不可以訪問後進內存的數據,可是後進內存數據可以訪問先進內存的數據。主函數是靜態的。

閱讀全文

與java修飾符作用相關的資料

熱點內容
python數字字元串轉數字 瀏覽:657
c程序員可以轉互聯網嗎 瀏覽:490
深圳交醫保用什麼app 瀏覽:461
pdf合並成一張 瀏覽:670
ie9文件夾怎麼查看ftp 瀏覽:62
唯品會python解密 瀏覽:852
安卓高拍儀有什麼用 瀏覽:241
同步盤用什麼app好 瀏覽:188
伺服器上下載是什麼意思 瀏覽:169
s6怎麼接電話加密 瀏覽:152
電腦的命令指令符打不開怎麼辦 瀏覽:535
可編程邏輯器件cpld開發板 瀏覽:888
加裝文件夾圖片 瀏覽:425
27歲程序員offer 瀏覽:619
中國建築史梁思成pdf 瀏覽:198
單片機雙核與單核區別 瀏覽:850
xss攻擊需要編譯的符號 瀏覽:140
南京單片機定址 瀏覽:897
自製西門子編程電纜 瀏覽:807
伺服器還叫什麼名 瀏覽:712