java學習中,static 修飾符使用、static方法、靜態代碼塊、主函數爲什麼如此寫、單例設計模式(java 學習中的小記錄)

java學習中,static 修飾符使用、static方法、靜態代碼塊、主函數爲什麼如此寫、單例設計模式(java 學習中的小記錄)java

做者:王可利(Star·星星)設計模式

 

static (靜態修飾符)數組

1.用來修飾成員變量mvc

    成員變量被static修飾 就叫靜態成員變量,若是沒有修飾叫非靜態成員變量。jvm

     靜態成員變量的訪問方式:函數

            1.用對象進行訪問,直接點語法拿到。如:對象名.變量名工具

            2.經過類名來直接訪問。 如:類名.變量名學習

      注意:不要認爲方便把全部的變量都用static修飾,只有當數據真正須要共享是才須要用static修飾。測試

               只有靜態變量才能用類來訪問,非靜態變量只能用對象來訪問,類是不能訪問的。this

靜態變量和非靜態變量的區別:

    1.做用上來看:

        a.靜態變量是用來共享的,全部的對象均可以訪問到

        b.非靜態變量就是用來描述同一類事物的公共屬性。

    2.數量和存儲的位置上:

        a.靜態變量存在靜態方法區(數據共享區),而且只有一份數據。

        b.非靜態變量存在堆區中,對象有N個,數據就有N個。

    3.生命週期:

        a.靜態變量是在隨着類文件的加載而加載,隨着類文件消失而消失。

        b.非靜態變量是隨着對象建立而建立,隨着對象的消失而消失。

2.修飾方法 

    static 修飾的方法和OC中的類方法有點類似,OC中類方法只能用類名來調用,類是不容許訪問屬性的。

     而java中static修飾的方法是能夠用對象名來調用的,也能夠用類名來調用,不過推薦使用類名調用。(這樣的話就能夠知道是直接知道是靜態方法)。

     如: public static void study(){

                     靜態方法

            }

      調用:類名.方法名();  /  對象名.方法名();

      結構上就是在普通方法 public 後面多加了一個static,用static修飾的方法是靜態方法,不叫類方法。

     static 修飾的方法使用須要注意的點:

     1.靜態方法能夠用對象和類名調用。非靜態方法只能用對象來調用。

     2.靜態方法是能夠訪問靜態成員變量的,可是不可以訪問非靜態的成員變量。非靜態方法能夠訪問任何的成員變量。

        緣由:有可能靜態方法被調用了,可是對象尚未被建立出來,天然就沒有成員變量。

     3.靜態方法中能夠直接訪問靜態方法,可是不能訪問非靜態方法。非靜態方法是能夠訪問靜態方法。

        緣由:有可能靜態方法被調用了,可是對象尚未被建立出來,又由於非靜態方法只能由對象來調用,因此調用不了。

                  若是對象被建立出來,靜態方法早就存在內存中了。

     4.靜態方法中是不容許出現this關鍵字 或者 super關鍵字的。

        this:表示一個方法調用者對象。

 

特色:靜態的數據在就存在於非靜態的數據存在內存中。

 

何時使用static來修飾方法?

     當一個方法不須要直接訪問非靜態數據,這個時候就能夠用static來修飾(定於工具類 如:arrays)

靜態代碼塊

大括號{}前面加一個static就是靜態代碼塊。

格式:

     static{

   

     }

編譯java.class文件被使用的時候就執行了。使用到這個類的時候就使用了。

權限修飾符:

1.public :公共的,公開的,權限是最大的,在任何的狀況下均可以調用。

2.private:私有的,權限是最小的,只能本身本類中訪問。

3.protected:受保護的。

主函數爲何要這樣來定義?

public static void main(String[] args){}

1.爲何使用 public:

    main 主方法是由jvm(java虛擬機)來調用的,jvm實際也是一個程序,因此是爲了保證jvm可以在任何狀況下來調用主函數。

2.爲何使用 static:

    若是沒有static 這個時候調用主方法就須要經過對象來調用,jvm若是建立對象不知道該傳遞什麼參數(如:構造方法有無參的,或者N個參數的),因此爲了不麻煩,就將方法定義成了靜態的方法,這個時候就不須要考慮對象了,直接用類名就能夠調用。

3.爲何返回值是void :

    main 是由jvm調用,返回值是給jvm ,jvm接收返回值是沒有任何意義的,因此就不須要返回值。

4. main:

    main 不是一個關鍵字,沒有特別的含義,由於不少語言都以main 做爲函數的入口,因此main 已經約定好了的,這個就叫入口。

5.args:

   用來接收程序運行的時候傳進來的參數。

    如:額外知識:

    Object-c 中遍歷數組有一個是 for in 的方法,在java中 for循環加強是 foreach 方法,括號裏面用的是 冒號 :不是分號;

    代碼以下:

 1 public class Star_static {
 2 
 3     public static void main(String[] args) {
 4         
 5         //加強for循環, java 叫 foreach循環 這裏args傳的就是一個參數。
 6         for(String s : args){
 7             System.out.println(s);
 8         }
 9     }
10 } 

能夠這樣在Demo6 後面寫參數,控制檯傳遞參數,不過這樣不方便,通常使用 Scanner會比較多。這個用的比較少。

 

單例設計模式

單例設計模式:一個類只可以建立一個對象出來,無論在哪裏使用都是這個類。

軟件行業中設計模式大概有23種:

可能在java學習中會講到下面的設計模式:

1.單例設計模式

2.觀察者設計模式

3.模塊設計模式(mvc)

4.裝飾設計模式

5.工廠設計模式

設計模式:用來解決同一個問題的解決方案。

如何實現單例設計模式?(目的:阻止別人用new來屢次建立對象)

詳見一下代碼註釋分析:

 1 class  SingleDog{
 2     
 3     String name;
 4     
 5     //阻止讓別人用 new 來對次建立對象 (保證對象惟一)
 6     //private 私有方法只能在本類使用,若是使用public的話,外面的類就能夠經過點語法拿到而後建立多個,就不惟一了。這樣就至關因而成員變量了。
 7     private static SingleDog s = new SingleDog();
 8     
 9     //私有化構造方法,防止經過new來建立對象
10     private SingleDog(){}
11     
12     //提供一個靜態的方法(不用建立對象就能夠調用)來接收惟一的對象
13     public static SingleDog getInstance(){
14         return s;//返回以前new的那個對象
15     }
16 }
17 
18 public class Star_dlsjmm {
19 
20     public static void main(String[] args) {
21         SingleDog star1 = SingleDog.getInstance();//調用類中無參數的構造方法
22         star1.name = "星星";
23         SingleDog star2 = SingleDog.getInstance();
24         SingleDog star3 = SingleDog.getInstance();    
25         //若是打印的結果 star2 ,star3    不是空的 就是單例了
26         System.out.println(star1.name);
27         System.out.println(star2.name);
28         System.out.println(star3.name);
29     }
30 }

通過測試發現,單例設計模式是成功的。打印的三個對象都同樣,沒有出現null。

總結:

    餓漢單例設計模式:

      步驟:

         1.定義一個私有的靜態成員變量來引用對象(私有的靜態對象),設置對象惟一。

         2.私有化構造方法,防止new對象。

         3.建立一個公開的靜態方法,返回上面的對象。

    懶漢單例設計模式(要用的時候才建立對象):

      步驟:

          1.定於一個私有的靜態成員變量,不要賦值。

          2.私有化構造方法,防止new對象。

          3.建立一個公開的靜態方法,判斷是否存在對象,若是不存在就建立一個,若是存在就直接返回。

相關文章
相關標籤/搜索