一文回顧 Java 入門知識(下)

前言

這是推薦學java 系列的第三篇,這節的內容很多,對於小白來說,都是新概念,要熟練掌握的話,需要大量的練習。本節內容的導圖會很大,小編會在講解每個知識點之前單獨提供導圖,當然全圖也有,除此之外,這節內容會涉及很多系統的API,而我們要學會看 jdk 文檔,所以也會給大家提供 jdk1.8 的幫助文檔,下載見文末。

有圖有真相就不多說了,知識點基本是上一篇的兩倍。

設計模式

Java中的 23 種設計模式在開發中應用很多,不僅僅是我們平時的應用開發,還包括一些框架和系統源碼中都有應用,具體的內容不能生搬硬套,而是在經驗中去體會這個過程,思考應用設計模式的時機和場景。

其中單例設計模式最常用,也最簡單,幾乎可以說但凡用Java語言開發的程序,都會用到單例設計模式。沒有必要死磕概念,重要的是理解其思想,隨着開發經驗的累積,就會慢慢體悟到其中的奧妙!

/**
 * 懶漢式
 */
public class SingletonLazy {

    private static SingletonLazy singletonHungry;

    private SingletonLazy() {
    }

    public static SingletonLazy getInstance() {
        if (singletonHungry == null) {
            singletonHungry = new SingletonLazy();
        }

        return singletonHungry;
    }

}
/**
 * 餓漢式
 */
public class SingletonHungry {

    private static SingletonHungry singletonHungry = new SingletonHungry();

    private SingletonHungry() {
    }

    public static SingletonHungry getInstance() {
        return singletonHungry;
    }

}

多態

多態 是 Java 面向對象中的三大特點之一,上一篇中講了 封裝繼承 ,多態是本節的第一重點內容。其要表達的意思簡而言之:一種事務的多種形態展現形式就叫多態。

抽象起來不好理解,舉例實際場景比較好理解:

比如我們軟件開發者本身就是抽象一類,因爲其他行業的人理解起來就不容易,而且還分不清楚,你到底是開發啥的?(是前端開發還是後端開發?是Java開發還是PHP開發?是系統層開發還是遊戲開發?等等),這個概念總體給人是一種抽象的,但還大概知道這個詞具有哪些 共性 ,而這裏的 共性 就是抽象出來的具體能力,Java中叫抽象方法,因爲每個具體的開發者所具有的同一個方法內部能力表現不同,這就是具體子類要實現的。這裏的子類可以理解爲 java開發工程師PHP開發工程師 等等。

在我們實際開發中,根據業務場景,我們要自己去提取抽象類,進而實現分離的能力,而所分離出來的多個子類,具有不同的表現形式,就是多種形態的,故名 多態

關鍵字 instanceof

相信你能明白,我們抽離出來了抽象類(父類),那麼子類的表現各異,而父類如何判斷一個子類是否是它的子類呢?這就是關鍵字 instanceof 的用處。

學習多態可能聽到最多的一句話就是:父類引用指向子類對象

什麼叫引用,老版本教材中叫做句柄,新點的教程都稱爲 引用,其實就是創建的對象的變量,比如:

// programmer 就是句柄,也叫引用
Programmer programmer = new Programmer();

再舉個父類引用指向子類對象的例子:

// new 是用來創建對象的,上一節大家都用過
Programmer javaProgrammer = new JavaProgrammer();

interface

這塊內容大家看導圖,記住用法和爲什麼用。實際開發中,定義接口的場景太多了,必須熟練掌握使用規則。

小結

多態 的內容是重中之重,必須搞明白下面這幾個概念和爲什麼?這也是常見的面試題。

  1. Java中的多態你是怎麼理解的?
  2. 你對抽象類怎麼理解?抽象類有什麼特點?
  3. Java爲什麼會有接口(interface)?
  4. 接口的使用規則和接口中方法的定義
  5. 內部類的應用場景?

異常

這塊內容現在開發中依靠 IDE 的只能提示已經可以搞定了,更多的應用情況是自己開發SDK或者封裝組件時候的處理,明確出現異常時,程序的執行順序,以及父類方法拋出異常,子類重寫時拋異常的規則。

