欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java修飾符 abstract,static,final 的區(qū)別詳解

 更新時間:2013年09月17日 09:16:03   作者:  
以下是對Java修飾符abstract,static,final的區(qū)別進行了詳細的介紹,需要的朋友可以過來參考下

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

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

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

類變量,會在加載時自動初始化,初始化規(guī)則和實例變量相同。

注意:類中的實例變量是在創(chuàng)建對象時被初始化的,被static修飾的屬性,也就是類變量,是在類加載時被創(chuàng)建并進行初始化,類加載的過程是進行一次。也就是類變量只會被創(chuàng)建一次。

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

注意:static修飾的方法,不直接能訪問本類中的非靜態(tài)(static)成員(包括方法和屬性),本類的非靜態(tài)(static)方法可以訪問本類的靜態(tài)成員(包括方法和屬性),可以調(diào)用靜態(tài)方法。靜態(tài)方法要慎重使用。在靜態(tài)方法中不能出現(xiàn)this關(guān)鍵字。

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

注意:父子類中,靜態(tài)方法只能被靜態(tài)方法覆蓋,父子類中,非靜態(tài)方法只能被非靜態(tài)方法覆蓋。

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

3.static修飾初始代碼塊,這時這個初始代碼塊就叫做靜態(tài)初始代碼塊,這個代碼塊只在類加載時被執(zhí)行一次。可以用靜態(tài)初始代碼塊初始化一個類。

動態(tài)初始代碼塊,寫在類體中的“{}”,這個代碼塊是在生成對象的初始化屬性是運行。這種代碼塊叫動態(tài)初始代碼塊。

類在什么時候會被加載,創(chuàng)建對象時會加載類,調(diào)用類中靜態(tài)方法或訪問靜態(tài)屬性也是會加載類的。在加載子類時必會先加載父類,類加載會有延遲加載原則,只有在必須加載時才會加載。

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

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

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

注意:final,不能用來修飾構(gòu)造方法,在父類中如果有常量屬性,在子類中使用常量屬性時是不會進行父類的類加載。

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

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

池化的思想,把需要共享的數(shù)據(jù)放在池中(節(jié)省空間,共享數(shù)據(jù))
只有String類可以用“”中的字面值創(chuàng)建對象。在String類中,以字面值創(chuàng)建時,會到Java方法空間的串池空間中去查找,如果有就返回串池中字符串的地址,并把這個地址付給對象變量。如果沒有則會在串池里創(chuàng)建一個字符串對象,并返回其地址付購對象變量,當(dāng)另一個以字面值創(chuàng)建對象時則會重復(fù)上述過程。
如果是new在堆空間中創(chuàng)建String類的對象,則不會有上述的過程。

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

不變模式在對于對象進行修改,添加操作是使相當(dāng)麻煩的,他會產(chǎn)生很多的中間垃圾對象。創(chuàng)建和銷毀的資源的開銷是相當(dāng)大的。

String類在字符串連接時會先的效率很低,就是因為它所產(chǎn)生的對象的書性是不能夠修改的,當(dāng)連接字符串時也就是只能創(chuàng)建新的對象。

對于很多的字符串連接,應(yīng)當(dāng)使用StringBuffer類,在使用這個類的對象來進行字符串連接時就不會有多余的中間對象生成,從而優(yōu)化了效率。

abstract(抽象)修飾符,可以修飾類和方法
1.abstract修飾類,
會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變量聲明的類型,也就是編譯時類型,抽象類就像當(dāng)于一類的半成品,需要子類繼承并覆蓋其中的抽象方法。

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

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

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

注意:父類是抽象類,其中有抽象方法,那么子類繼承父類,并把父類中的所有抽象方法都實現(xiàn)(覆蓋)了,子類才有創(chuàng)建對象的實例的能力,否則子類也必須是抽象類。抽象類中可以有構(gòu)造方法,是子類在構(gòu)造子類對象時需要調(diào)用的父類(抽象類)的構(gòu)造方法。

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

