第二週

猩猩程式設計師發表於2020-12-14

多型

是多個類物件對同一事物的不同相應

三個條件:

  • 必須要有繼承
  • 必要方法重寫
  • 父型別引用指向子型別空間

特點:提高程式碼的重用性

引用資料型別轉換

只能發生在父子類之間
父類轉子類可能因為子類擴充套件了父類沒有的方法可能發生錯誤所以強制轉換,子類轉父類自動轉換

集合

集合是Java對資料結構和演算法的封裝

  • 集合的概念

    • 現實生活中:很多事物湊在一起
    • 數學中的集合:具有共同屬性的事物總體
    • java中的集合類:是一種工具類,就像是容器,儲存任意數量的既有共同屬性的物件
  • Java集合主要分為三種型別

    • Set(集)
    • LIst(連結串列)
    • Map(對映)
  • 集合的作用

    • 在類的內部,對資料進行組織
    • 簡單而快速的搜尋大量條目
    • 有的集合介面,一共了一系列排列有序的元素,並且可以在序列中間快速的插入或者刪除有關元素
    • 有的集合介面提供了對映關係,可以通過關鍵字Key去開蘇查詢對應唯一物件,而這個關鍵字可以是任意型別
  • 集合和陣列的區別

    • 陣列的長度固定,集合的長度可變
    • 陣列只能通過下標訪問,型別固定,而有的集合可以通過任意型別查詢對映的具體物件
    • 集合只能存放引用資料型別,不能存放基本資料型別
  • Collection介面

    • 是List,Set的父介面
    • 定義了可用於操作List,Set的方法——增刪改查
  • List

    • List是元素有序並且可以重複的集合,稱之為序列
    • List可以精確控制每個元素的插入位置,或刪除某個位置的元素
    • ArrayList和LinkedList是List的兩個實現類
  • ArrayList和LinkedList的對比

    • 相同點

      • 方法相同,方法執行結果相同(方法體不同)

      • 元素順序操作相同

      • 同一個元素可以加入多次

      • 執行緒不安全

    • 不同點

      • ArrayList底層是陣列,適於查詢
      • LinkedList是雙向連結串列,適於插入與刪除
  • Vector

    • Vector與ArrayList一樣也是通過陣列實現的,不同的是它支援執行緒的同步,即某一刻zhi’you一個執行緒能夠寫Vector,避免多執行緒同時寫引發的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問Arraylist慢

Set集合

  • 概念

    • Set父介面為Collection,很多方法是繼承過來的,所以很多方法與List相同
    • 它不允許出現相同元素
    • 不保證集合中元素的順序
    • 允許包含之為null的元素,但最多隻能由一個null元素
    • HashSet、TreeSet是Set的兩個實現類,兩個類的方法相同,但方法執行後結果有的不同
  • HashSet和TreeSet

    • 相同點
      • 沒有下標
      • 不可手動排序
      • 元素順序與加入順序無關
      • 同一個元素不可加入多次
      • 遍歷方式相同
    • 不同點
      • HashSet:元素順序不可測,與數學上的元素集合概念相同
      • TreeSet:元素順序與元素的排序規則有關
      • HashSet對元素無要求,而TreeSet對元素有要求,即要求元素必許有排序規則,元素排序規則與List中元素排序規則是相同的
      • HashSet:底層演算法是Hash演算法,所以查迅速的快,但是沒有ArrayList快
      • TreeSet:底層演算法是樹,查詢慢,插入快些
//建立
Set<String> set=new HashSet<>();
//新增
set.add("a");
set.add("b");
set.addAll(Arrays.asList("a","b","e","d"));
System.out.println(set.size())//HashSet中不允許存在相同元素所以可以利用這一點進行去重
List<String> str=new  ArrayList<(Arrays.asList("a","b","e","d","a","b","e","d"));       str=new ArrayList<>(new HashSet<String>(str));
System.out.println(str);
//沒有下標所以不能進行 改 查
//遍歷
for (String s : set) {
            System.out.print(s + " ");
        }
Iterator<String> iterator = set.iterator();
	while (iterator.hasNext()) {
	System.out.print(iterator.next() + " ");
}

//裡面會進行自動排序,利用的Object中的equals方法做比較

可變參

語法:資料型別… 變數名

public double add (double... ns){
    int a=0;
    for(int i = 0;i < ns.lengh;i++){
	a += ns[i];
    
    }
    System.out.println(a);
}
  • 用於接收0-n個double型別的引數
  • 會自動把接收到的變數封裝成一個陣列

異常

異常概念

  • 因為程式設計錯誤或者偶然的外界因素,導致在程式執行過程中所發生的異常事件
  • 異常會中斷指令,程式會被強制退出

常見的錯誤

  • NullPointerException 空指標異常
  • ArrayIndexOutOfBoundsException 陣列下標越界異常
  • NumberFormatException 數字格式化異常
  • NegativeArraySizeException 陣列長度異常
  • ClassCastException 型別轉換異常

非執行時異常(建議捕獲異常,防止程式崩潰推出)

  • FileNotFoundException 檔案找不到異常

異常捕獲

try{
    //可能出現異常的程式碼
}catch(/*現的異常*/){
    //丟擲異常
}finally{
    // 無論有沒有異常都輸出的程式碼
}
  • 當try裡的程式碼出現異常後會直接跳到catch裡面後續的程式碼不會執行

  • finally的程式碼無論如何都會執行

  • catch括號裡面可以判斷多個異常可以用 | 隔開,也可以直接輸入父類異常,但如果要優先判斷某個子類異常,那子類異常要寫在前面要不然會報錯

自定義異常

  • Exception:此類異常必須進行處理,異常捕獲,丟擲異常。
  • RuntimeException:執行時異常不用強制進行處理。不宣告

throw(拋)異常物件

try{
    
}catch(){
    //裡面可以繼續丟擲異常
    throw Execption    
}

相關文章