日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

疯狂Java讲义笔记整理

發布時間:2023/12/10 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 疯狂Java讲义笔记整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一、基礎類型
  • 二、流程控制與數組
  • 三、面向對象
  • 四、基礎類庫
  • 五、集合
  • 六、泛型
  • 七、異常
  • 八、數據庫
  • 九、注釋
  • 十、輸入輸出
  • 十一、網絡
  • 十二、類加載機制
  • 十三、多線程


面向對象三大特性:封裝、繼承、多態

一、基礎類型

  • char, int, short, long, byte, float, double, boolean
  • 基本類型的類型轉換(自動與強制、補碼,反碼與原碼)
  • 邏輯運算符(不短路與&,和&&; | 和|| 兩個的只執行最少比較,單個的都比較)
  • 運算符的優先級

二、流程控制與數組

  • if, while, for
  • break, continue, return
  • 數組在內存中,初始化
  • java8增強工具類:Arrays

三、面向對象

  • 類和對象;方法(值傳遞,基礎·類型傳遞值到不同方法棧區,對象類型傳遞引用值,引用自內存堆的對象)
  • 成員變量、局部變量的初始化和內存中的運行機制;
  • 隱藏與封裝:private、default、protected、public
  • 構造器
  • 繼承:單繼承
  • 多態:編譯時類型、運行時類型
  • instanceof前一個需要和后一個類有關系,否則編譯錯誤。比如String instanceof Math,無法通過編譯;
  • 繼承與組合:開銷無差別,繼承is-a;組合has-a
  • final、abstract、接口與抽象類
  • 內部類(非靜態內部類、靜態內部類)
  • Lambda表達式
  • 枚舉類
  • 對象與垃圾回收可達、可恢復、不可達System.gc(); Runtime.getRuntime().gc();finalize方法軟、弱、虛引用

四、基礎類庫

  • Object,Java8增強Objects(大多是空指針安全的)
  • String、StringBuffer(線程安全,每個方法加了synchronized 關鍵字,和StringBuidler同繼承自AbstractStringBuilder方法)、StringBuilder
  • Math庫
  • Random、ThreadLocalRandom(Java7新增用于并發線程安全)
  • BigDecimal(double類型容易發生精度丟失:4.015*100=401.499999999994)
  • Date(不推薦)、Canlendar、Java8新增java.time包
  • 正則表達式:\d \D \s \S \w \W;[]枚舉 -范圍 ^否 &&與 ;^開頭 $結尾 \b邊界 \B \A輸入的開頭 \G前一個匹配的結構 \Z輸入的結尾,僅用于最后的結束符 \z輸入的結尾;貪婪模式(匹配最多,默認)、勉強模式(匹配最少,?)、占有模式Pattern p = Pattern.compile("a*b");Mathcer m = p.matcher("aaaaab");boolean b = m.matches(); //返回true
  • SimpleDateFormat、Java8新增DateTimeFormatter

五、集合

Set:無序,下面實現類都是非線程安全的

  • HashSet:非同步、元素可以是null
  • LinkedHashSet:以插入順序保存,遍歷效率高
  • TreeSet:排序,紅黑樹排序
  • EnumSet:有序,以位向量存儲,緊湊高效,占用內存小,對于批量操作非常快;不允許插入null

List:有序、可重復

  • ArrayList:線程不安全的,可以通過Collections工具類變成線程安全的;數組存儲
  • Vector:線程安全,不過很老了,不推薦使用
  • LinkedList:也實現了Deque接口,可以作為雙端隊列或者棧;鏈表存儲

Queue隊列

  • PriorityQueue:按照元素大小重新排序
  • Deque(類似于雙端隊列,也可以作為棧的實現),ArrayDeque

Map

  • HashMap:線程不安全;允許放入null作為key或value;
  • Hashtable:古老,類似于Vector,不推薦使用,線程安全,不允許放入null;Properties是它的子類
  • LinkedHashMap
  • TreeMap,SortedMap
  • WeakHashMap

Hash的知識點:

  • 容量(capacity,默認是10)、初始化容量(可以通過構造器傳入)
  • 尺寸(當前hash表中記錄的數量)
  • 負載因子,一般是0.75;超過時會發生rehashing,比較消耗

Collections:提供的集合工具類,操縱List、Set、Map

  • 排序、查找、替換
  • 同步控制List list = Collections.synchronizedList(new ArrayList()),可以獲得線程安全的ArrayList

