java EE學習總結 ------- 第五週

第五週

接口

接口的定義

  • 接口相當於特殊的抽象類,定義方式、組成部分與抽象類類似

    • 使用interface關鍵字定義接口

    • 沒有構造方法,不能創建對象

    • 只能定義:公開靜態常量、公開抽象方法

    • 例子

      interface MyInterface{
      public static final String FIELD =“Value”;
      public abstract void method();

      }

  • 接口一種標準

  • 接口是一種標準

接口與類的異同

  • 相同:

    • 可編譯成字節碼文件
    • 不能創建對象
    • 可以作爲引用類型
    • 具備Object類中所定義的方法
  • 不同

    • 所有屬性都是公開靜態常量,隱式使用public static fianl 修飾
    • 所有屬性都是公開靜態常量,隱式使用 public abstract 修飾
    • 沒有構造方法、動態代碼塊、靜態代碼塊

接口的應用

  • 什麼是接口:

    • 微觀概念:接口是一種能力和約定

      • 接口的定義:代表了某種能力
      • 方法的定義:能力的具體要求
    • 經驗:

      • java爲單繼承,當父類的方法種類無法滿足子類需求時,可實現接口擴充子類能力
    • 接口支持多實現,可爲類擴充多種能力

  • 接口的規範

    • 任何類在實現接口,必須實現接口中所有的抽象方法,否則此類爲抽象
    • 實現接口中的抽象方法時,訪問修飾符必須是public
  • 接口的引用

    • 同父類一樣,接口也可聲明爲引用,並指向實現類對象

    • 注意

      • 僅可調用接口中所聲明的方法,不可調用實現類中獨有的方法
      • 可強轉回實現類本身類型,進行獨有方法調用

接口的多態

  • 例子

    public class TestPolymorpfic{

    public static void main(String[] args){

         Dog myDog = new Dog();
        Animal a = myDog;
        Runnable r =myDog;
        Swimmable s =myDog;
    

    }

    }

    interface Runnale{
    public absrtact void run();

    }

    interface Swimmable{
    public abstract void swim();

    }

    abstract class Animal{
    public void eat(){}//父類方法
    public void sleep(){}//父類方法

    }
    class Dog extends Animal implements Runnable ,Swimmable{
    public void run(){}//接口方法
    public void swim(){]//接口方法
    public void shout(){} //獨有方法

    }

    • 多種類型的引用指向同一個對象時,表示看待對象的視角不同
    • 不同引用所能看到的對象範圍不同,只能調用自身類型中所聲明的部分
  • 不同引用類型,僅可調用自身類型中所聲明的方法

接口常見關係

  • 類與類

    • 單繼承
    • extends 父類名稱
  • 類與接口

    • 多實現
    • implement 接口名稱1,接口名稱2,接口名稱n
  • 接口與接口

    • 多繼承
    • extends 父接口1,父接口2,父接口n

接口的規範

  • 任何類在實現接口時,必須實現接口中所有的抽象方法,否則此類爲抽象類
  • 實現接口中的抽象方法時,訪問修飾符必須是public

常量接口

  • 將多個常用於代表狀態或固定值的變量,以將靜態常量的形式定義在接口中統一管理,提高代碼

接口回調

  • 先有接口的使用者,後有接口的實現者
  • 接口的回調:先有接口的使用者,後有接口的實現者 程序員:工具的調用 工具:接口的使用者 接口:標準 接口的實現者:程序員

接口的好處:

  • 程序的耦合度降低
  • 更自然的使用多態
  • 設計與實現完全分離
  • 更容易搭建程序框架
  • 更容易更換具體的實現

常用類:

內部類

  • 成員內部類

    • 在類的內部定義,與實例變量、實例方法同級別的類
    • 外部類的一個實例部分。創建內部類對象時,必須依賴外部類對象
    • 當外部類、內部類存在重名屬性時,會 優先訪問內部類屬性
    • 成員內部類不能定義靜態成員
  • 靜態內部類

    • 不依賴外部類對象,可直接創建或通過類名訪問,可聲明靜態成員
    • 只能直接訪問外部類的靜態成員(實例成員需實例化外部類對象) outer.Inner inner = new Outer.Inner() Outer.Inner.show():
  • 局部內部類

    • 定義在外部類方法中,作用範圍和創建對象範圍僅限於當前方法
    • 局部內部類訪問外部類當前方法中的局部變量時,因無法保障變量的生命週期與自身相同,變量必須修飾爲final
    • 限制類的使用範圍
  • 匿名內部類

    • 沒有類名的局部內部類(一切特徵都與局部內部類相同)

    • 必須繼承一個父類或者實現一個接口

    • 定義類、實現類、創建對象的語法合併,只能創建一個該類的對象

    • 優點:

      • 減少代碼量
    • 缺點

      • 可讀性較差
  • 內部類的概念:在一個類的內部再定義一個完整的類

  • 內部類的特點

    • 編譯之後可生成獨立的字節碼文件
    • 內部類可直接訪問外部類的私有成員,而不破壞封裝
    • 可爲外部類提供必要的內部功能組件

object類

  • 超類、基類,所有類的直接或間接父類,位於繼續樹的最頂層

  • 任何類,如果沒有書寫extends 顯示繼承某個類,都默認直接繼承Object類,否則爲間接繼續

  • Object類中所定義的方法,是所有對象都具備的方法

  • Object類型可以存儲任何對象

    • 作爲參數,可接受任何對象
    • 作爲返回值,可返回任何對象

getClass() 方法

  • public fianl Class<?>get Class(){}
  • 返回引用中存儲的實際對象類型
  • 應用:通常用於判斷兩個引用中實際存儲對象類型是否一致

hashCode()方法

  • public int hashCode(){}
  • 返回該對象的十六進制的哈希碼值
  • 哈希算法根據對象的地址或字符串或數字計算出來的int類型的數值
  • 哈希碼並不唯一,可保證相同對象返回相同哈希碼,儘量保證不同對象返回不同哈希碼

toString()方法

  • public String toString(){}
  • 返回該對象的字符串表示(表現形式)
  • 可以根據程序需求覆蓋方法,如:展示對象各個屬性值

equals() 方法

  • public boolean equals (Object obj){}
  • 默認實現爲(this==obj),比較兩個對象地址是否相同
  • 可進行覆蓋,比較兩個對象的內容是否相同

equals()方法覆蓋步驟

  • 比較兩個引用是否指向同一個對象
  • 判斷obj 是否爲null
  • 判斷;兩個引用指向的實際對象類型是否一致
  • 強制類型轉換
  • 依次比較各個屬性值是否相同

finalize()方法

  • 當對象被判定爲垃圾對象時,由jvn 自動調用此方法,用以標記垃圾對象,進入回收隊列
  • 垃圾對象 :沒有有效引用指向此對象時,爲垃圾對象。
  • 垃圾回收:由GG銷燬垃圾對象,釋放數據存儲空間
  • 自動回收機制:JVM內存耗盡,一次性回收所有垃圾對象
  • 手動回收機制:使用System.gc():通知JVM執行垃圾回收

包裝類

  • 定義:

    • 基本數據類型所對應的引用數據類型
  • Object可統一所有數據,包裝類的默認值是null

  • 基本數據類型

類型轉換與裝箱、拆箱

  • 8種包裝類提供不同類型間的轉換方式

    • Numer父類中 提供的6個共性方法
    • parseXXX()靜態方法
    • valueOf()靜態方法
  • 注意:需包證類型兼容,否則拋出NumberFornamatException異常

  • JDK 5.0之後,自動裝箱、拆箱。基本數據類型和包裝類自動轉換

整數緩存區

  • java預先創建了256個常用的整數包裝類型對象
  • 在實際應用當中,對已創建的對象進行復用

String類

  • 字符串是常量,創建之後不可改變
  • 字符串字面值存儲在字符串池,可以共享
  • String s =“Hello”;產生一個對象,字符串池中存儲
  • String s = new String (“Hello”) ;// 產生兩個對象,堆、池各存儲一個

常用方法

  • public char charAt(int index):根據下標獲取字符
  • public boolean contains(Stirng str):判斷當前字符串中是否包含str
  • public char[] toCharArray():將字符串轉換成數組
  • public int indexOf(String str):查找str 首次出現的下標,存在,則返回該下標;不存在。則返回-1
  • public int lastIndexOf(Stirng str ):查找字符串在當前字符串中最後一次出現的下標索引
  • public int length():返回字符串的長度
  • public int length():返回字符串的長度
  • public String trim():去掉字符串前後的空格
  • public String toUpperCase():將小寫轉成大寫
  • public boolean endWith(String str):判斷字符串是否以str結尾
  • public String replace(char oldChar,char newChar):將字符串替換成新字符串
  • public String[] split(String str):根據str做拆分

可變字符串

  • StringBuffer:可變長字符串,JDK1.0提供,運行效率慢、線程安全
  • StringBuilder:可變長字符串,JDK5.0提供,運行效率快、線程不安全

BigDecimal

  • 除法:Bigdecimal(BigDecimal bd ,int scal,RoundingMode mode)

  • 參數scal :指定精確到小數點後幾位

  • 參數mode

    • 指定小數部分的取捨模式,通常採用四舍五人的模式
    • 取值爲BigDecimal.ROUND_HALF_UP

常用類

集合

概念:對象容器。存儲對象的對象,可代替數組

特點:容器的工具類 ,定義了多個對象進行操作的常用方法

位置: java.util.*

Collection 體系集合

