1. 程式人生 > >方法的過載與重寫的關係(區別);static關鍵字;單例設計模式;繼承;

方法的過載與重寫的關係(區別);static關鍵字;單例設計模式;繼承;

方法的引數傳遞(值傳遞   引用傳遞)
        基本資料型別:值傳遞:當引數型別為基本資料型別的時候  傳遞的是值 出了方法  原有值不改變
引用資料型別:引用傳遞:當引數型別為引用資料型別的時候  傳的是堆記憶體中的地址  可以改變  堆記憶體中地址對應的資料
static關鍵字
    static靜態
    優點,
    1.節省資源,可以把共性的東西抽取出來設定為靜態  共有
    2.靜態修飾的成員 優先於物件載入入記憶體  隨著類的載入而載入
    3.當成員被靜態修飾後,多了一種呼叫方式  類名。靜態成員
    總結:與類相關的  與物件無關


修飾成員變數:
  所屬:    static修飾靜態成員變數屬於類 叫類變數
            static修飾非靜態成員變數屬於物件,例項變數
  記憶體:   靜態  儲存於方法區的靜態區
          非靜態: 堆記憶體
          出現時間不同,呼叫不同
修飾成員方法
語法:
訪問許可權修飾符 static 返回值型別 方法名(形參){
//方法體
}
  注意:
  1.靜態方法 只能訪問靜態成員
  非靜態既可以訪問靜態  也可以訪問非靜態
  靜態方法中 不可以定義 this / super關鍵字
  因為靜態優先於物件存在 所以靜態方法中不可以  出現非靜態的this/super的成員 靜態只能訪問靜態
總結:利: 將物件共享的資料進行單獨儲存 節省空間 可以直接用類名呼叫
      弊: 生命週期過長 訪問出現侷限性 靜態雖好 只能訪問靜態


public static void main(String[] args) {


}
1.public 訪問許可權修飾符 (訪問許可權最大控制符)
2.static 靜態的 隨著類的載入 進入記憶體
3.void 不確定的範圍值 當前jvm 不需要這個方法帶回返回值
4.main 不是個關鍵字 jvm識別這個方法名 程式的入口
5.String[]:存放String型別資料的陣列 可以接收鍵盤錄入
6.args 陣列名 不是關鍵字 arguments引數的意思


二、工具類
      什麼叫工具類?
         將某些共性的功能抽取出來  單獨封裝Java類   這樣提高了複用性
類ArrayTool
             練習:
                1.獲取最大值
2.陣列的遍歷


工具類:私有化建構函式 因為不需要在其他類中創        建物件
        將所有方法用static修飾 可以類名.呼叫


靜態程式碼塊
     static{
     
        }
隨著類的載入而執行  只執行一次
並有優先於主函式  沒名字比有名字的快
                用於給類初始化的
           ****一般用於載入驅動


     構造程式碼塊{
     
     }


單例設計模式
      模式:解決一件事最快的方法,最有效的方法
      Java中有23種設計模式
      設計模式   是純理論  純思想   
  3步:
     1.將建構函式私有化
     2.在本類中建立一個本類物件
     3.提供一個方法可以獲取該類物件


餓漢式 : 先初始化物件
private Single(){}
private static Single s = new Single();
public static Single getSingle(){
return s;
}
懶漢式 : 物件是方法被呼叫時 才初始化 也叫作延時載入
private Single(){}
private static Single s = null;
public static Single getSingle(){
if(s == null){
s = new Single();
}
return s;
}

繼承:
 父類(超類):super
優點:1.提高程式碼的複用性  少寫程式碼
      2.讓類與類之間產生關係  有了這個關係 才        有了多型  是多型的前提
類與類之間 有共性的關係 抽取出來的是父類
子類繼承父類 必須有關係 
        class A{
void demo1(){}
void demo2(){}
}
class B extends A{
void demo1(){}
void demo3(){}
}

 缺點:
      1.類的耦合性增強了
        開發原則:高內聚,低耦合
        只能單繼承,不支援多繼承
但是支援多層繼承
想要呼叫父類的成員變數用super.name(this.name)

1.想要使用體系,先查閱父類的描述 因為父類中定義的是該體系中共性的功能通過了解共性功能 你就能知道該體系的基本功能 那麼這個體系基本已經可用了 


this:代表本類物件的引用
super:代表父類物件的引用


繼承中成員方法的關係
同名:
就近原則
不同名:
直接呼叫

方法的重寫:
子父類出現了一模一樣的方法

  重寫有什麼用?
提高了程式碼的擴充套件性當子類需要父類的功能,而功能主體 子類特有的內容時,可以重寫父類中的功能這樣 即沿襲了父類的功能 又定義了子類的特有內容
注意事項:
1.父類私有方法 子類不能被重寫
2.子類重寫父類方法時 訪問許可權不能更低(大於等於) 否則編譯失敗//private < 預設 < public 許可權越來越小 那麼繼承體系 就崩潰了 
重寫:一模一樣
繼承中構造方法的關係
    class Anomal{
        String color;
int leg;
public void eat(){
System.out.println("吃飯");
}
public void sleep(){
System.out.println("睡覺");
}
       }
      class cat extends Anomal
        {
       }
          class Dog   extends Anomal
        {
          }

問題: 重寫與過載的區別:
         過載:在同一個類中,方法名相同,引數列表不 同,與返回值無關。
        優點:過載方法可以使得程式更加清楚,以及更加具有可讀性
        缺點:會產生歧義,導致編譯錯誤:例:
public static double max(int num1,double num2){
     if(num1>num2){
     return  num1;
}else{
     return num2;
  }
public static double max(double num1,int num2){
   if(num1>num2){
   return num1;
   }else{
    return num2;
   }
  }
}
     重寫:子父類出現了一模一樣的方法
      作用:子類修改父類中定義的方法的實現
  注意:1.當例項是可以訪問時,他才能被覆蓋。因為私有方法在他類本身以外是不能被訪問的,所以不能被覆蓋,如果子類中定義的方法在父類中是私有的,那麼這兩個方法沒有關係。
2.與例項方法一樣,靜態方法也能被繼承,但是,靜態方法不能被覆蓋。如果父類中定義的靜態方法在子類中被重新定義,那麼在父類中定義的靜態方法將被隱藏,可以使用語法:父類名。靜態方法名(SuperClassName.staticMethodName)呼叫隱藏的靜態方法。
小結:過載意味著使用同樣的名字但是不同的簽名來定義多個方法。重寫意味著在子類中提供一個對方法的新的實現。