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

      網(wǎng)友投稿 718 2022-05-30

      前言

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

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

      設(shè)計模式

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

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

      /** * 懶漢式 */ 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; } }

      多態(tài)

      多態(tài) 是 Java 面向?qū)ο笾械娜筇攸c之一,上一篇中講了 封裝 和 繼承 ,多態(tài)是本節(jié)的第一重點內(nèi)容。其要表達的意思簡而言之:一種事務(wù)的多種形態(tài)展現(xiàn)形式就叫多態(tài)。

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

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

      在我們實際開發(fā)中,根據(jù)業(yè)務(wù)場景,我們要自己去提取抽象類,進而實現(xiàn)分離的能力,而所分離出來的多個子類,具有不同的表現(xiàn)形式,就是多種形態(tài)的,故名 多態(tài) 。

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

      學(xué)習(xí)多態(tài)可能聽到最多的一句話就是:父類引用指向子類對象。

      什么叫引用,老版本教材中叫做句柄,新點的教程都稱為 引用,其實就是創(chuàng)建的對象的變量,比如:

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

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

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

      這塊內(nèi)容大家看導(dǎo)圖,記住用法和為什么用。實際開發(fā)中,定義接口的場景太多了,必須熟練掌握使用規(guī)則。

      多態(tài) 的內(nèi)容是重中之重,必須搞明白下面這幾個概念和為什么?這也是常見的面試題。

      Java中的多態(tài)你是怎么理解的?

      你對抽象類怎么理解?抽象類有什么特點?

      Java為什么會有接口(interface)?

      接口的使用規(guī)則和接口中方法的定義

      內(nèi)部類的應(yīng)用場景?

      異常

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

      包裝類

      明確為什么要有包裝類?

      熟練掌握裝箱與拆箱的規(guī)則和類型轉(zhuǎn)換方法的使用

      導(dǎo)圖中提到的轉(zhuǎn)換方法,開發(fā)中經(jīng)常用到,大家要多練習(xí),最起碼基本數(shù)據(jù)類型要全部嘗試一次。

      以下代碼是本節(jié)的重點:

      private static void compareDemo() { Integer num1 = 20; /** * 相當(dāng)于執(zhí)行了 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)); /** * 結(jié)果不同的原因:Integer在 -128~127 之間時,參與兩個 Integer 對象比較前會自動拆箱,超過這個范圍則不會 */ System.out.println("num1 與 num3 相等嗎 " + (num1 == num3)); // 30 數(shù)字在比較 System.out.println("num2 與 num4 相等嗎 " + (num2 == num4)); // 對象在比較 }

      字符串

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

      集合

      導(dǎo)圖中的重點內(nèi)容都有標(biāo)記,是屬于重中之重,Java中的集合內(nèi)容也是面試問的最多的知識點之一,必須牢記于心,熟練運用。ArrayList 和 HashMap 是開發(fā)中最常用到的集合,必須要明白它們各自的特點和常用方法以及特有方法,大多數(shù)場景是兩者結(jié)合來使用,比如:條件過濾操作等。

      線程

      首先要搞清楚程序執(zhí)行的默認順序和主線程之間的關(guān)系;其次要明白當(dāng)有多個線程的時候,程序又是如何執(zhí)行的;這兩個問題搞清楚后,你就會明白什么時候需要創(chuàng)建線程了。

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

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

      創(chuàng)建線程的方式

      線程的執(zhí)行順序

      對synchronized關(guān)鍵字的理解

      線程死鎖問題

      IO

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

      以下代碼是關(guān)于 File 類創(chuàng)建文件的三種方式,根據(jù)業(yè)務(wù)都有可能會用到:

      /** * 創(chuàng)建文件 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()); }

      總結(jié)

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

      這三篇內(nèi)容,對于小白建議15天學(xué)完,必須穩(wěn)扎穩(wěn)打,這就是Java最基礎(chǔ)的東西,不管是后面要接觸的多么牛逼的框架,底層都離不開基礎(chǔ)的支撐。

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

      相對比較簡單,自行搜索熟悉寫法,后續(xù)的項目篇章就會應(yīng)用。

      API Java

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:基于ROS的Most Stars開源代碼匯總(自動駕駛汽車+RGBDSLAMv2+ROS2+人識別與跟蹤等)
      下一篇:Spring Security配置內(nèi)容安全策略
      相關(guān)文章
      久久夜色精品国产噜噜亚洲AV| 亚洲AV无码AV男人的天堂| 精品亚洲成在人线AV无码| 亚洲精华液一二三产区| 国产亚洲精品成人AA片| 亚洲婷婷在线视频| 亚洲成人午夜电影| 亚洲成A人片在线观看无码3D | 亚洲理论精品午夜电影| 亚洲一区综合在线播放| 色播亚洲视频在线观看| 久久精品国产亚洲av日韩| 亚洲另类激情综合偷自拍| 精品无码专区亚洲| 亚洲人成人网站18禁| 亚洲午夜精品久久久久久app| 亚洲欧洲AV无码专区| 亚洲国产精品成人AV在线| 亚洲av无码专区在线电影天堂| 亚洲中文字幕久久精品无码VA| 亚洲午夜无码久久久久小说 | 亚洲七久久之综合七久久| 亚洲国产AV无码一区二区三区| 亚洲AV成人一区二区三区观看 | 亚洲精品无码专区2| 国产亚洲精品不卡在线| 国产亚洲自拍一区| 亚洲AV无码国产在丝袜线观看| 亚洲成人在线电影| 亚洲精品美女在线观看| 亚洲制服丝袜中文字幕| 亚洲精华液一二三产区| 亚洲免费日韩无码系列| 人人狠狠综合久久亚洲88| 亚洲国产精品婷婷久久| 亚洲午夜精品在线| 亚洲国产精品99久久久久久| 亚洲AV成人精品日韩一区18p| 亚洲婷婷五月综合狠狠爱| 亚洲va在线va天堂va四虎| 亚洲日产2021三区在线|