最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

類變量,會(huì)在加載時(shí)自動(dòng)初始化,初始化規(guī)則和實(shí)例變量相同。

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

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

注意: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)。(在使用對(duì)象調(diào)用靜態(tài)方法是其實(shí)是調(diào)用編譯時(shí)類型的靜態(tài)方法)

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

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

3.static修飾初始代碼塊,這時(shí)這個(gè)初始代碼塊就叫做靜態(tài)初始代碼塊,這個(gè)代碼塊只在類加載時(shí)被執(zhí)行一次??梢杂渺o態(tài)初始代碼塊初始化一個(gè)類。

動(dòng)態(tài)初始代碼塊,寫在類體中的“{}”,這個(gè)代碼塊是在生成對(duì)象的初始化屬性是運(yùn)行。這種代碼塊叫動(dòng)態(tài)初始代碼塊。

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

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

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

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

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

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

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

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

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

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

String類在字符串連接時(shí)會(huì)先的效率很低,就是因?yàn)樗a(chǎn)生的對(duì)象的書性是不能夠修改的,當(dāng)連接字符串時(shí)也就是只能創(chuàng)建新的對(duì)象。

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • 一文搞懂并學(xué)會(huì)使用SpringBoot的Actuator運(yùn)行狀態(tài)監(jiān)控組件的詳細(xì)教程

    一文搞懂并學(xué)會(huì)使用SpringBoot的Actuator運(yùn)行狀態(tài)監(jiān)控組件的詳細(xì)教程

    這篇文章主要介紹了一文搞懂并學(xué)會(huì)使用SpringBoot的Actuator運(yùn)行狀態(tài)監(jiān)控組件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 基于Java事件監(jiān)聽編寫一個(gè)中秋猜燈謎小游戲

    基于Java事件監(jiān)聽編寫一個(gè)中秋猜燈謎小游戲

    眾所周知,JavaSwing是Java中關(guān)于窗口開發(fā)的一個(gè)工具包,可以開發(fā)一些窗口程序,然后由于工具包的一些限制,導(dǎo)致Java在窗口開發(fā)商并沒有太多優(yōu)勢(shì),不過,在JavaSwing中關(guān)于事件的監(jiān)聽機(jī)制是我們需要重點(diǎn)掌握的內(nèi)容,本文將基于Java事件監(jiān)聽編寫一個(gè)中秋猜燈謎小游戲
    2023-09-09
  • Java多線程:生產(chǎn)者與消費(fèi)者案例

    Java多線程:生產(chǎn)者與消費(fèi)者案例

    這篇文章主要介紹了Java并發(fā)編程中的生產(chǎn)者與消費(fèi)者模型簡(jiǎn)述,多線程并發(fā)是Java編程中最終要的部分之一,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • idea2019版Plugins中搜索不到任何插件的問題解決

    idea2019版Plugins中搜索不到任何插件的問題解決

    本文主要介紹了idea2019版Plugins中搜索不到任何插件的問題解決,插件搜不出來的主要原因是plugins.jetbrains.com ping不通,下面就來介紹一下解決方法,感興趣的可以了解一下
    2023-09-09
  • 深入理解框架背后的原理及源碼分析

    深入理解框架背后的原理及源碼分析

    這篇文章來為大家深入的介紹了框架背后的原理及源碼分析,希望大家能夠更深層次的理解并使用好框架,在此與君共勉,框架雖好,但不要丟了其背后的原理
    2022-01-01
  • Spring 實(shí)現(xiàn)excel及pdf導(dǎo)出表格示例

    Spring 實(shí)現(xiàn)excel及pdf導(dǎo)出表格示例

    本篇文章主要介紹了Spring 實(shí)現(xiàn)excel及pdf導(dǎo)出表格示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • java框架基礎(chǔ)之SPI機(jī)制實(shí)現(xiàn)及源碼解析

    java框架基礎(chǔ)之SPI機(jī)制實(shí)現(xiàn)及源碼解析

    這篇文章主要為大家介紹了java框架基礎(chǔ)之SPI機(jī)制實(shí)現(xiàn)及源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • springboot枚舉類型傳遞的步驟

    springboot枚舉類型傳遞的步驟

    這篇文章主要介紹了springboot枚舉類型傳遞的步驟,幫助大家更好的理解和學(xué)習(xí)使用springboot,感興趣的朋友可以了解下
    2021-04-04
  • 一文詳解Spring事務(wù)的實(shí)現(xiàn)與本質(zhì)

    一文詳解Spring事務(wù)的實(shí)現(xiàn)與本質(zhì)

    這篇文章主要介紹了Spring中事務(wù)的兩種實(shí)現(xiàn)方式:聲明式事務(wù)、編程式事務(wù)以及他們的本質(zhì)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • 超詳細(xì)講解Java線程池

    超詳細(xì)講解Java線程池

    本文主要介紹了Java線程池,本文運(yùn)用大量代碼和圖片講解相關(guān)知識(shí),感興趣的小伙伴一起來看看吧
    2021-09-09

最新評(píng)論

台南县| 宁都县| 胶南市| 韶山市| 阳泉市| 东兰县| 澜沧| 海城市| 星子县| 林西县| 巴中市| 鲁甸县| 南岸区| 乐清市| 安乡县| 枣阳市| 邹城市| 南溪县| 兰考县| 盐城市| 昭苏县| 北碚区| 新巴尔虎左旗| 青州市| 莱阳市| 珲春市| 皮山县| 丹巴县| 河津市| 临桂县| 武义县| 巴塘县| 阿拉善盟| 巴楚县| 天台县| 长寿区| 西藏| 浦江县| 大方县| 阿克苏市| 布拖县|