JAVA 知識點整理

泛型

本質 類型參數化,做用就是將類型轉換問題從運行時轉移到編譯期
語法 1 定義在類上 class ClassName<T>{}
2 定義在方法上 <T> void methodName(T t){}
3 通配符 <?> 可限制傳入參數,但沒法使用 泛型參數 需類型轉換
4 上限 <? extends T > 接受 T及任意子類
5 下限 <? super T> 接受 T及任意父類

集合

存放數據的集合,JAVA中實現Collection和Map的都是集合java

clipboard.png

Vector:線程安全,基於動態數組,增加率爲100%,ArrayList爲50%
ArrayList:基於動態數組,查詢快,增刪慢。
LinkedList:基於鏈表,增刪快,查詢滿。算法

PS : Hash散列算法 hash & (length-1) 經過Hash散列算法獲取下標,HashCode衝突且equals爲false時存入鏈表。當length爲2的N次方時,能夠最大程度減少HashCode衝突。數組

HashSet:底層由HashMap實現,容許null,惟一,無序
LinkedHashSet:底層由LinkedHashMap實現(適配器模式),不容許null,惟一,按插入順序排序
TreeSet:底層由TreeMap實現,不容許null,惟一,按排序規則排序緩存

映射集合(鍵值對)
HashMap:基於Hash散列算法,鍵惟一,容許null,無序
LinkedHashMap:繼承HashMap,鍵惟一,不容許null,按插入順序排序
TreeMap:鍵惟一,不容許null,按排序規則排序,底層基於紅黑樹安全

HashTable:線程安全
ConcurrentHashMap:線程安全,鎖分離多線程

圖片描述

IO

本質 數據傳輸
分類 數據類型 字節流
字符流
數據流向 輸入流
輸出流
輸入流 字節流 InputStream 字節輸入流接口
ByteArrayInputStream 字節數組輸入流
FileInputStream 文件輸入流
BufferedInputStream 高級流 緩存輸入流
字符流 Reader 字符輸入流接口
InputStreamReader 轉換流 字符輸入流 可指定字符集
BufferedReader 高級流 緩存字符輸入流
輸出流 字節流 outputStream 字節輸出流接口
ByteArrayOutputStream 字節數組輸出流
FileOutputStream 文件輸出流
BufferedOutputStream 高級流 緩存輸出流
字符流 Writer 字符輸出流接口
OutputStreamWriter 轉換流 字符輸出流 可指定字符集
BufferedWriter 高級流 緩存字符輸出流
PrintWriter 高級流 緩存字符輸出流 自動行刷新

多線程

多線程 併發,合理使用能夠提升效率,CPU給每一個線程分配時間片(幾十ms),線程有建立與上下文切換的開銷
線程狀態 新建 NEW
就緒 RUNNABLE
運行 RUNNING
阻塞 BLOCKED
死亡 DEAD
建立線程 1 繼承Thread
2 實現Runnalbe接口
3 實現Callable接口
線程池 clipboard.png
線程併發 三大特性 原子性
有序性
可見性
同步方案 1 volatile 類型修飾符 保證可見性
2 Synchronized 同步代碼塊,可修飾方法 代碼塊
3 ReentrantLock 顯示獲取/釋放鎖
線程操做 1 sleep() 使線程進入阻塞,可指定毫秒值,不釋放鎖
2 wait()/notify()/notifyAll() 等待(阻塞)喚醒(就緒)機制,可指定毫秒值,釋放鎖
3 yield() 使線程進入就緒,不釋放鎖
4 join() 當前線程進入阻塞,直到join線程執行結束,進入就緒,釋放鎖

反射

反射 反射(Reflection)是Java 程序開發語言的特徵之一,它容許運行中的 Java 程序獲取自身的信息,而且能夠操做類或對象的內部屬性。
主要功能 1 在運行時判斷一個對象所屬的類
2 在運行時構造任意一個類的對象
3 在運行時判斷任意一個類所具備的成員變量和方法(經過反射甚至能夠調用private方法)
4 在運行時調用任意一個對象的方法
語法 注意: 調用私有屬性時,需setAccessible(True)跳過java語言訪問檢查,不然拋出IllegalAccessException
獲取Class 1 Class.forName(className)
2 類名.class
3 對象.getClass()
對象 無參構造器 newInstance() 調用無參構造器建立對象並返回
未定義無參構造器時,拋出InstantiationException
獲取構造器 1 getConstructor([types]) 獲取指定參數類型列表的公有構造器
2 getConstructors() 獲取全部公有構造器
3 getDeclaredConstructor([types]) 獲取指定參數類型列表的構造器
4 getDeclaredConstructors() 獲取全部構造器
調用構造器 構造器對象.newInstance([params]) 建立對象,調用私有構造器時, 請注意
方法 獲取方法 1 getMethod(name[,types]) 獲取指定方法名,參數類型列表的公有方法
2 getMethonds() 獲取全部公有方法,包括繼承類的公有方法
3 getDeclaredMethod(name[,types]) 獲取指定方法名,參數類型列表的方法,但不包括繼承方法
4 getDeclaredMethods() 獲取全部方法,但不包括繼承方法
調用方法 方法對象.invoke(obj[,params]) 調用指定對象方法,調用私有方法時, 請注意
字段 獲取字段 1 getField(name) 獲取指定字段名的公有字段
2 getFields() 獲取全部公有字段,包括繼承類的公有方法
3 getDeclaredField(name) 獲取指定字段名的字段,但不包括繼承字段
4 getDeclaredFields() 獲取全部字段,但不包括繼承字段
操做字段 字段對象.set(obj,val) 設置指定對象字段屬性
字段對象.get(obj) 獲取指定對象字段屬性
操做私有字段時,請注意
相關文章
相關標籤/搜索