BD1 - Java 2-5 週五總結

weixin_34249678發表於2017-08-03

We believe that writing is about content, about what you want to say – not about fancy formatting.
我們堅信寫作寫的是內容,所思所想,而不是花樣格式。
— Ulysses for Mac

關於收穫:

導圖:

1451775-440076607af63487.PNG
導圖

抽象類和介面區別:

Abstract class Interface
例項化 不能 不能
一種繼承關係,一個類只能使用一次繼承關係。可以通過繼承多個介面實現多重繼承 一個類可以實現多個interface
資料成員 可有自己的 靜態的不能被修改即必須是static final,一般不在此定義
方法 可以私有的,非abstract方法,必須實現 不可有私有的,預設是public,abstract 型別
變數 可有私有的,預設是friendly 型,其值可以在子類中重新定義,也可以重新賦值 不可有私有的,預設是public static final 型,且必須給其初值,實現類中不能重新定義,不能改變其值。
設計理念 表示的是“is-a”關係 表示的是“like-a”關係
實現 需要繼承,要用extends 要用implements

一個類可以實現自多個介面:

1451775-ebdf942e1e11fb11.png
類可以實現多個介面

類需要替代這兩個介面所定義的所有方法

重點說明: (用介面實現多重繼承)

1451775-9e054e04bdce44b1.png
Java不支援多重繼承原因

1451775-253306f599b6e7b4.png
Java不支援多重繼承原因

多重繼承發生問題原因之一在於屬性(資料結構)衝突,也就是儲存空間的衝突。由於介面不與任何儲存空間相關聯,因此可以解決儲存空間衝突的問題

對於繼承的方法的衝突,當使用介面之後,由於介面只定義了方法的抽象,沒有具體的執行程式碼,因此也不會發生程式碼衝突的問題。

擴充示例:


1451775-5dbd3e787f3c069c.png
示例
1451775-7cde01eeb03db3e7.png
總結

對比補充:


1451775-2b573f9786ebd859.png
普通方法和抽象方法
1451775-440076607af63487.PNG
導圖

內部類:

在Java中,可以將一個類定義在另一個類裡面或者一個方法(類成員函式)裡面,這樣的類稱為內部類。廣泛意義上的內部類一般來說包括四種:

  • 成員內部類
  • 區域性內部類
  • 匿名內部類
  • 靜態內部類
1451775-440076607af63487.PNG
導圖
集合:

Java集合主要分三種型別:
Set(集) List(列表) Map(對映)

重點掌握的集合:

  • HashSet
  • ArrayList
  • LinkedList
  • HashMap

重點掌握的集合操作:
增、刪、改、查(遍歷)

HashSet:

import java.util.HashSet;
import java.util.Iterator;

public class HashSetTest {
    public static void main(String[] args) {
        HashSet<String> hashSet = new HashSet<String>();
        System.out.println("沒資料前直接列印原HashSet結構:");
        System.out.println(hashSet);
        System.out.println();
        
        // 增:
        for (int i = 0; i < 4; i++) {
            hashSet.add((char)(i+97)+"");
        }
        
        // 列印原set結構內容:
        System.out.println("直接列印原HashSet結構:");
        System.out.println(hashSet);
        System.out.println();
        
        // 刪:
        hashSet.remove("a");
        System.out.println("直接刪除資料後HashSet結構:");
        System.out.println(hashSet);
        System.out.println();
        
        // 查在遍歷中:
        // 第一種遍歷:
        System.out.println("測試第一種遍歷:");
        for(String str : hashSet){
            System.out.println(str);
        }
        System.out.println();
        
        // 第二種遍歷:
        System.out.println("測試第二種遍歷:");
        Iterator<String> iterator = hashSet.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

HashSet輸出:

1451775-d82cce9e9b462280.png
3

ArrayList:

import java.util.Iterator;
import java.util.ArrayList;

public class ArrayListTest {

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        System.out.println("沒資料前直接列印原list結構:");
        System.out.println(list);
        
        // 增:
        for (int i = 0; i < 4; i++) {
            list.add((char)(i+97)+"");
        }
        System.out.println("直接列印原list結構:");
        System.out.println(list);
        System.out.println();
        
        // 刪:
        list.remove(1);
        list.remove("a");
        System.out.println("列印刪除資料後list結構:");
        System.out.println(list);
        System.out.println();

        // 查在遍歷中:
        // 第一種遍歷    
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println();
        
        // 第二種遍歷
        for(String s : list){
            System.out.println(s);
        }
        System.out.println();

        // 第三種遍歷
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

ArrayList列印:

1451775-81f46cadc4a6bedc.png
4

LinkedList:

import java.util.Iterator;
import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<String>();
        System.out.println("沒資料前直接列印原list結構:");
        System.out.println(list);
        
        // 增:
        for (int i = 0; i < 4; i++) {
            list.add((char)(i+97)+"");
        }
        System.out.println("直接列印原list結構:");
        System.out.println(list);
        System.out.println();
        
        // 刪:
        list.remove(1);
        list.remove("a");
        System.out.println("列印刪除資料後list結構:");
        System.out.println(list);
        System.out.println();

        // 查在遍歷中:
        // 第一種遍歷    
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println();
        
        // 第二種遍歷
        for(String s : list){
            System.out.println(s);
        }
        System.out.println();

        // 第三種遍歷
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

LinkedList列印結果:

1451775-b74f839e414103d3.png
5

HashMap:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;

public class HashMapTest {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<String, String>();
        System.out.println("沒資料前直接列印原HashMap結構:");
        System.out.println(map);
        
        // 增:
        for (int i = 0; i < 5; i++) {
            map.put(Integer.toString(i+1), (char)(i+97)+"");
        }
        
        System.out.println("直接列印原HashMap結構:");
        System.out.println(map);
        System.out.println();
        
        // 刪:
        map.remove("1");
        map.remove("2", "b");
        System.out.println("列印刪除資料後HashMap結構:");
        System.out.println(map);
        
        // 改(即增加同樣key的資料以覆蓋改變value的值)
        map.put("3", "cc");
        System.out.println("列印改3後HashMap結構:");
        System.out.println(map);

        // 查在遍歷中:
        // 第一種遍歷
        System.out.println("第一次遍歷");
        for(String s : map.keySet()){
            System.out.println(s+" : "+map.get(s));
        }
        
        // 第二種遍歷
        System.out.println("第二次遍歷");
        Iterator<String> iteratorSet = map.keySet().iterator();
        while(iteratorSet.hasNext()){
            String str = iteratorSet.next();
            System.out.println(str+" : "+map.get(str));
        }
        
        // 第三種遍歷
        System.out.println("第三次遍歷");
        for(Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey()+" : "+entry.getValue());
        }
        
        // 第四種遍歷
        System.out.println("第四次遍歷");
        for(String str : map.values()){
            System.out.println(str);
        }

        // 第五種遍歷
        System.out.println("第五次遍歷");
        Iterator<Entry<String, String>> it = map.entrySet().iterator();
        while(it.hasNext()){
            Entry<String, String> entry = it.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
    }
}

HashMap輸出結果:

1451775-ad4162ee622aa402.png
6

效能分析舉例:


1451775-1c2f617750fc4fa7.PNG
效能分析

集合易錯特別說明:
BDHW - 7.30 集合

1451775-440076607af63487.PNG
導圖

異常學習:

  • 理解異常概念
  • 運用try塊、catch塊和finally塊處理異常
  • 運用多重catch塊處理異常
  • 運用巢狀try catch塊處理異常
  • 運用throw 和 throws處理異常
  • 運用java編寫和使用自定義異常

進行異常處理:(通過5個關鍵字實現)

  • try catch finally
  • throw throws

finally:


1451775-b0f24189edf1d71b.png
finally示例

注意多重catch塊 異常 順序:
catch異常類 要先catch子類後父類

1451775-833e80ffd13299ba.png
catch順序

所以 這樣錯:


1451775-aeb177f2f22bdf68.png
catch順序錯

(IOException 是 FileNotFoundException的父類)

關於擴充:

Hadoop - 1介紹、環境搭建及配置

世界上所有的追求都是因為熱愛
一枚愛編碼 愛生活 愛分享的IT信徒
— hongXkeX