標籤:acid 儲存 throws 訊號 調用 狀態 jdbc integer 代碼塊
一、JAVA異常
1、runtime exception(一般不需要捕獲,除數是0)
2、checked exception(null 指標),throws與throw
二、泛型(public static <T extend Comparable & Serializable> T min(T t))
1、虛擬機器沒有泛型型別對象-所有對象都是普通類。當程式調用泛型方法時,如果擦除傳回型別,編譯器插入強制類型轉換。
1 import java.util.*; 2 public class ErasedTypeEquivalence { 3 public static void main(String[] args) { 4 Class c1 = new ArrayList<String>().getClass(); 5 Class c2 = new ArrayList<Integer>().getClass(); 6 System.out.println(c1 == c2); //泛型擦除 7 } 8 }/* Output: 9 true 10 *///:~
2、解決泛型擦除
1)萬用字元
<? super T>逆變指明泛型類持有T的基類,則T肯定可以放入
<? extends T>指明泛型類持有T的匯出類,則傳回值一定可作為T的協變類型返回
2)定義介面實現
三、反射
在運行狀態中,對於任意一個類,都能得到其所有屬性和方法,對於任何一個對象都能調用其方法(動態調用對象方法的功能)
clazz.getClass()
四、類載入
1、類載入機制
(1) 裝載:尋找和匯入Class檔案;
(2) 連結:把類的位元據合并到JRE中;
(a)校正:檢查載入Class檔案資料的正確性;
(b)準備:給類的靜態變數分配儲存空間;
(c)解析:將符號引用轉成直接引用;
(3) 初始化:對類的靜態變數,靜態代碼塊執行初始化操作
2、類載入的三種方式
1)new Date()
2)Class.forName("")-->Class.forName(className, true, this.getClass().getClassLoader())。第二個參數,是指Class被loading後是不是必須被初始化。Class.forName(com.mysql.cj.jdbc.Driver);
3)ClassLoader.loadClass(className)實際上調用的是ClassLoader.loadClass(name, false),第二個參數指Class是否被link。
3、類載入器和雙親委派模型
1)Bootstrap ClassLoader : 將存放於<JAVA_HOME>\lib目錄中的,只有符合類庫的才會被載入。
2)Extension ClassLoader : 將<JAVA_HOME>\lib\ext目錄下的,或者被java.ext.dirs系統變數所指定的路徑中的所有類庫載入。開發人員可以直接使用擴充類載入器。
3)Application ClassLoader : 負責載入使用者類路徑(ClassPath)上所指定的類庫,開發人員可直接使用。它負責將系統類別路徑java -classpath或-Djava.class.path變數所指的目錄下的類庫載入到記憶體中。
五、集合
1、Collection(實現了Iterable介面)
2、鏈表 將每個對象存放在獨立的節點,每個節點還存放序列中下一個節點的引用,添加刪除快,數組添加刪除慢,需要數組複製。
3、數組列表 ArrayList,底層數組,隨機尋找快。
4、散列集 HashSet底層HashMap
5、樹集 TreeSet 紅/黑樹狀結構
6、對象比較 Comparable 介面,得實現這個介面才能比較,compareTo(T);Comparator Compare(T1, T2)
7、隊列與雙端隊列 ArrayDeque(非安全執行緒,訪問快)、Stack(extend Vector)
8、映射表 HashMap 初始16 大小為2^n,JDK7底層數組,數組每一項都是Entry,Hash碰撞解決是拉鏈法->位桶+鏈表;JDK8底層數組,數組每一項都是Node,Hash碰撞解決->位桶+鏈表/紅/黑樹狀結構
六、多線程
1、繼承Thread、實現Runnable
2、中斷線程
3、線程的狀態
1)NEW
2)RUNNABLE start()之後
3)BLOCKED locked之後
4)WAITING wait()、join()
5)TIMED WAITING wait(time)
6)TERMINAL
4、線程優先順序以及守護線程(當沒有其他線程執行時結束)
5、Volatile
6、ThreadLocal
7、線程間通訊
1)利用最基本的synchronized、notify、wait
2)利用Lock和Condition
3)訊號量a、CyclicBarrier(預定線程數達到後)b、CountDownLatch(計數器減為0)c、Semaphore(允許訪問限制資源的線程數)
8、執行器
1)newSingleThreadExecutor:
2)newFixedThreadPool:
3)newCachedThreadPool:
4)newScheduledThreadPool:
5)ThreadPoolExecutor:
五、資料庫
1、事務
1)事務特性(ACID)atomacity、consistency、isolation、durability
2)交易隔離等級 (髒讀、非重複讀、幻想讀、丟失修改)--> 未提交讀、已提交讀、可重複讀、串列讀
3)鎖 共用鎖定、更新鎖定、獨佔鎖
4)索引:直接建立(建表時建立)和間接建立(建表後建立)
java基礎知識