包裝類

  • 明確爲什麼要有包裝類?
  • 熟練掌握裝箱與拆箱的規則和類型轉換方法的使用

導圖中提到的轉換方法,開發中經常用到,大家要多練習,最起碼基本數據類型要全部嘗試一次。

以下代碼是本節的重點:

private static void compareDemo() {

    Integer num1 = 20;

    /**
     * 相當於執行了 Integer num2 = Integer.valueOf(2021);
     *
     * Double 和 Float 不具備這個特性(常量池)
     */
    Integer num2 = 2021;

    Integer num3 = 20;
    Integer num4 = 2021;

    System.out.println("num1 與 20 相等嗎 " + (num1 == 20));
    // 自動拆箱比較
    System.out.println("num2 與 2021 相等嗎 " + (num2 == 2021));

    /**
     * 結果不同的原因:Integer在 -128~127 之間時,參與兩個 Integer 對象比較前會自動拆箱,超過這個範圍則不會
     */
    System.out.println("num1 與 num3 相等嗎 " + (num1 == num3)); // 30 數字在比較
    System.out.println("num2 與 num4 相等嗎 " + (num2 == num4)); // 對象在比較
}

字符串

這部分內容每個Java開發者必須熟練掌握,字符串的截取、替換、匹配、大小寫轉換、查找、拼接等是最最常用的操作,導圖中列出來的方法必須熟練運用。

集合

導圖中的重點內容都有標記,是屬於重中之重,Java中的集合內容也是面試問的最多的知識點之一,必須牢記於心,熟練運用。ArrayListHashMap 是開發中最常用到的集合,必須要明白它們各自的特點和常用方法以及特有方法,大多數場景是兩者結合來使用,比如:條件過濾操作等。

線程

首先要搞清楚程序執行的默認順序和主線程之間的關係;其次要明白當有多個線程的時候,程序又是如何執行的;這兩個問題搞清楚後,你就會明白什麼時候需要創建線程了。

知識點(同樣是面試題):

  • 創建線程的方式
  • 線程的執行順序
  • 對synchronized關鍵字的理解
  • 線程死鎖問題

IO

這部分內容實際開發中與網絡請求結合使用,比如下載文件、上傳文件、修改頭像等,這裏的具體API使用都是最原生的,也就是底層實現邏輯是這樣的,往往實際開發中我們會使用別人封裝的框架,看不到最裏面的API實現,框架會暴漏給我們一些方法,也許就是一句話就實現了下載或者上傳;但是有些場景還是需要我們手動擼一遍,所以這些原理的核心代碼還是要掌握,偶爾面試也會讓你口述流程。

以下代碼是關於 File 類創建文件的三種方式,根據業務都有可能會用到:

/**
 * 創建文件 File 的幾種方式
 *
 * @param parentPath   前端路徑
 * @param fileNamePath 後端路徑
 */
private static void createFile(String parentPath, String fileNamePath) {
    File file1 = new File(parentPath + "\\" + fileNamePath);
    System.out.println("file1 is exit ? " + file1.exists());

    File file2 = new File(parentPath, fileNamePath);
    System.out.println("file2 is exit ? " + file2.exists());

    File file3 = new File(new File(parentPath), fileNamePath);
    System.out.println("file3 is exit ? " + file3.exists());
}

總結

jdk1.8 幫助文檔下載:https://pan.baidu.com/s/12JHAlmwZbtBiJlPNZPlf3Q 取密碼:d5ya(這個文檔是小編從網上下的,裏面如有其他內容請勿相信哈)

這三篇內容,對於小白建議15天學完,必須穩紮穩打,這就是Java最基礎的東西,不管是後面要接觸的多麼牛逼的框架,底層都離不開基礎的支撐。

補充內容:Java中的枚舉(Enum)

相對比較簡單,自行搜索熟悉寫法,後續的項目篇章就會應用。

小編特意創建了一個號:推薦學java,會分享與java相關的內容,並且以原創爲主,歡迎大家搜索關注(關注即送小編挑選的精品視頻教程),一起學Java!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章