一.靜態staticide
在介紹靜態變量、常量和方法以前首先須要介紹static關鍵字,由於由static修飾的變量、常量和方法被稱做靜態變量、常量和方法。this
有時在處理問題時,會須要兩個類在同一個內存區域共享一個數據。例如,在球類中使用PI這個常量,可能除了本類須要這個常量以外,在另一個圓類中也須要使用這個常量。這時沒有必要在兩個類中同時建立PI這個常量,由於這樣系統會將這兩個不在同一個類中定義的常量分配到不一樣的內存空間中。爲了解決這個問題,能夠將這個常量設置爲靜態的。spa
如圖:3d
被聲明爲static的變量、常量和方法被稱做靜態成員。靜態成員是屬於類全部的,區別於個別對象,能夠在本類或其餘類使用類名和「.」運算符調用靜態成員。code
語法格式爲: 類名.靜態類成員對象
注意:雖然靜態成員也可使用「對象.靜態成員」的形式進行調用,但這樣的形式一般不被鼓勵使用,由於這樣容易混淆靜態成員和非靜態成員。blog
靜態數據與靜態方法的做用一般是爲了提供共享數據或方法,如數據計算公式等,一static聲明並實現,這樣當須要使用時,直接使用類名調用這些靜態成員便可。儘管使用這種方式調用靜態成員比較方便,但靜態成員一樣遵循着public、private、protected修飾符的約束。內存
靜態方法的規範:it
1.能夠放在常量、變量、方法前;event
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 }
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 }
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 }
二.方法重載
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 }
綜合: