1. 程式人生 > 其它 >java基礎知識複習(7.24)

java基礎知識複習(7.24)

java基礎知識複習,關於基礎知識、集合框架、泛型等簡單複習

java 複習

1、概述

  • 歷史:sun公司開發。

  • 三種技術架構:JAVAEE\SE\ME,應對企業級/桌面/開發

  • JDK = java的開發和執行環境 > JRE = 類庫+JVM(執行環境)>JVM

  • javac.exe 編譯 生成class檔案,java執行

2、語法基礎

  • 1、關鍵字:static

  • 2、識別符號:變數名、類名

  • 3、常量

  • 4、變數

  • 5、資料型別:引用/基本資料型別

    級別從低到高:

    byte、char、short ----int ----float----long----double

    自動型別提升:低級別到高級別

    強制型別轉換:強制把高級別的賦給一個低級別的

  • 6、運算子號

    短路與:||,左邊為false,右邊不參與運算

    短路或:&&,左邊為true,右邊不參與運算

  • 7.語句:if/else

  • 8.函式:

    • 修飾符 返回值型別 函式名(引數型別 形參)

  • 9、陣列

    • java分了5片記憶體:暫存器、本地方法區、方法區、棧、堆

    • :儲存區域性變數

    • 堆:儲存陣列和物件,即實體(封裝多個數據的)

  • 10、面向物件

    • 理解:所有的事物都是物件,java的物件是對現實世界的抽象與簡化

    • 物件均有屬性和行為

    • 多個物件均有的相同或相似的行為和屬性,抽提為類

    • 匿名物件:當僅對物件進行一次呼叫時

    • 成員變數/區域性變數:

      成員變數定義在類中,存在在堆中。區域性變數定義在方法中,儲存在棧中

    • 建構函式:對物件進行初始化。

    • 面向物件特徵:封裝、多型、繼承

    • 靜態程式碼塊----》構造程式碼塊----》建構函式

    • 繼承的弊端:打破了封裝性

      • 使用final關鍵字修飾類、方法、常量,不可被繼承、重寫

    • 抽象類/抽象方法:

      • 抽象方法只能定義在抽象類中,abstract

      • 抽象類不可以被例項化,但可以不定義抽象方法

        • 不能和final、private,static共存

      • 模板設計模式:

        • 功能內一部分實現確定(不想被改變,可用final),一部分不確定,可以把不確定的部分暴露出去(abstract),讓子類實現

    • 介面:

      • 介面的成員:

        • 全域性變數:public static final

        • 抽象方法:public abstract

      • 介面可以多實現,但繼承只能單繼承

      • 介面用於功能的擴充套件

      • 介面和抽象類,都是不斷向上抽取的結果,但介面一般用於定義物件的擴充套件功能,抽象是對一個體系單元的抽取

    • 多型:父類或介面的引用指向了子類的物件

      • instanceOf 判斷物件是否實現了指定的介面或繼承了指定的類

  • 異常:

    • 編譯被檢查的異常在函式內被丟擲,函式必須要宣告,否編譯失敗。

    • 宣告的原因:是需要呼叫者對該異常進行處理。    

    • 執行時異常如果在函式內被丟擲,在函式上不需要宣告。

    • 不宣告的原因:不需要呼叫者處理,執行時異常發生,已經無法再讓程式繼續執行,所以,不讓呼叫處理的,直接讓程式停止,由呼叫者對程式碼進行修正。

  • 多執行緒:

    • 程序:正在進行中的程式,其實就是一個應用程式執行時的記憶體分配空間。

    • 執行緒:程序中的一個程式執行控制單元,共享執行緒的空間和資源。

      • 主執行緒:main函式

      • 單獨一個執行緒:垃圾回收

    • 隨機性:哪個執行緒獲取到CPU的執行權,哪個執行緒就執行

    • 狀態:

      • 被建立:start

      • 執行:執行資格 + 執行權

      • 凍結:釋放執行資格 + 執行權

      • 臨時阻塞:有執行資格 + 無執行權

      • 消亡:stop()

    • 步驟:

      • 1,定義類繼承Thread類或者繼承Runnable介面

      • 2,目的是複寫run方法,將要讓執行緒執行的程式碼都儲存到run方法中;

      • 3,通過建立Thread類的子類物件,建立執行緒物件

      • 4,呼叫執行緒的start方法,開啟執行緒,並執行run方法。

    • 實現runnable介面可以避免單基礎的侷限性

    • 同步:

      • 好處:解決了執行緒安全問題,synchronized

      • 壞處:降低了執行效率

      • 鎖:位元組碼檔案物件,

        • 同步函式:對於靜態方法:類名.class,否則是this鎖

        • 同步程式碼塊:任意物件

  • 字串

    • String:用String類進行描述,對字串進行了物件的封裝

      • 特點:“一旦被初始化,就不可以被改變”

      • 方法:valueOf() 轉換字元陣列,基本資料型別為字串

    • StringBuffer:字串緩衝區---執行緒安全的

      • 構造一個不帶字元的字串緩衝區,初始容量為16個字元,可變長度

      • 方法:

        • 增:append()\insert()

        • 刪:delete(),左閉右開

        • 修改:replace()

        • 查詢:indexOf()

        • 其他:reverse()

    • StringBuilder:字串緩衝區---執行緒不安全的

      • 該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍),執行緒不安全但是效率高

  • 包裝類:

    • Integer i = 4; //自動裝箱,1.5版本後的寫法;
  • 集合框架*

    • 集合和數值的區別:

      • 1:陣列是固定長度的;集合可變長度的

      • 2:陣列可以儲存基本資料型別,也可以儲存引用資料型別;集合只能儲存引用資料型別。

      • 3:陣列儲存的元素必須是同一個資料型別;集合儲存的物件可以是不同資料型別。

    • Collection

      • List:元素有序,可重複,判斷元素是否相同,使用equals判斷,因此需要重寫equals()

        • ArrayList:主要實現類,底層資料機構是陣列,執行緒不同步,查詢元素快

          • 可變長度原理:按照原陣列的50%延長,初始含量為10,將新元素加入新陣列

        • LinkedList:雙向連結串列,執行緒不同步,增刪速度快

          • 可變長度原理:按照原陣列的50%延長,初始含量為10,將新元素加入新陣列

        • Vector:古老是實現類,執行緒同步

      • Set:元素無序,不可重複

        • HashSet:底層連結串列+陣列,無序高效,可以儲存null值

          • 通過hashCode、equals 共同保證唯一性

          • LinkedHashSet:按照新增順序,用於遍歷

        • TreeSet

          • 對Set進行指定元素的指定排序

            • 元素需要時同一型別

            • 實現Comparable(複寫compareTo)\Comparator(複寫Compare)

            • 保證唯一的方式,就是參考比較方法的結果是否為0

    • Map 鍵值對,保證鍵的唯一性

      • |——Hashtable:底層是雜湊表(底層連結串列+陣列)資料結構,是執行緒同步的。不可以儲存null鍵,null值。

      • |——HashMap:底層是雜湊表資料結構,是執行緒不同步的。可以儲存null鍵,null值。替代了Hashtable.

      • |——TreeMap:底層是二叉樹結構,可以對map集合中的鍵進行指定順序的排序。

        get(key) 通過鍵,獲取值

        • 遍歷

          • keySet()

          • values()

          • entrySet()

  • 使用集合的技巧:

    看到Array就是陣列結構,有角標,查詢速度很快。

    看到link就是連結串列結構:增刪速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast();

    看到hash就是雜湊表,就要想要雜湊值,就要想到唯一性,就要想到存入到該結構的中的元素必須覆蓋hashCode,equals方法。

    看到tree就是二叉樹,就要想到排序,就想要用到比較。

  比較的兩種方式:

    一個是Comparable:覆蓋compareTo方法;

    一個是Comparator:覆蓋compare方法。

  LinkedHashSet,LinkedHashMap:這兩個集合可以保證雜湊表有存入順序和取出順序一致,保證雜湊表有序。

  • Arrays 用於運算元組物件的工具類

    • .asList(arr) 把陣列轉換成List集合

    • 集合變陣列 :Collection介面中的方法:toArray();

    • 增強for,可用於集合 +陣列

泛型

  • 泛型技術:其實應用在編譯時期,是給編譯器使用的技術,到了執行時期,泛型就不存在了。