靜態static與方法重載


一.靜態static

     在介紹靜態變量、常量和方法之前首先需要介紹static關鍵字,因為由static修飾的變量、常量和方法被稱作靜態變量、常量和方法。

     有時在處理問題時,會需要兩個類在同一個內存區域共享一個數據。例如,在球類中使用PI這個常量,可能除了本類需要這個常量之外,在另外一個圓類中也需要使用這個常量。這時沒有必要在兩個類中同時創建PI這個常量,因為這樣系統會將這兩個不在同一個類中定義的常量分配到不同的內存空間中。為了解決這個問題,可以將這個常量設置為靜態的。

如圖:

    被聲明為static的變量、常量和方法被稱作靜態成員。靜態成員是屬於類所有的,區別於個別對象,可以在本類或其他類使用類名和“.”運算符調用靜態成員。

    語法格式為:    類名.靜態類成員

    注意:雖然靜態成員也可以使用“對象.靜態成員”的形式進行調用,但這樣的形式通常不被鼓勵使用,因為這樣容易混淆靜態成員和非靜態成員。

    靜態數據與靜態方法的作用通常是為了提供共享數據或方法,如數據計算公式等,一static聲明並實現,這樣當需要使用時,直接使用類名調用這些靜態成員即可。盡管使用這種方式調用靜態成員比較方便,但靜態成員同樣遵循着public、private、protected修飾符的約束。

    靜態方法的規范:

    1.可以放在常量、變量、方法前;

    2.所有對象都共享一個靜態成員;

    3.可以用類名.靜態成員名  直接調用;

    4.靜態方法不能直接調用非靜態的成員;

    5.實例方法可以直接調用靜態成員;

    6.靜態方法里不能用this;

    7.實現單例模式:

      (1)隱藏默認的構造方法;

      (2)開放一個靜態方法返回實例;

      (3)在類的內部准備一個實例;

      (4)判斷類內部的實例是否已實例化:

            1°.未實例化時進行一次實例

            2°.已實例化時直接返回這個實例

 

靜態單例模式的類:

 1 package org.hanqi.pn0120;
 2 
 3 public class JingTai {
 4     
 5     public int a=0;
 6     
 7     public static int b=0;//靜態屬性
 8     
 9     public void add()
10     {
11         a++;
12         
13         System.out.print("a="+a);
14         
15         b++;
16         
17         System.out.println("  b="+b);
18         
19         add1();
20         
21         //this
22     }
23     
24     public static void add1()
25     {
26         b++;
27         
28 //        
29 //        JingTai t=new  JingTai();
30 //        
31 //        t.add();
32 //        a++;
33         
34     }
35 
36 }
JingTai
 1 package org.hanqi.pn0120;
 2 
 3 public class DanLi {
 4     
 5     //單例模式
 6     //只被實例化一次
 7     
 8     //獲取系統的配置信息
 9     
10     //1.隱藏默認構造方法
11     private  DanLi()
12     {
13         
14     }
15     //3.准備一個實例
16     private static DanLi danli;
17     
18     //2.提供一個靜態方法返回類的實例
19     public static  DanLi  init()
20     {
21         //實例化唯一的對象
22         //DanLi d=new  DanLi();
23         
24         //4.判斷是否已被實例化
25         if(danli==null)
26         {
27             danli=new DanLi();
28         }
29         
30         return danli;
31     }
32 
33     private int a=0;
34     
35     public void add()
36     {
37         a++;
38         
39         System.out.println("a="+a);
40     }
41 }
DanLi
 1 package org.hanqi.pn0120;
 2 
 3 public class TestJingTai {
 4 
 5     public static void main(String[] args) {
 6         
 7         for(int i=0;i<10;i++)
 8         {
 9         JingTai t1=new JingTai();
10         
11         t1.add();
12         }
13         
14         JingTai t2=new JingTai();
15         
16         t2.add();
17         
18     
19         JingTai.b+=1;
20         
21         System.out.println("JingTai.b="+JingTai.b);
22         
23         JingTai.add1();
24     
25         System.out.println("JingTai.b="+JingTai.b); 
26         
27         DanLi d=DanLi.init();
28         d.add();
29         DanLi d1=DanLi.init();
30         d1.add();
31         DanLi d2=DanLi.init();
32         d2.add();
33     }
34 
35 }
TestJingTai

 

二.方法重載

    1.在一個類里面,同名的方法,參數形式不同:類型不同,數量不同。

       這是多態的表現。

    2.使用

       (1)一般把業務邏輯寫在參數最全的方法里

       (2)其他用重載方法,減少參數的數量

       (3)調用參數多的方法,不夠的參數用默認值

    注意:不能通過返回值不同來區分不同的方法。

 重載的類:

 1 package org.hanqi.pn0120;
 2 
 3 public class JiSuanQi {
 4     
 5     //整型加法
 6     public int add(int a,int b)
 7     {
 8         return a+b;
 9     }
10     
11     //重載 參數個數不同
12     public double add(int c,int d,int e)
13     {
14         return c+d+e;
15     }
16     
17     //浮點型加法  方法的重載(多態的一種體現)
18     //參數類型不同
19     public double add(double a,double b)
20     {
21         return a+b;
22     }
23 
24     public static void main(String[] args) {
25 
26 
27         JiSuanQi j=new JiSuanQi();
28         
29         System.out.println("20+50="+j.add(20, 50));
30          
31         System.out.println("20.12+50.45="+j.add(20.12, 50.45));
32         
33         
34     }
35 
36 }
JiSuanQi

 

 

   

綜合:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM