面向對象的三大特性(詳解)
- 封裝(對象的封裝和權限的封裝)
- 繼承
- 多態(補充:向上轉型、向下轉型)
基本數據類型與常量池(詳解)
- 基本數據類型的大小
- 自動裝箱、自動拆箱、基本數據類型的常量池、Integer.valueOf()
- 基本數據類型和包裝類型在JVM中的存儲位置
- String類的intern()
String類及其源碼(詳解)
- String的拼接和對比(地址和值)
- String類的intern()
- String類的equals()
- StringBuilder和StringBuffer(父類、底層的存儲、相關方法及其安全性、擴容)
- String爲何不可變?好處?
final關鍵字(詳解)
- 修飾類、方法、變量
抽象類和接口(詳解)
- 事物、動做
- 類、變量、方法的修飾符
- 證實抽象類能夠被實例化
- JDK1.8中的接口變化
代碼塊及其執行順序(詳解)
- 局部代碼塊、構造代碼塊、靜態代碼塊
內部類(詳解)
- 外部類、內部類
- Java中類的加載過程(詳解)
- 成員內部類、局部內部類、靜態內部類、匿名內部類
Java的類和包(詳解)
- .java文件
- main方法
- 外部類的訪問權限
- Java包的命名規則
- import
模塊間的調用淺析(詳解)
Java中的異常(詳解)
- 異常類的繼承關係、根據編譯把異常分類
- 異常的兩種處理方式
- 異常調用鏈、異常鏈化
- 自定義異常及其構造函數
- 異常的注意事項:子類重寫父類的throws方法、異常是線程獨立的
- finally中的return(覆蓋try/catch中的return)、finally中的異常(覆蓋try/catch中的throw exception)
Java泛型詳解(詳解)
- 泛型概念、特色
- 泛型的三種使用方式
- 泛型通配符
- 泛型方法的聲明
- 泛型方法與可變參數
- 靜態方法能夠使用泛型
- 指定泛型上下邊界(?extends、super)
- 定義泛型數組
Class類和Object類(詳解)
- Class類的概念、做用
- 得到Class類對象的三種方式
- Object類中的方法:clone()、getClass()、equals()、hashCode()、wait()、notify()、notifyAll()
- clone()、淺拷貝-cloneable接口、深拷貝-重寫clone()
- wait()、notify()的做用
反射詳解(詳解)
- 反射的概念、最重要的用途
- 反射的基礎:Class類
- 判斷是否爲某個類的實例:instanceof關鍵字、Class類的isInstance()方法
- 用Class對象建立對象:直接newInstance()、Constructor對象->newInstance()
- 用Class對象獲取類的方法集合:getDeclaredMethods(),調用方法:method.invoke(實例對象,參數)
- 用Class對象獲取類的構造器集合:getDeclaredConstructors()
- 用Class對象獲取類的成員變量:getFiled()等
- 利用反射建立數組:Array.newInstance(Class對象, length)
離開IDE,使用javac和java構建項目(詳解)
Java枚舉類(詳解)
- 枚舉類的父類、適用場合
- 枚舉類的使用:存放常量、switch、添加方法、使用接口組織枚舉類(分類)
- 枚舉類的集合:EnumSet、EnumMap
- ......
Java多線程基礎總結(詳解)
- 進程和線程的概念、五種狀態、建立線程的三種方式
- Java線程內存模型:哪些私有、哪些共享
- 線程的優先級:getPriority ()
- 線程的控制方法:interrupt()、 isInterrupted()、join()
- Thread類的靜態方法:Thread.currentThread()、Thread.interrupted()、Thread.sleep(long msecs)、Thread.yield()
- 線程組的概念、getThreadGroup
- 多線程的實現(代碼、線程池)
- 線程的狀態轉換代碼
Java IO流總結(詳解)
- IO流有哪些數據源
- IO流的分類:字符流(以字符數組讀寫)、字節流(以字節數組讀寫)
- 字符流和字節流的類結構
- 整合Reader和InputStream:new InputStreamReader(InputStream)(能夠指定讀取的編碼格式,解決亂碼問題)
- 整合Writer和OutputStream:new OutputStreamWriter(OutputStream)(能夠指定讀取的編碼格式,解決亂碼問題)
- IO管道:使用pipedInputStream和pipedOutputStream實現線程間的通訊(傳輸字節流)
- 字符流和字節流讀入與寫出數組:CharArrayReader、ByteArrayInputStream
Java序列化與反序列化(詳解)
- 序列化、反序列化的概念
- 類實現序列化須要實現Serializable接口(接口中是空的,但ObjectOutputStream類的writeObject()方法會斷定是不是Enum、Array、Serializable類型)
- 序列化ID:private static final long serialVersionUID = 1L
- 序列化沒法保存靜態變量
- ArrayList實現了Serializable,重寫了read/writeObject()方法實現自定義序列化
- 沒有重寫read/writeObject(),默認使用ObjectOutputStream和ObjectInputStream的方法對對象進行序列化及反序列化
- 總結
Java集合框架梳理(詳解)
- 集合框架結構圖
- List接口(有序重複,容許多個null):ArrayList(非線程安全的動態數組)、LinkedList(雙向鏈表、非線程安全、雙端隊列)、Vector(線程安全的動態數組、與ArrayList類似)、Stack(繼承了Vector)
- Set接口(無序不重複,只容許一個null):EnumSet(枚舉專用)、HashSet(查詢速度最快的集合)、TreeSet
- Map接口:HashMap(快速查詢)、HashTable(性能比HashMap低)、TreeMap(有序、紅黑樹實現)、Properties、EnumMap
- 哈希表(定義)和哈希碼(定義)、哈希值(定義)
- Queue接口:分爲阻塞式隊列(主要有ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue)、雙端隊列(主要有ArrayDeque、LinkedBlockingDeque、LinkedList)(補充)
- 全部集合類詳解:http://calvin1978.blogcn.com/articles/collection.html
Java8新特性(詳解、菜鳥)
- Lanbda表達式:歸納地說,就是能夠將一個方法傳到接口中。(函數式接口就是隻有一個抽象方法的接口)
- 接口的默認方法
- ......
Java集合詳解1:ArrayList、Vector、Stack(詳解)
- ArrayList(實現的接口、操做、原理、安全......)
- Vector
- Stack
Java集合詳解2:LinkedList、Queue(詳解)
- LinkedList
- Queue【Deque(ArrayDequ--數組實現的隊列)、AbstractQueue(PriorityQueue--數組實現的優先隊列)】
Java集合詳解3:Iterator、fail-fast機制、比較器(詳解)
- Iterator
- fail-fast機制(快速失敗機制)的概念、產生緣由、用途、解決辦法 (改變Collection集合的結構是指添加刪除元素,不是修改元素值)
- 集合排序:Comparable天然排序(注意重寫方法)和Comparator定製排序的使用。
- ......
Java集合詳解4:HashMap、HashTable(詳解)
- HashMap(數據結構、put、key到哈希碼到哈希值的過程、length爲2的n次方(oldCap左移一位)、擴容使用for循環、)
- HashTable(length爲2n+1)
- HashMap和HashTable區別:父類、null、同步
Java集合詳解5:LinkedHashMap、LRU(詳解)
- LinkedHashMap:數據結構(在HashMap基礎上加入雙向鏈表、header和accessOrder屬性、entry添加了屬性、非同步、LRU算法)
- HashMap無序,LinkedHashMap有兩種順序:插入順序(entry.next實現,false)和訪問順序(entry.before/after實現,true),經過accessOrder控制。
- LRU算法基於LinkedHashMap的按訪問順序排序的特色、LRU算法的實現(繼承,重寫removeEldestEntry())
- ......
Java集合詳解6:TreeMap、紅黑樹(詳解、平衡二叉樹)
- 二叉樹、二叉查找樹(生成二叉查找樹時,爲了不失衡,就有了這些平衡二叉樹(AVL樹、紅黑樹...))、紅黑樹
- TreeMap(特色、插入和旋轉操做、刪除和移除操做)(有序、非線程安全)
- 太難了
Java集合詳解7:HashSet、LinkedHashSet、TreeSet(詳解)
- HashSet基於HashMap(用key保存元素)
- LinkedHashSet基於LinkedHashMap,但只能維護插入排序(用key保存元素)
- TreeSet基於TreeMap,非線程安全,(用key保存元素)(TreeSet中含有一個NavigableMap類型的成員變量m,而m其實是TreeMap的實例)
Java集合詳解8:細節精講(詳解)
- ArrayList的合理使用
- 基本數據類型沒法泛型化、Arrays.asList(T ...a)
- list.subList(),subMap()、subSet()
- compareTo()、equals()、indexOf()、Collections.binarySearch()
Java集合詳解:總結(詳解)
Java設計模式1:建立型模式(詳解、補充)
主要是對象的建立。html
- 簡單工廠模式(一個工廠類根據傳入的參數,動態地決定建立哪一個對象)
- 工廠模式(也叫工廠方法模式)(一個子工廠對應生產一類對象)
- 抽象工廠模式(一個子工廠裏生產的對象都是兼容的,這些對象組成新的對象)
- 單例模式:
餓漢模式(一開始就建立對象)、
懶漢模式(單線程,用到的時候才生產對象)、
飽漢模式(又叫雙重檢查,用到的時候才生產對象,多線程)、
靜態內部類(最經典) - 建造者模式(建立對象的時候方便地設置屬性)
- 原型模式(用到對象的時候將原對象淺拷貝一份)
Java設計模式2:結構型模式(詳解、補充)
主要是對象的結構設計。java
- 代理模式【(動態代理,cglib代理)(將被代理對象加一層包裝)】(進行方法加強)
- 適配器模式:
默認適配器模式【牛奶適配器實現咖啡接口,全部方法都重寫爲空方法,適配器子類就舒服了】;
對象適配器模式【牛奶適配器繼承咖啡類,構造方法注入牛奶類對象,方法重寫,牛奶適配成咖啡】;
類適配器模式【牛奶適配器繼承牛奶類,實現咖啡接口,方法重寫,牛奶適配器變成咖啡類】(進行對象間的適配) - 橋樑模式【畫筆(接口)有多個顏色(實現類),圖形(接口)有多個形狀(實現類),畫出不一樣顏色的不一樣形狀,依靠橋樑(圖形裏注入畫筆對象,畫筆就是橋樑)】
- 裝飾器模式【飲料(抽象類)有紅茶(實現類)、綠茶、咖啡,調料(抽象類)有檸檬(裝飾器,實現類)、珍珠、芒果,調製不一樣口味的飲料】(加強類)、【JavaIO流的裝飾器,例如DataInputStream dataInputStream = new DataInputStream(new BufferedInputStream(new FileInputStream("")))】
- 外觀模式(也叫門面模式)【圖形有圓、矩形、正方形(含畫圖方法),常規寫法是先建立某種圖形再去調用圖形的畫圖方法。而外觀模式是,外觀類裏建立了對象圓、矩形、正方形,定義了各個圖形的畫圖方法,改進寫法是能夠使用外觀對象直接畫出各個圖形,而不須要畫哪一個圖去new哪一個對象】
- 組合模式【員工有姓名、電話等屬性,同時還有手下的員工集合,這些員工也有姓名電話下屬集合。每一個員工屬性都是相同的,員工集合用List<Employee>(這就是組合模式)表示】
- 享元模式(複用已經生成的對象)
Java設計模式3:行爲型模式(詳解、補充)
- 策略模式【畫筆(接口)有不一樣的顏色(實現類),如今要使用不一樣顏色的畫筆去畫圖,定義一個策略類,注入畫筆對象,策略類的對象就能夠畫圖了。相似於橋樑模式】
- 觀察者模式【觀察者對象在構造的時候注入主題對象,二者產生鏈接。實際開發中使用消息中間件來實現觀察者模式】
- 責任鏈模式【定義一個鏈表,而後在經過任意一節點後,若是此節點有後繼節點,那麼傳遞下去,例如用戶參加活動得到獎品,須要先通過規則檢測:僅限新用戶參加、只能某個地區的用戶參加、人數上限等,這些規則就是鏈表的節點】
- 模板方法模式【模板方法只負責定義第一步應該要作什麼,第二步應該作什麼,第三步應該作什麼,至於怎麼作,由子類來實現。】
- 狀態模式