六、泛型

編譯時不檢查類型的異常,所以需要泛型

  • 沒有泛型類:Collections instanceof java.util.ArrayLsit<String>()這個是錯誤的
  • 類型通配符
  • 類型上限與下限,當從List<string>變成List時,發生了類型擦除,變成了上限Object

七、異常

  • finally
  • throw, throws,try catch
  • 不要過度使用異常
  • 不要使用過于龐大的try塊
  • 避免使用Catch All語句
  • 不要忽略捕獲到的異常

八、數據庫

Class.forName(“com.mysql.jdbc.Driver”);

try{

Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/select","root","xxxx");

Statement stat = conn.createStatement();

ResultSet rs = stat.execute("sql語句");

while(rs.hasnext){sysout(rs.getXX)}

stat.executeUpdate("updateSql語句");

conn.commit();

}

  • 連接池(DBCP數據源、C3P0數據源)

九、注釋

  • @override,@Deprecated, @SuppressWarnings
  • @Retention,@Target, @Document
  • 自定義注釋(public @interface Test {}) 用法:@Test
  • 只加注解是沒有用的,結合反射使用 method.isAnnotationPresent方法來做處理

十、輸入輸出

  • File:不能訪問文件本身,需要使用輸入/輸出流
  • 字節流(8位字節,Inputstream、OutputStrem)、字符流(16位字符,Reader、Writer)
  • 轉換流(只提供了從字節流轉換為字符流)
  • 序列化(類實現了Serializable,所有的成員變量也都需要是可序列化的),通過transient指定序列化時可以無需理會(只能用于修飾實例變量)
  • NIO,從java1.4開始,放在java.nio包下;兩個核心對象Channel、Buffer
  • NIO.2 Path、Paths、和Files核心API、FileVisitor

十一、網絡

  • InetAddress代表ip地址
  • URLDecoder,URLEncoder
  • ......太多了

十二、類加載機制

  • 加載過程加載:將類的class文件讀入內存,并為之創建一個java.lang.Class對象連接:驗證、準備、解析初始化:虛擬機對類進行初始化
  • 類加載器根類加載器 bootstrap擴展類加載器 extension系統類加載器 system
  • 反射(由于對象存在編譯時類型和運行時類型,程序需要在運行時發現對象和類的真實信息)獲得Class對象:forName獲取構造器 getConstructor方法getMthod, method.invoke();獲取成員變量getField獲取標注getAnnotation...等
  • 使用反射生成JDK動態代理

十三、多線程

一、創建線程三種方式

繼承Thread、實現Runnable、Callable接口

二、線程的生命周期

新建和就緒、運行和阻塞、死亡

三、控制線程

join、后臺進程Daemon、睡眠Sleep、讓步yield

  • synchronized關鍵字可以修飾方法、代碼塊,但是不能修飾構造器、成員變量等synchronized修飾的同步方法,因為該類的默認實例是this,就是同步監視器,所以可以直接調用Object的wati(), notify(),notifyAll()方法;synchronized修飾的是同步代碼塊,同步監視器就是synchronized括號后的對象,所以必須使用該隊現改對象調用這三個方法。
  • java8提供了新型的StampedLock類,大多數場景中它可以替代傳統的ReentrantReadWriteLock
  • ReentrantReadWriteLock為讀寫操作提供了三種鎖模式:Writing、ReadingOptimistic、Reading
  • 常用的是ReentrantLock(可重入鎖)Private final ReentrantLock lock = new ReentrantLock();public void m(){ lock.lock(); try{ // 需要保障線程安全的代碼} finally{lock.unlock();}}如果是用Lock,則使用Condition將wait,notify,nitifyAll分成不同對象private final Lock lock = new ReentrantLock();privat final Condition cond = lock.newCondition();lock.lock();cond.await();\ cond.signalAll();
  • 使用阻塞隊列(BlockingQueue)控制線程通信

線程組 ThreadGroup

線程池:從java5開始,提供了Executor工廠類

線程相關類:ThreadLocal

產生死鎖的原因主要是:

(1) 因為系統資源不足。

(2) 進程運行推進的順序不合適。

(3) 資源分配不當等。

產生死鎖的四個必要條件:

(1) 互斥條件:一個資源每次只能被一個進程使用。

(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。

(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。

(4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。

總結

以上是生活随笔為你收集整理的疯狂Java讲义笔记整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。