乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      java中的修飾符static與靜態(tài)方法final的用法

       zjjyyy 2010-07-04
      • 一、static
          修飾屬性,方法,代碼塊

        1、靜態(tài)方法:
           使這個(gè)方法成為整個(gè)類所公有的方法,可以用   類名.方法名  直接訪問  
          
           注意:static修飾的方法,不能直接訪問(可以通過組合方式訪問)本類中的非靜態(tài)(static)成員(包括方法和屬性)
                 本類的非靜態(tài)(static)方法可以訪問本類的靜態(tài)成員(包括方法和屬性),可以調(diào)用靜態(tài)方法。
                 靜態(tài)方法要慎重使用。在靜態(tài)方法中不能出現(xiàn)this關(guān)鍵字,因?yàn)檫@是針對(duì)對(duì)象而言的。
                
           java中的main方法必須寫成static的,因?yàn)?,在類加載時(shí)無法創(chuàng)建對(duì)象,靜態(tài)方法可以不通過對(duì)象調(diào)用。
           所以在類加載時(shí)就可以通過main方法入口來運(yùn)行程序。        
          
           注意:父類中是靜態(tài)方法,子類中不能覆蓋為非靜態(tài)方法。
                 在符合覆蓋規(guī)則的前提下,在父子類中,父類中的靜態(tài)方法可以被子類中的靜態(tài)方法覆蓋,但是沒有多態(tài)。
                 使用引用調(diào)靜態(tài)方法,相當(dāng)于使用引用的類型去調(diào)用靜態(tài)方法。(在使用對(duì)象調(diào)用靜態(tài)方法是其實(shí)是調(diào)用編譯時(shí)類型的靜態(tài)方法)


        2、靜態(tài)屬性:全類公有,稱為類變量
                     那么這個(gè)屬性就可以用  類名.屬性名  來訪問
                     (共有的類變量與對(duì)象無關(guān),只和類有關(guān))
           類加載:虛擬機(jī)通過I/O流把一個(gè)類的信息從字節(jié)碼文件中讀入虛擬機(jī)并保存起來  
                   一個(gè)類只會(huì)加載一次
           類變量,會(huì)在加載時(shí)自動(dòng)初始化,初始化規(guī)則和實(shí)例變量相同。
           注意:類中的實(shí)例變量是在創(chuàng)建對(duì)象時(shí)被初始化的,被static修飾的屬性,也就是類變量,是在類加載時(shí)被創(chuàng)建并進(jìn)行初始化,類加載的過程是進(jìn)行一次。也就是類變量只會(huì)被創(chuàng)建一次。
                
        3、初始代碼塊
           在定義屬性的位置上,在任何方法之外,定義一個(gè)代碼塊  
           動(dòng)態(tài)初始代碼塊:在初始化屬性之前調(diào)用初始化代碼塊  {……}
           靜態(tài)初始代碼塊:在類加載時(shí)運(yùn)行    static{……}  只被運(yùn)行一次,往往用作一個(gè)類的準(zhǔn)備工作
          
        二、一個(gè)類在什么時(shí)候被加載?時(shí)機(jī)  (延遲加載,能不加載就不加載)
        (1)new 一個(gè)對(duì)象的時(shí)候,加載
        (2)沒有創(chuàng)建對(duì)象,訪問類中靜態(tài)成員(方法和屬性),加載
        (3)聲明一個(gè)類的引用,不加載
        (4)創(chuàng)建子類,先加載父類,再加載子類
        (5)父類中的公開靜態(tài)方法,子類繼承,使用子類的類名調(diào)用此方法,加載父類
             class Super{
                  public static m(){}
             }
             class Sub extends Super{}
             在主函數(shù)中運(yùn)行以下代碼:
             Sub.m();   //加載了父類之后,虛擬機(jī)已經(jīng)知道m(xù)()方法的調(diào)用了,就不會(huì)再加載子類,延遲加載
        (6)沒有創(chuàng)建對(duì)象,訪問類中靜態(tài)常量(能計(jì)算出結(jié)果的常量,在編譯的時(shí)候會(huì)用計(jì)算出來的結(jié)果替換表達(dá)式),不加載  
             沒有創(chuàng)建對(duì)象,訪問類中靜態(tài)常量(不確定的值),加載  
        (7)CoreJava day16    
            
            
        三、設(shè)計(jì)模式(編程套路)    
           GOF(Group Of Four)四人幫模式 23種
          
        1、單例模式 Singleton:
          
           class A{
                private static A a = new A();  //私有靜態(tài)的實(shí)例變量指向自己,在類加載時(shí)創(chuàng)建唯一對(duì)象
                public static A newInstance(){ //提供公開靜態(tài)的訪問點(diǎn),回返唯一實(shí)例
                    return a;
                }
                private A(){}      //私有的構(gòu)造方法,防止濫用
           }
          
        2、不變模式 :
           便于實(shí)例共享,減少對(duì)存儲(chǔ)空間的消耗
           String類采用了不變模式
           字符串中的內(nèi)容是不變的
          
           String a1 = "123";  //系統(tǒng)會(huì)先去串池中找"123",找到,就共享使用一個(gè),沒找到就在串池中創(chuàng)建一個(gè)
           String a2 = new String("123");  //在堆空間中創(chuàng)建"123"
          
           池化的思想,把需要共享的數(shù)據(jù)放在池中(節(jié)省空間,共享數(shù)據(jù))
           只有String類可以用“”中的字面值創(chuàng)建對(duì)象。
           在String類中,以字面值創(chuàng)建時(shí),會(huì)到串池空間中去查找,如果有就返回串池中字符串的地址,并把這個(gè)地址付給對(duì)象變量。
           如果沒有則會(huì)在串池里創(chuàng)建一個(gè)字符串對(duì)象,并返回其地址付購(gòu)對(duì)象變量,當(dāng)另一個(gè)以字面值創(chuàng)建對(duì)象時(shí)則會(huì)重復(fù)上述過程。
           如果是new在堆空間中創(chuàng)建String類的對(duì)象,則不會(huì)有上述的過程。
          
           a2=a1.intern();  //返回字符串在串池中的引用
          
           消極方面:字符串連接“+”,產(chǎn)生很多的中間對(duì)象
                     StringBuffer類,字符串是可變的
                     s.append("A");  //連接字符串,不創(chuàng)建中間對(duì)象
                     大量字符串連接的時(shí)候用StringBuffer取代String
          
          
        四、final
        修飾變量,方法,類

        1、修飾變量
           被fianl修飾的變量就是常量(常量名大寫),一旦賦值不能改變  
           修飾局部變量:修飾基本數(shù)據(jù)類型 -> 變量的值不能改變
                         修飾引用 -> 引用只能指向固定的對(duì)象
           修飾實(shí)例變量:默認(rèn)值不生效,可以再賦值
                         有兩次賦值機(jī)會(huì):初始化變量的時(shí)候 final int a = 20;  對(duì)于直接在初始化時(shí)賦值,final修飾符常和static修飾符一起使用,避免浪費(fèi)空間
                                         構(gòu)造方法中設(shè)置  this.a = a;
                                         但是不能同時(shí)使用這兩種方法                                                                
                         在一個(gè)對(duì)象完成創(chuàng)建的時(shí)候,對(duì)象中的所有final屬性必須都完成賦值
           類變量可以是final的,也有兩次賦值機(jī)會(huì) :定義變量的時(shí)候就賦值 ; 靜態(tài)初始代碼塊中    

          
        2、修飾類
            不能被繼承  
            在樹狀單繼承關(guān)系中,final類是樹葉節(jié)點(diǎn)
            在一個(gè)final類中的所有方法,默認(rèn)都是final的
            
          注意:final,不能用來修飾構(gòu)造方法。
                在父類中如果有常量屬性,在子類中使用常量屬性時(shí)是不會(huì)進(jìn)行父類的類加載。
                靜態(tài)常量如果其值可以確定,就不會(huì)加載該類,如果不能確定則會(huì)加載該常量所在的類。  
                class Super{
                   private final void m(){}   //用final可以證明出private的方法不繼承給子類
                }
                class Sub extends Super{
                   public void m(){}  //不是方法的覆蓋
                }        

        3、修飾方法                
            不能被子類覆蓋  
            從面向?qū)ο蟮慕嵌壤斫猓梢员3植僮鞯姆€(wěn)定性
                
        五、abstract 抽象的
          修飾類和方法            
          
        1、修飾類 ->  抽象類
            不能創(chuàng)建對(duì)象,可以聲明引用,并通過引用調(diào)用類中的方法
            主要用于被子類繼承的,可以用父類引用指向子類對(duì)象
            
        2、修飾方法
            只有聲明,沒有實(shí)現(xiàn),用“;”代替“{ }”    
            需要子類繼承實(shí)現(xiàn)(覆蓋)。
            
            如果一個(gè)類中有抽象方法,那么這個(gè)類必須是抽象類。
            抽象類中不一定有抽象方法
              
            注意:父類是抽象類,其中有抽象方法,子類繼承父類,必須把父類中的所有抽象方法都實(shí)現(xiàn)(覆蓋)了,子類才有創(chuàng)建對(duì)象的能力,
                  否則子類也必須是抽象類。
                  抽象類中可以有構(gòu)造方法,是子類在構(gòu)造子類對(duì)象時(shí)需要調(diào)用的父類(抽象類)的構(gòu)造方法。
                  
           抽象類的合理性:
              沒有抽象類的實(shí)例,只有抽象類子類的實(shí)例
              抽象方法,定義和實(shí)現(xiàn)分離    
              
              抽象(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)  
              
        六、三個(gè)修飾符都能修飾方法(不包含構(gòu)造方法)
        1、構(gòu)造方法在創(chuàng)建對(duì)象的時(shí)候使用,如果是static,那么只會(huì)在加載類的時(shí)候調(diào)用一次
           構(gòu)造方法不能被繼承(final),談不到覆蓋,更不會(huì)由子類實(shí)現(xiàn)(abstract)
        2、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)用。
           所以上的修飾符不能放在一起。          

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多