給Java新手的一些建議——Java知識點歸納(Java基礎(chǔ)部分)發(fā)表時間:2018-11-01 00:00 寫這篇文章的目的是想總結(jié)一下自己這么多年來使用java的一些心得體會,主要是和一些java基礎(chǔ)知識點相關(guān)的,所以也希望能分享給剛剛?cè)腴T的Java程序員和打算入Java開發(fā)這個行當?shù)臏市率謧?,希望可以給大家一些經(jīng)驗,能讓大家更好學習和使用Java。 1. JVM相關(guān)(包括了各個版本的特性) 對于剛剛接觸Java的人來說,JVM相關(guān)的知識不一定需要理解很深,對此里面的概念有一些簡單的了解即可。不過對于一個有著3年以上Java經(jīng)驗的資深來說,不會JVM幾乎是不可接受的。 2. Java的運行(基礎(chǔ)必備) 這條可能出看很簡單,java程序的運行誰不會呢?不過很多時候, 我們只是單純通過IDE去執(zhí)行java程序,底層IDE又是如何執(zhí)行java程序呢?很多人并不了解。 3. 數(shù)據(jù)類型 這條沒有什么好多說的,無非就是Java中的基本類型和對象類型的掌握??梢栽倭私庖恍㎎DK如何自動轉(zhuǎn)換方面的知識,包括裝箱拆箱等,還要注意避免裝箱之后的類型相等的判斷 4. 對象和實例,對象的創(chuàng)建 在這方面,需要了解class和instance的概念以及之間的差別, 這是java面向?qū)ο筇匦缘囊粋€基礎(chǔ)。主要知識點有: 5. 訪問控制 這也是java封裝特性的一個基礎(chǔ),需要掌握的有: 6. 流程控制 Java 流程控制的基礎(chǔ), 雖然有些語法不一定很常用,但是都需要了解,并且在合適的地方使用它們。 7. 面向?qū)ο缶幊痰母拍?/span> 這是一個java的核心概念,對于任何java都需要熟練掌握。Java中很多特性或者說知識點都是和java面向?qū)ο缶幊谈拍钕嚓P(guān)的。在我的理解,一個好的不僅僅需要了解這些特性(知識點)本身,也更需要知道這些對象在java的面向?qū)ο缶幊谈拍钪惺侨绾误w現(xiàn)出來的,這樣更有利于掌握java這門開發(fā)語言,以及其他面向?qū)ο缶幊痰恼Z言。在這里只是簡單羅列了一下,主要的知識點包括有: 8. Static 靜態(tài)屬性在java日常開發(fā)中也是經(jīng)常使用,需要了解和 static 關(guān)鍵字相關(guān)的用法,還有和其他關(guān)鍵字的配合使用, 如是否可以和 abstract, final 等關(guān)鍵字聯(lián)合使用。 9. 基礎(chǔ)知識點 這里主要羅列一些散落的,沒有系統(tǒng)歸類的一些java知識點。在日常的開發(fā)中用到也不少。 這塊內(nèi)容其實還有很多,目前只是暫時歸納了這幾個在這里: 10.集合框架 這個是一個需要多加掌握的部分,做java開發(fā),可以說沒有不用到集合框架的,這很重要。但是這里的知識點并不難,但是對于集合較好要了解內(nèi)部的實現(xiàn)方式,因為這樣有助于你在各個不同的場景選擇適合的框架來解決問題,比如有1W個元素的集合,經(jīng)常要進行contains判斷操作,知道了集合的特性或者內(nèi)部實現(xiàn),就很容易做出正確的選擇。 11.異??蚣?/span> 異常在java的開發(fā)中可能沒有那么被重視。一般遇到異常,直接上拋,或者隨便catch一下處理之后對于程序整體運行也沒有什么大的影響。不過在企業(yè)級設(shè)計開發(fā)中, 異常的設(shè)計與處理的好壞,往往就關(guān)系著這個系統(tǒng)整體的健壯性。一個好的系統(tǒng)的異常對于來說,處理應(yīng)該統(tǒng)一,避免各處散落很多異常處理邏輯;對于系統(tǒng)來說,異常應(yīng)該是可控的,并且是易于運維的,某些異常出現(xiàn)后,應(yīng)該有應(yīng)對的方法,知道如何運維處理,所以雖然異常框架很簡單,但是對于整個企業(yè)級應(yīng)用開發(fā)來說,異常處理是很重要的,處理好異常就需要了解Java中的異常體系。 12. Java IO IO 在java中不僅僅是文件讀寫那么簡單,也包括了 socket 網(wǎng)絡(luò)的讀寫等等一切的輸入輸出操作。比如說 標準HTTP請求中Post的內(nèi)容的讀取也是一個輸出的過程,等等… 13.多線程并發(fā) 多線程是Java中普遍認為比較難的一塊。多線程用好了可以有效提高cpu使用率, 提升整體系統(tǒng)效率, 特別是在有大量IO操作阻塞的情況下;但是它也是一柄雙刃劍, 如果用不好,系統(tǒng)非但提升不大,或者沒有提升,而且還會帶來多線程之間的調(diào)試時等問題。 14.網(wǎng)絡(luò) Java中也是提供了可以直接操作 TCP協(xié)議、UDP協(xié)議的API。在需要強調(diào)網(wǎng)絡(luò)性能的情況下,可以直接使用TCP/UDP 進行通訊。在查看Tomcat等的源碼中,就可以看到這些相關(guān)API的使用情況。不過一般也比較少會直接使用TCP,會使用諸如MINA、Netty這樣的框架來進行處理,因為這個方面的開發(fā)涉及不多,所以就不再詳細羅列了。 15.時間日期處理 幾乎對于每個應(yīng)用來說,時間日期的處理也是繞不過去的,但是JDK8 之前的時間相關(guān)API用法并不友好。在那個時代,可以選擇Joda等時間框架。到了JDK8 發(fā)布之后,全新的時間API基本融合了其他框架的優(yōu)點,已經(jīng)可以很好的直接使用了。 16.XML解析/ JSON解析 其實這兩塊內(nèi)容都不是J2SE里面的內(nèi)容,但是在日常開發(fā)中,和其他程序交互,和配置文件交互,越來越離不開這兩種格式的解析。 17.Maven的使用 Maven也不是Java里面的內(nèi)容,但是maven是革命性的,給java開發(fā)帶來了巨大的便利。從依賴的引入和管理,開發(fā)流程的更新和發(fā)布產(chǎn)出,乃版本的更新,使用maven可以大大簡化開發(fā)過程中的復雜度,從而節(jié)省大量時間。可以說,maven已經(jīng)成為java的標配了。所以我把maven也作為一個java對于基礎(chǔ)必備的知識點。以后會再放上一些我的一些對于maven使用的經(jīng)驗和技巧等,這里就不再細說了。 18.泛型 這是JDK5開始引入的新概念,其實是個語法糖,在編寫java代碼時會有些許便利, 一般的應(yīng)用或者是業(yè)務(wù)的開發(fā),只需要簡單使用,不一定會用到定義泛型這樣的操作, 但是開發(fā)一些基礎(chǔ)公共組件會使用到,可以在需要的時候再細看這個部分,一般情況下只要會簡單使用即可。 19.標注 也是jdk5 之后引入的。spring是個優(yōu)秀的框架,開始就以xml作為標準的配置文件。不過到了Spring3 之后,尤其是 spring-boot 興起之后,越來越推崇使用標注來簡化xml配置文件了,對于來說,可以節(jié)省不少xml配置的時間。但是劣勢是在于標注散落在各個類中,不像xml,可以對所有配置有個全局性的理解和管理,所以還沒有辦法說就取代所有的xml。對于一般,會使用標注即可,一些公共組建的可能會需要了解標注的定義和實現(xiàn),可以在具體需要的時候再細看。 20.RMI RemoteMethodInvocation ,Java語言特有的遠程調(diào)用接口,使用還是比較簡單方便。不過需要跨語言的情況下,就需要使用 webservice 等其他方式來支持。一般來說,程序都不需要使用RMI,不過可以在特定的情況下使用,我就在一個項目中,使用RMI來進行程序遠程啟動停止的控制。 21.JNI Java Native Interface,可以允許Java中調(diào)用本地接口方法,一般用于C/C++代碼的調(diào)用。需要注意的是在java中加載so/dll文件的路徑問題,本身調(diào)用接口并不復雜,但是經(jīng)常在是否加載了所需的本地接口庫中花費較多時間。 以上也只是簡單介紹了下我對于這些java基本知識點和技術(shù)點的一些看法和介紹, 這些內(nèi)容都源自于我這些年來使用java的一些總結(jié), 希望給剛剛接觸Java, 或者打算從Java開發(fā)的人一些經(jīng)驗, 希望能夠更有效率地學習和使用java, 避免走了彎路浪費了寶貴的時間。這當中還有些內(nèi)容不夠完善的地方,會通過以后的文章再添加上。由于個人能力有限,當然其中也會有些錯誤和疏漏,歡迎指正,一起討論,共同來把這篇文章再完善下,希望它可以真正幫助到有需要的人。
|