眾所周知,Java 的知識體系繁冗複雜,但是有很多知識在實際工作中幾乎沒有人用。
很多人在學習過程中,卻經常把有限的時間和精力花在了這些“沒有用”的知識上,事倍功半。
下面我捋一捋 Java 中那些不建議學習的知識點,讓大家能避過雷區,儘量提升些學習的精準度。
Java 的桌面 GUI 相關技術
GUI,即 Graphical User Interface,圖形使用者介面。
Java 的 GUI 相關技術包括:
- AWT
- Swing
- SWT/JFACE
- JavaFx
- JavaFx2
Java 的 GUI 技術到目前的代表應用是兩個:一個是 Eclipse,是用 SWT 開發的;另一個是 Jetbrains 下面的所有開發工具,典型代表是 IntelliJ IDEA。
我為什麼把圖形介面相關技術放在這裡,說不用學呢?因為在我們國內,一個程式設計師的整個職業生涯裡可能都很難和這個技術有所接觸。
-
一是因為國內本身使用 GUI 開發桌面應用的崗位本來就非常少見。國內的主流就是網際網路,相關技術崗位幾乎佔了 IT 圈子的 80% 以上,沒有什麼 GUI 技術的崗位。
-
二是因為 Java 的 GUI 技術難用。雖然 Eclipse 和 IntelliJ IDEA 都使用的 Java 的 GUI 技術,但是 Java GUI 的難用是出了名的,哪怕是最新出的 JavaFx2,也是各種問題一堆,各種記憶體洩露。
說的這裡,我想起來了,我第一份工作還真用過 Swing,當時有個 CS 結構的專案用到了 Swing。
當時我純小白,Java 還沒學明白,更別提用 Swing 了,然後特意買了一本書學習。
不過等我從小白到能寫程式碼的時候,這個專案已經快做完了,所以我也沒貢獻多少程式碼……一直到現在,我還清楚記得,那個專案的介面真樸素,效能也很樸素。
從那次之後,工作十幾年之中,我再也沒接觸過 Java 的 GUI。我身邊做這方面的程式設計師也幾乎沒有。
總的來說,Java 相關 GUI 的東西可以跳過不學,因為用的機會太少了,學起來費勁,相關崗位也少,價效比太差。
Java 的 XML 相關 API
這裡說的 XML 相關 API,其實就是說的 Java 中內建的相關 XML 解析 API,這些相關 API 被統一稱作 JAXP。
在 JAXP 裡,有兩種解析 XML 的方式,都有各自對應的 API:一種叫做 DOM 解析方式,一種叫做 SAX 解析方式。
DOM 解析方式就是 Java 內建了一套解析工具,可以把 XML 內容讀取到應用裡挨個解析對應的元素,然後形成一棵樹。
而 SAX 解析方式就是 Java 內建了一系列的事件對應於不同的 XML 內容的元素,當使用 SAX 解析方式後,碰到一個 XML 元素,就發一個事件到對應的監聽器。比如,當 SAX 遇到某個<a>aaa</a>
,就會發出 startElement 事件,然後,你就可以寫個監聽器,去做對應處理。
我之所以說不要學 XML 相關 API,首要原因是這套體系非常龐大。你表面看著是套 API 使用而已,可是要熟練使用對應的 API,你還得對 XML 本身的構造和相關知識也要有足夠了解。
這些知識除了多和雜,最關鍵的一點是,這些知識過時了。現在用 XML 的場景已經不多了,以後基本也沒人會用這些東西了,XML 相關的東西,基本被 JSON、YAML 這些後起之秀替代了。
所以,如果你正在學 XML,就停下來跳過去,如果準備學 XML,就趕緊避過去。同時我建議:
把精力花在學習 JSON、YAML 的結構、以及如何解析JSON、YAML上。
Java 的安全相關
這裡說的 Java 安全包含了兩個部分:
- java.security 包中的所有相關類和介面
- JAAS 框架
先說第一個,java.security 包在實際工作中,都已經被封裝了起來,大家往往使用的都是已經寫好的工具類。同時呢,java.security 裡有些功能可以通過安全策略去限制一個系統使用者去訪問對應的 Java 類或者遠端下載一個類。
但是在實際當中,限制使用者訪問,完全可以通過開源的許可權框架去限制,而且限制訪問資源即可。限制訪問一個 Java 類什麼的,實際意義並不太大。
接下來再說 JAAS,它的全稱是 Java Authentication Authorization Service。它可以認證系統的使用者,說白了就是登入成功的規則。比如,使用者登入可以使用密碼,也可以無密碼,只去驗證使用者存在的金鑰。但現實情況是,這些東西其實基本上很少有人用了,現實裡大家基本都在用 OAuth2。
所以,Java 安全的學習可以緩緩,建議把這個時間去學習下 OAuth2,這才是有實際價值的東西。
Java 的國際化
這裡說的國際化就是平常大家聽到的 Java 的 Internationalization 相關技術。
國際化的根本目的就是做能給使用者展示出不同語言的系統介面。而這種需求,其實在國內行業需求很少。
但是,當我們學習剛入門的時候,Java 國際化理解起來門檻比較高,有各種各樣的格式化和相關字串替代,還得明白大致的配置檔案是如何載入的。而且就算理解了,由於工作不會經常用到,最終都會全部忘光。
與其花很大功夫學懂弄通 Java 的國際化這門知識,最後很可能又因為忘記了需要重新學,不如省下時間去學好 Java 基礎。
又或者是學習怎麼在某些框架下進行國際化,比如在 Spring 框架搞國際化,只需要弄懂如何使用即可,原理之類的不必深究,不建議鑽進去花時間深入學習。
Java 的 native 方法
Java 的 native 方法就是 Java 如何去訪問 C 或者 C++ 所寫的函式的方式。
但是,還是像上面說的一樣,我工作的十幾年中,用到的次數屈指可數。所以,可以不用學,真要用的時候,我想那時候你已經是一位高階工程師了,現用現學都可以。
所以,研究 native 方法,不如去學些 Java 的高階特性、最佳編碼實踐。
Struts 和 Hibernate
Struts、Hibernate 當年都是非常優秀的 MVC、OR Mapping 框架,後來隨著 Spring 和 MyBatis 的出現,這些後起之秀們越來越流行,Struts 和 Hibernate 用的越來越少了。
如果是自己學習的話,建議直接從 Spring 和 MyBatis 開始,畢竟它們參考了 Struts 和 Hibernate,吸收了前人的優點,改正了前人的缺點。
可能有人覺得“需要學 Struts、Hibernate”——這種觀點存在也正常,因為現在還有很多公司的老專案用的就是它們。
所以,對於 Struts 和 Hibernate,學了也就學了,說不定以後會用到。還沒學的話,直接學 Spring、MyBatis 就行。
其他
Java 中還有很多已經過期,但是至今無論是書籍還是培訓機構,有時候還在提的東西,比如 JSP 啊、JSTL 標籤庫啊,這些真的都可以不學了。
甚至有些時候,根據自己的實際情況,連 Java 的底層網路程式設計,比如如何使用 Socket、如何使用 HttpUrlConnection 這些都可以先放到一邊,轉而等後面學習如何使用 HttpClient 什麼的更好,又或者後面自己看看網路原理後再回頭來學。
總之,Java 的冗餘很多,最好在學習之前,把一些可學可不學的先排除掉,集中精力學最有用的。
總結
我一直推崇精準學習,因為從事程式設計師這行,要學的內容太多了。
我見過許許多多的優秀程式設計師,並不是他們學習能力有多強,只是他們非常聰明,他們可以準確找到他們需要學習的知識點。
根據二八定律,把最核心最重要的 20%,而在日常工作卻佔了 80% 比重的部分學精學透,這就已經足以成長為能處理各種棘手難題的優秀程式設計師了。
學習,請精準學習,要學會放棄,知道捨得。
你好,我是四猿外。
一家上市公司的技術總監,管理的技術團隊一百餘人。
我從一名非計算機專業的畢業生,轉行到程式設計師,一路打拼,一路成長。
我會把自己的成長故事寫成文章,把枯燥的技術文章寫成故事。
歡迎關注我的公眾號,關注後可以領取高併發、演算法學習資料。