抽象(abstract)方法代表了某種標(biāo)準(zhǔn),定義標(biāo)準(zhǔn),定義功能,在子類中去實現(xiàn)功能(子類繼承了父類并需要給出從父類繼承的抽象方法的實現(xiàn))。
方法一時間想不到怎么被實現(xiàn),或有意要子類去實現(xiàn)而定義某種標(biāo)準(zhǔn),這個方法可以被定義為抽象。(abstract)

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

相關(guān)文章

  • Java實現(xiàn)布隆過濾器的方法步驟

    Java實現(xiàn)布隆過濾器的方法步驟

    布隆過濾器是可以用于判斷一個元素是不是在一個集合里,并且相比于其它的數(shù)據(jù)結(jié)構(gòu),布隆過濾器在空間和時間方面都有巨大的優(yōu)勢。下面這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)布隆過濾器的相關(guān)資料,需要的朋友可以參考下
    2018-11-11
  • 圖解Java經(jīng)典算法快速排序的原理與實現(xiàn)

    圖解Java經(jīng)典算法快速排序的原理與實現(xiàn)

    快速排序是基于二分的思想,對冒泡排序的一種改進。主要思想是確立一個基數(shù),將小于基數(shù)的數(shù)放到基數(shù)左邊,大于基數(shù)的數(shù)字放到基數(shù)的右邊,然后在對這兩部分進一步排序,從而實現(xiàn)對數(shù)組的排序
    2022-09-09
  • JAVA拋出異常的三種形式詳解

    JAVA拋出異常的三種形式詳解

    這篇文章主要介紹了JAVA拋出異常的三種形式詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Spring定時服務(wù)QuartZ原理及代碼案例

    Spring定時服務(wù)QuartZ原理及代碼案例

    這篇文章主要介紹了Spring定時服務(wù)QuartZ原理及代碼案例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 淺談java Iterator.remove()方法的用法(詳解)

    淺談java Iterator.remove()方法的用法(詳解)

    下面小編就為大家?guī)硪黄獪\談java Iterator.remove()方法的用法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Java正則表達式實現(xiàn)在文本中匹配查找換行符的方法【經(jīng)典實例】

    Java正則表達式實現(xiàn)在文本中匹配查找換行符的方法【經(jīng)典實例】

    這篇文章主要介紹了Java正則表達式實現(xiàn)在文本中匹配查找換行符的方法,結(jié)合具體實例分析了java正則匹配查找換行符的實現(xiàn)技巧與匹配模式相關(guān)操作注意事項,需要的朋友可以參考下
    2017-04-04
  • Java?遠程調(diào)用失敗重試的操作方法

    Java?遠程調(diào)用失敗重試的操作方法

    這篇文章主要介紹了Java?遠程調(diào)用失敗重試的操作方法,今天給大家介紹了一下?Spring??的?@Retryable?注解使用,并通過幾個 demo 來帶大家編寫了自己重試攔截器以及回滾方法,需要的朋友可以參考下
    2022-09-09
  • MyBatis使用resultMap如何解決列名和屬性名不一致

    MyBatis使用resultMap如何解決列名和屬性名不一致

    這篇文章主要介紹了MyBatis使用resultMap如何解決列名和屬性名不一致的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JavaCV攝像頭實戰(zhàn)之實現(xiàn)口罩檢測

    JavaCV攝像頭實戰(zhàn)之實現(xiàn)口罩檢測

    這篇文章主要介紹了利用JavaCV實現(xiàn)口罩檢測,功能是檢測攝像頭內(nèi)的人是否帶了口罩,把檢測結(jié)果實時標(biāo)注在預(yù)覽窗口。感興趣的可以試一試
    2022-01-01
  • Java的無參構(gòu)造函數(shù)用法實例分析

    Java的無參構(gòu)造函數(shù)用法實例分析

    這篇文章主要介紹了Java的無參構(gòu)造函數(shù)用法,結(jié)合實例形式分析了java無參構(gòu)造函數(shù)基本原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09

最新評論