該體系結構的根接口,代表一組對象成爲“集合”

  • List

    List 接口的特點:有序、有下標、元素可重複

    • ArrayList
    • LinkedList
    • Vector
    • 子主題 4
  • Set

    Set 接口的特點:無序、無下標‘、元素不能重複

    • hashSet

    • SortedSet

      • TreeSet

Collection 父接口

  • 特點:代表一組任意類型的對象,無序、無下標

  • 方法

    • boolean add(Object obj)//添加一個對象
    • boolean addAll(Collection c)//將一個集合中的所有對象添加到此集合中
    • void clear() // 清空此集合中的所有對象
    • Boolean contains(Object o)//檢查此集合中是否包含o 對象
    • boolean equals(Object o)// 比較此集合是否與指定對象相等
    • boolean isEmpty()// 判斷集合是否爲空
    • Boolean remove(Object o) //在此集合移除0對象
    • int size()// 返回此集合中的元素個數
    • Object[] toArray()// 將此集合轉換成數組

List集合

  • List子接口

    • 特點:有序、有下標、元素可以重複

    • 方法

      • void add(int index,Object o) //在index位置插入對象
      • boolean addAll(int index ,Coolection c) // 將一個集合中的元素添加到此集合中的index位置
      • Object get(int index )// 返回集合中指定位置的元素
      • List subList(int fromIndex ,int toIndex) // 返回fromIndex和toIndex之間的集合元素
  • List實現類

    • ArrayList【重點】

      • 數組結構實現,查詢快、增刪慢
      • JDK1.2版本,運行效率快、線程不安全
      • 必須開闢連續空間,查詢快,增刪慢
    • Vector

      • 數組結構實現,查詢快、增刪慢
      • JDK1.0版本,運行效率慢、線程安全
    • LinkedList

      • 鏈表結構實現、增刪 快、查詢慢
      • 無需開闢連續空間,查詢慢、增刪快

泛式集合

  • 概念:參數化類型、類型安全的集合,強制集合元素的類型必須一致

  • 特點

    • 編譯時即可檢查,而非運行時拋出異常
    • 訪問時, 不必類型轉換(拆箱)
    • 不同泛型之間引用不能相互賦值,泛型不存在多態

Colletions 工具類

  • 概念:集合工具類,定義了除了存取以外的集合常用方法

  • 方法

    • public static void reverse(List<?> list)//反轉集合中元素的順序
    • public static void shuffle(List<?> list )// 隨機重置集合元素的順序
    • public static void sort(List list) //升序排序(元素類型必須實現 Comparable接口)

Set 集合

  • Set子接口

    • 特點:無序、無下標、元素不可重複
    • 方法:全部繼承自Collection中的方法
  • Set實現類

    • Hash Set【重點】

      • 基於HashCode實現元素不重複
      • 當存入元素的哈希碼相同時,會調用equals進行確認,如結果爲true,則拒絕後者存入
    • LinkedHashSet

      • 鏈表實現的HashSet,按照鏈表進行存儲,即可保留元素的插入順序
    • TreeSet

      • 基於排序順序實現元素不重複
      • 實現了SortedSet接口,對集合元素自動排序
      • 元素對象的類型必須實現Comparable接口,指定排序規則
      • 通過CompareTo 方法確定是否爲重複元素

Map體系集合

  • hashMap

  • SortedMap

  • map接口的特點

    • 用於存儲任意鍵值對(Key - value)
    • 鍵:無序、無下標、不允許重複(唯一)
    • 值:無序、無下標、允許重複
  • Map 父接口

    • 特點

      • 存儲一對數據(key-Value),無序、無下標,鍵不可重複,值可重複
    • 方法:

      • V put(K key ,V value )// 將對象存入到集合中。關聯鍵值。key 重複覆蓋原值
      • Object get(Object key)// 根據鍵獲取對應的值
      • Set // 返回包含所有值得Collection集合
      • Set<Map.Entry<K,V>>// 鍵值匹配的Set 集合
  • Map集合的實現類

    • HashMap【重點】:

      • JDK1,2版本,線程不安全,運行效率快;允許用null作爲key 或是value
    • Hashtable

      • JDK1.0版本,線程安全,運行效率慢;不允許null 作爲key 或是value
    • Properties

      • Hashtable的子類,要求key 和value都是String 。通常用於配置文件的讀取
    • TreeMap

      • 實現了SortedMap接口(是Map的子接口),可以對Key 自動排序

總結

集合的概念

  • 對象的容器,存儲對象的對象,定義了對多個對象進行操作的常用方法

List集合

  • 有序、有下標、元素可重複。(ArrayList,LinkedList、Vector)

Set集合

  • 無序、無下標、元素不可重複。(HashSet、LinkedList、TreeSet)

Map集合

  • 存儲一對數據,無序、無下標,鍵不可重複,值可重複。(hashmap、HashTable)

Collections

  • 集合工具類,定義了除了存取以外的集合常用方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章