Java全家桶裏的這些內容,我建議不用學了

今天這篇文章對 Java 初學者會比較有用。

衆所周知,Java 的知識體系繁冗複雜,但是有很多知識在實際工作中幾乎沒有人用。

很多人在學習過程中,卻經常把有限的時間和精力花在了這些“沒有用”的知識上,事倍功半。

下面我捋一捋 Java 中那些不建議學習的知識點,讓大家能避過雷區,儘量提升些學習的精準度。

Java 的桌面 GUI 相關技術

GUI,即 Graphical User Interface,圖形用戶界面。

Java 的 GUI 相關技術包括:

  1. AWT
  2. Swing
  3. SWT/JFACE
  4. JavaFx
  5. 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% 比重的部分學精學透,這就已經足以成長爲能處理各種棘手難題的優秀程序員了。

學習,請精準學習,要學會放棄,知道捨得。


你好,我是四猿外。

一家上市公司的技術總監,管理的技術團隊一百餘人。

我從一名非計算機專業的畢業生,轉行到程序員,一路打拼,一路成長。

我會把自己的成長故事寫成文章,把枯燥的技術文章寫成故事。

歡迎關注我的公衆號,關注後可以領取高併發、算法學習資料。

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