黑馬程序員---2015.6.14java基礎筆記--靜態方--靜態代碼塊--單例模式

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------

1.什麼時候可以將方法定義爲靜態方法(將整個類定義爲工具類)?

    a.類中的每個方法都沒有用到類的對象的特有數據
    b.這時就可以考慮將方法定義成static,直接通過類名調用即可
    c.但是該類還是可以被其他程序建立對象,
        爲了更嚴謹,強制讓該類不能建立對象
        可以通過構造函數私有化完成
        
2.如何製作java程序說明書?
        a.通過文檔註釋來完成。
        b.此類必須定義成public類型
        c.而且生成的文檔中,只能顯示public的函數。因爲private是不需要對外公開的
      
<span style="font-size:14px;"> /**            簡單測試:生產java幫助文檔                @author 喬棟              
  @version 1        
*/       
 public class TestPerson      
  {           
    private String name;          
    private int age;           
    /**  設置年齡 
            @param age 接受一個int型數字           
    */            
   public void setAge(int age)
 {               
        this.age = age;        

    }                       
  /** 
     獲取年齡                
     @return 返回年齡           
  */           
     public int getAge() 
   {         
        return age;    
     } 
    }</span>

<span style="font-size:14px;">  public class TestPerson        {            private String name;            private int age;            /**                設置年齡                @param age 接受一個int型數字            */            public void setAge(int age) {                this.age = age;            }                        /**                獲取年齡                @return 返回年齡            */            public int getAge() {                return age;            }        }</span>


        cmd中的寫法:javadoc -d myhelp -author -version TestPerson.java
3.默認構造函數:
        一個類中會有一個默認的空參數的構造函數
        類爲public時,此構造也爲public;即默認構造函數和類的權限一致。
4.靜態代碼塊
        static {
            靜態代碼。。
        }        
    特點:隨着類的加載而加載,且只執行一次,並且優於主函數
                用於給類初始化的
                
    具體的一個使用實例!!!!

     
<span style="font-size:14px;">  class StaticCode         {            static             {                System.out.print("a")    ;            }                    }                class StaticCodeDemo         {            static            {                System.out.print("b");            }                            public static void main(String[] args)             {                new StaticCode();                    new StaticCode();    //當類加載時,靜態代碼塊只執行一次,所以此句不再執行                System.out.print("e");            }                            static            {                System.out.print("c");            }            }</span>


        //輸出結果是bcae
        
5.構造代碼塊的優先級高於構造函數
6. Person p = new Person("qiaodong",24);這句話都做了什麼事情?
        1.因爲用到了Person.class,所以先尋找此class並加載
        2.執行該類的靜態代碼塊,如果有的話,給此類進行初始化
        3.在堆內存中開闢空間,分配內存地址
        4.在堆內存中建立對象的特有屬性,並初始化
        5.屬性顯示初始化
        6.對對象的構造代碼塊進行初始化
        7.對對象進行對應的構造函數的初始化
        8.將內存地址賦給棧內存中p變量
7.設計模式:解決某一類問題最行之有效的方法
                        java中有23中設計模式
                      單例設計模式:解決一個類在內存中只有一個對象
    想要保證對象唯一。
        1.先禁止其他程序建立該類對象
        2.還爲了讓其他程序可以訪問到該類對象,只好在本類中自定義一個對象
        3.爲了方便其他程序對自定義對象的訪問,可以對外提供一些訪問方式
    這三部用代碼怎麼體現呢?
        1.將構造方法私有化
        2.在類中創建一個本類對象
        3.提供一個方法可以訪問到該對象    
    對類該怎麼描述就怎麼描述,只是再加上以上3部條件
        /* 單例模式
             這個是先初始化對象
             稱爲:餓漢式-------開發一般常用!!!!!
             Single一進內存,就已經創建好了對象
        */
     
<span style="font-size:14px;">  class Single        {            private int number = 0;            //禁止外部程序創建該類的對象            private Single(){}            //自己本類中創建一個對象            private static Single s = new Single();            //提供一個外部類能獲得本類對象的方法            public static Single getInstance()             {                return s;                }                        public void setNumber(int n)            {                    this.number = n;            }                        public int getNumber()             {                return number;                }        }                class TestSingle         {            public static void main(String[] args)             {                Single s1 = Single.getInstance();                s1.setNumber(23);                Single s2 = Single.getInstance();                    System.out.println(s2.getNumber());            }                        }    </span>


        
        /* 懶漢式
             對象是方法被調用時,才初始化。也叫做對象的延遲加載
             Single進內存,對象還沒創建,只有調用了getInstance方法,才建立對象
             private Single() {}
           private static Single s = null;
           public static Single getInstance() {
                       if(s == null) {
                           s = new Single();
                       return s;
           }
        */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章