Object 頂級父類 Bin --- 二進制 Oct --- 八進制 Dec --- 十進制 Hex --- 十六進制 String 最終類-表明字符串 底層以數組存儲 StringBuild效率遠高於+, 字符拼接較少用+ ---json StringBuilder和StringBuffer中的方法簽名如出一轍的。StringBuilder是線程不安全的,StringBuffer是線程安全的 字符串中提供了一系列的操做而不改變原字符串的方法,會產生一個新的字符串 正則表達式--pattern Regular expression --- REGEX 用於指定規則的。 匹配器選擇匹配對象 數學類---Math BigDecimal:用於精確存儲和運算小數的類。要求參數以字符串形式傳遞 BigInteger:能存儲和計算任意大小的整數的類 包裝類 基本類型身上沒有屬性和方法,爲了快捷操做產生了包裝類 Void:最終類,不能建立對象 int:Integer char:Character 其餘基本類型用首字母大寫來表示 自動封箱/拆箱都是JDK1.5的特性 將基本類型的變量直接賦值給了對應的引用類型的對象 --- 自動封箱/自動裝箱 將引用類型的對象直接賦值給了對應的基本類型的變量 --- 自動拆箱 對於八種包裝類型對應的哈希碼都是固定的,不隨條件改變。 null的哈希碼規定爲0 NaN --- 非數字 --- 惟一,和任何值都不相等,包括本身自己 字面量的哈希碼是固定不變的 --- 全部的字面量都是存儲在運行時常量池 常量池存儲的字面量以及自定義常量 日期類 Date:表明日期的類。 Calendar:表明日曆的類。 從JDK1.8開始,對時間體系進行了新的劃分,將日期和時間進行分離,而且詳細區分,從而造成了一個新的包---時間包 java.time 異常--exception Throwable:全部異常的父類 Error:錯誤 。 一旦出現,不能處理 異常出現以後能夠處理 捕獲 A. 若是多個異常的處理方式各不同,可使用多個catch來分別捕獲分別處理 B. 若是全部異常的處理方式都同樣,能夠捕獲一個父類異常進行統一的處理 C. 若是多個異常分紅了不一樣的組來進行出來,那麼同一組異常之間能夠用|隔開,進行分組處理 --- JDK1.7開始 finally --- 以前不管出現異常與否,都會執行一次 拋出 編譯時異常:編譯的時候就出現。因爲在編譯的時候就已經出現,因此要求必須處理 運行時異常:運行的時候纔出現。能夠處理,能夠不處理 --- RuntimeException 自定義異常:定義一個類繼承某個異常類,若是繼承的是Exception或者是其餘的異常,那麼定義了一個編譯時異常;若是繼承的是RuntimeException或者是它的子類,那麼就是一個運行時異常 項目處於開發階段,出現了異常,打印異常的棧軌跡,修改代碼 項目已經上線,出現了異常,跳轉錯誤頁面,記錄錯誤日誌 集合---Collection<E> 存儲多個元素的容器 --- 大小不固定 Collection<E> --- 集合頂級接口 <E> 泛型 --- 在集合中,泛型用於定義元素類型 --- 因爲泛型的限制,集合中只能存儲對象 List---列表 元素有序 --- 保證元素的存入順序 --- List中的元素是存在下標的 ArrayList --- 列表 底層用數組存儲數據。默認初始容量是10,每次擴容是在當前的基礎上增長一半。10 -> 15 -> 22. 底層的擴容是基於右移來實現 是一個線程不安全的集合。 LinkedList --- 鏈表 底層是基於節點來進行存儲的。內存空間不連續。增刪元素的操做相對簡單,查詢元素的操做相對複雜。是一個線程不安全的集合。 若是增刪次數和查詢次數在相差不大的狀況下,使用順序表仍是使用鏈表結構? --- 鏈表結構,緣由是鏈表對內存的要求更小 順序表和鏈表在增刪操做時的效率如何? --- 總體效率上,鏈表要高於順序表。若是增刪位置相對靠前,那麼鏈表效率較高;若是增刪位置相對靠後,則順序表效率較高 Vector --- 向量 是Java中最先的集合。底層是基於數組進行存儲的。默認初始容量是10,每次擴容默認增長一倍 --- 基於三元表達式。10 -> 20 -> 40。是一個線程安全的集合 Stack --- 棧 繼承了Vector。遵循的原則是後進先出/先進後出。最早放入棧中的元素 --- 棧底元素;最後放入棧中的元素 --- 棧頂元素 將元素放入棧中 --- 入棧/壓棧 將元素從棧中取出 --- 出棧/彈棧 Set --- 散列集合 Set中的元素不可重複 HashSet;底層基於HashMap存儲的 加載因子太小,會致使內存的浪費,也會致使rehash操做越頻繁從而下降效率 加載因子過大,會致使每個桶中的鏈表過長從而下降效率 從JDK1.8開始,爲了減小擴容次數同時也爲了保證每個桶的查詢效率,在桶中的元素超過8個的時候,會採起紅黑樹結構 Collections---操做集合的工具類。 sort---用於對列表進行排序。在排序的時候能夠默認升序排序,也能夠指定比較規則進行排序。在指定規則的時候須要傳入一個Comparator(比較器)對象,重寫compare方法,根據返回值的正負來對元素進行排序 Iterator:迭代器。在迭代過程當中會對每個元素進行標記。若是標記狀態爲false說明該元素要被移除。 Iterable : 實現這個接口的類所產生的對象能夠被加強for循環進行遍歷。 --- 若是一個對象可以使用加強for循環,那麼這個對象對應的類藥實現Iterable接口 --- 加強for循環本質上是一個迭代遍歷 --- 加強for循環是JDK1.5的特性之一。 泛型即參數化類型 --- ParameterizedType --- JDK1.5的特性之一 將泛型替換爲具體類型的過程 --- 泛型的擦除 --- 發生在了編譯期 ? extends 類/接口 --- 上邊界 ? super 類/接口 --- 下邊界 ? 表示通配符 Stream JDK1.8出現的,用於操做集合的流式結構,但不是流。利用stream對象對集合進行批量操做 斷言 根據已有條件來對結果進行預測判定。 --- 在Java中,斷言不是默認開啓的,須要手動開啓 -ea Map<K, V> --- 映射 映射的頂級接口 --- 頂級父類Dictionary 鍵 - key, 值 - value --- 鍵是惟一的,每個鍵都對應了一個值 --- 鍵值對 --- 一個映射中包含了不少的鍵值對。 將每個鍵值對看作一個對象 --- 表明鍵值對的接口 --- Map.Entry,能夠認爲一個Map對象是由多個entry對象組成。 遍歷映射 html
1.keySet() --- 表示將映射中全部的鍵放入一個set集合中java
2.entrySet() --- 表示將映射中全部的鍵值對放入一個set集合中 映射不是集合,可是集合框架的一員 --- Java Collections Framework :包含了數組、集合、映射以及一部分操做它們的工具類 HashMap 默認初始容量是16,默認加載因子是0.75f,每次默認增長一倍。鍵和值容許是null。若是指定初始容量x, 那麼x若是在(2n-1,2n],初始容量必定是2n。 自己是一個異步式線程不安全的映射 Hashtable 默認初始容量是11,默認加載因子是0.75f,每次擴容的時候在當前的基礎上增長一倍,再+1。11 -> 23。鍵和值不容許是null。 Hashtable自己是一個同步式線程安全的映射 ConcurrentHashMap 異步式線程安全的映射 JDK1.5的特性 自動封箱/拆箱 加強for循環 靜態導入 可變參數 枚舉 泛型 反射(JDK1.4出現,1.5加強) 動態代理 內省 註解 靜態導入/靜態導包 import static 包名.類名.方法名; 表示導入指定包下的指定類中的指定的靜態方法而不導入其餘方法 --- 理論上可以提升加載速率,這個提升程度能夠忽略不計 --- 對於程序的可閱讀性大大下降,若是本類或者父類中存在方法簽名一致的方法會致使靜態導包失效 File 表明文件或者目錄(文件夾)的類。 路徑 絕對路徑:以盤符或者是/開頭的路徑 D:\aa.txt /home/software 和當前所處的路徑沒有任何關係,直接定位到指定的路徑 相對路徑:不以盤符或者是/開頭的路徑 a.txt 須要以當前的位置來計算另外一個位置,路徑發生改變的時候可以自動計算 IO流 是Java中一套用於數據傳輸的API。 IO - Input Output - 輸入輸出流。輸入流指數據從外部流向程序;輸出流指數據從程序流向外部 四個基本流都是抽象類,不能直接建立對象 字符流 字節流 FileOutputStream --- 字節輸出流,能夠向文件中寫數據 FileInputStream --- 字節輸入流,能夠從文件中讀取數據 向TXT文件中追加數據 - 數據從程序流向文件 - 輸出流 向TXT文件中寫入一個字符串 --- 字符流、輸出流、和文件相關的流 --- FileWriter 讀取文件 - 數據從文件流向程序 - 輸入流 讀取TXT文件 --- 輸入流 字符流 和文件相關 FileReader 流中的異常處理正則表達式
將流對象放到try以外聲明而且賦值爲null,放到try以內建立express
關流以前須要判斷流對象是否初始化成功 --- 判斷流對象是否爲nulljson
關流以後須要將流對象設置爲null設計模式
爲了防止關流失敗致使數據丟失,須要在寫外以後手動沖刷一次緩衝區 緩衝流 BufferedReader --- 提供了緩衝區,可以實現按行讀取的效果。 利用FileReader來構建了BufferedReader,而後再BufferedReader對讀取功能作了加強,這種方式稱之爲裝飾設計模式 --- 利用了同類對象構建本身對象自己,對對象身上的功能作了加強或者改善 BufferedWriter提供了一個更大的緩衝區 Java中的原生的字符流只能操做字符類文件 txt java html等,可是不能讀取office組件 系統流/標準流 系統流都是字節流 System.in 標準輸入流 System.out 標準輸出流 System.err 標準錯誤流 轉換流 字符流和字節流之間用的轉換就是轉換流 OutputStreamWriter --- 將字符流轉化爲字節流 FileWriter是它的子類 InputStreamReader --- 將字節流轉化爲字符流 FileReader是它的子類 合併流 SequenceInputStream --- 建立輸入流分別指向對應的文件,而後須要建立一個Vector集合存放這些輸入流,利用Vector集合來產生一個Enumeration對象,使用Enumeration對象來構建合併流,最後利用合併流來讀取數據進行合併。 序列化/反序列化流 將對象轉化爲字節以後進行存儲 --- 序列化 --- 持久化 將字節轉化爲對象的過程 --- 反序列化 注意 1.一個對象想要被序列化,那麼它所對應的類必須實現接口 --- Serializable --- 這個接口中沒有任何的方法和屬性,僅僅起標誌性做用 2.用static/transient修飾的屬性不會被序列化 3.若是一個類產生的對象容許被序列化,那麼這個時候這個類在編譯的時候會根據當前類中的屬性自動計算一個版本號。當反序列化的時候,拿着對象中的版本號和類中版本號作比較,若是相等,則說明這個對象是這個產生的,能夠被反序列化。若是沒有手動指定版本號,自動計算版本號,那麼就意味着類每變更一次,版本號就要從新計算一次。爲了讓序列化出去的對象反序列化回來,須要手動指定版本號 --- private static final long serialVersionUID Properties 是一個能夠被持久化的映射。鍵和值的類型都是String properties文件的默認編碼就是西歐編碼 --- 當向properties文件中存放中文的時候變成了對應的Unicode編碼 JUnit ---單元測試 導入單獨的測試庫。 要求測試的方法作到 「三無」:沒有參數、沒有返回值、非靜態方法 線程 進程 --- 計算機中在執行的任務 --- 在CPU上執行和計算。 一個核上每每只能執行一個進程中的一個線程。---計算機看起來像是在運行多個進程,其實是由於在計算機中任務切換速度很是快,超過人的反應。--- 進程的執行在宏觀上並行的,在微觀上是串行的。 線程 --- 進程中的小任務 --- 多線程 定義線程數組
寫一個類繼承Thread類,將要執行的邏輯放到run方法中,建立線程對象,調用start方法來啓動線程執行任務安全
寫一個類實現Runnable接口,重寫run方法,建立Runnable對象,而後將Runnable對象做爲參數傳遞到Thread對象中,利用Thread對象來啓動線程服務器
寫一個類實現Callable接口,重寫call方法。 --- 現階段要求知道就行 多線程的併發安全問題 多個線程同時執行,而多個線程在執行的時候是相互搶佔資源致使出現了不合常理的數據的現象---多線程的併發安全問題 多線程在執行的時候是相互搶佔,並且搶佔是發生在線程執行的每一步過程當中 同步鎖機制 利用synchronized --- 同步代碼塊解決多線程併發安全問題 同步 --- 一段邏輯在同一時間只能有一個線程執行 異步 --- 一段邏輯在同一時間能有多個線程執行 同步必定是安全的 安全不必定同步 異步不必定安全 不安全必定是異步的 從微觀上而言,同步必定是安全的,安全也必定是同步的。從宏觀上,同步必定是安全的,安全不必定是同步的 須要一個鎖對象 --- 要求鎖對象要被全部的線程都認識:共享對象,類的字節碼(方法區是被線程所共享的),this(必須是同一個對象開啓了多個線程) 若是同步方法是一個非靜態方法,那麼以this做爲鎖對象;若是同步方法是一個靜態方法,那麼以當前的類做爲鎖對象 死鎖 --- 因爲鎖之間相互嵌套而且鎖對象不一樣致使線程之間相互鎖死,導致代碼沒法繼續往下 --- 避免死鎖:統一鎖對象,減小鎖的嵌套 活鎖 --- 這個資源沒有被任何的線程持有佔用,致使程序沒法往下執行 等待喚醒機制 wait------等待 notify------喚醒 等待喚醒機制必須結合鎖來使用,並且鎖對象是誰就用誰進行等待喚醒。 線程的狀態 建立 能夠轉爲就緒 就緒 能夠轉爲運行或者阻塞 運行/活躍 能夠轉爲阻塞或者消亡 阻塞/掛起 能夠轉爲就緒或者消亡 消亡 線程的優先級 線程的優先級:1-10 理論上,數字越大優先級越高,搶佔到資源的機率就越大 實際上,相鄰的兩個優先級的差異很是不明顯。若是優先級差到5個單位及以上,則結果會相對明顯一點點 守護線程 守護別的線程。只要被守護的線程結束,那麼不管守護線程完成與否都會結束。 在線程中,一個線程要麼是守護線程,要麼是被守護的線程。當最後一個被守護的線程結束纔會致使全部的守護線程結束 --- GC 啓動線程的狀況網絡
用戶請求建立
系統自啓
被其餘線程啓動 線程結束的狀況
被其餘線程啓動
壽終正寢:線程執行完成以後天然結束
他殺:線程被其餘請求強制結束
意外事故:線程執行過程當中出現了異常或者錯誤 設計模式:在軟件開發工程中使用的常見的解決問題的方式 單例模式 在全局中只存在一個實例的這種現象 餓漢式:會增長類的加載時間,可以避免的併發問題 懶漢式:減小加載時間,會致使多線程的併發安全問題 裝飾模式 利用FileReader來構建了BufferedReader,而後再BufferedReader對讀取功能作了加強,這種方式稱之爲裝飾設計模式 --- 利用了同類對象構建本身對象自己,對對象身上的功能作了加強或者改善 套接字 進行網絡數據傳輸的一套API --- 本質上是能夠在網絡上使用流 網絡基本概念 七層模型:物理層 數據鏈路層 網絡層 傳輸層 - UDP/TCP 會話層 應用層 表示層 --- HTTP、FTP、POP三、SMTP ... IP地址:在網絡中標記主機。IPv4 --- 四組數表示一個IP地址,每一組數的取值範圍是0-255 10.8.33.5 IPv6 --- 六組數表示一個IP地址 IPv9 端口:計算機與外界交互的媒介 --- 端口號 --- 0~65535 --- 0-1024 域名:各個網站提供的便於記憶的標記 --- news.baidu.com .org .edu DNS解析服務器:將域名和IP地址進行對應的 UDP 基於流的。不創建鏈接,不可靠。 傳輸速度相對比較快的。須要對數據進行封包,每一個包不超過64K大小。 適用於對速度依賴性比較強可是對可靠性依賴性比較低的場景 --- 視頻聊天 --- DatagramSocket DatagramPacket 發送端:
建立套接字對象
準備數據包,將數據放入數據包中,而且綁定要發往的地址
發送數據包
關流 接收端:
建立套接字對象,而且綁定要接收的端口號
準備數據包
接收數據
關流
解析數據 TCP 基於流的。創建鏈接,經歷三次握手,可靠。 可是傳輸速率相對較慢。理論上不限制傳輸的數據的大小。 適用於對可靠性的依賴性更高對速度依賴性較低的場景 --- 文件傳輸 注意:receive/connect/accept/write/read都會產生阻塞。 客戶端 - Socket
建立客戶端的套接字對象
發起鏈接,綁定鏈接地址
獲取自帶的輸出流,寫出數據,禁用輸出流
若是服務器端有打回的數據,則須要獲取輸入流讀取數據,禁用輸入流
關流 服務器端 - ServerSocket
建立服務器端的套接字對象,而且綁定監聽的端口號
接受鏈接,獲取到一個Socket對象
獲取輸入流,讀取消息,禁用輸入流
若是須要向客戶端打回消息,則須要獲取輸出流寫出數據,禁用輸出流
關流 可變參數 可變參數容許傳入的參數個數隨意變化 可變參數本質是數組 一個方法中只能定義一個可變參數 這惟一的一個可變參數必須定義到參數列表的末尾 枚舉 取值相對固定而且可以一一列舉。 用enum定義枚舉 --- 枚舉自己是一個類。 枚舉類中的構造方法默認私有,枚舉常量必須定義在枚舉類的首行。 枚舉類中定義任意類型的方法和屬性,包括抽象方法 在Java中,全部的枚舉默認繼承java.lang.Enum JDK1.5開始,容許在switch-case中使用枚舉常量 反射 反射:在獲取這個類的字節碼的基礎上來解剖這個類。 Field - 表明屬性的類 獲取Class對象
經過類名.class的方式來獲取指定類的字節碼
經過對象.getClass的方式來獲取對象對應的實際類的字節碼
經過Class.forName(類的全路徑名);獲取指定類的字節碼 Method - 表明方法類 Constructor - 表明構造方法的類 Annotation - 表明註解的類 Package - 表明包的類 註解 給程序看的解釋 --- 在Java中,全部的註解的父類是Annotation 註解中的屬性只能是基本類型、枚舉、String、Class、其餘註解類型以及他們所對應的一維數組 元註解 --- 修飾註解的註解 @Target --- 限定註解的使用範圍 @Retention --- 限定註解的生命週期 @Documented --- 限定這個註解在使用的時候可否產生到文檔中 @Inherited --- 限定此註解能夠做用在子類上 JVM參數