2

Java全家桶里的这些内容,我建议不用学了

 2 years ago
source link: https://my.oschina.net/u/4250089/blog/5208358
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

今天这篇文章对 Java 初学者会比较有用。

众所周知,Java 的知识体系繁冗复杂,但是有很多知识在实际工作中几乎没有人用。

很多人在学习过程中,却经常把有限的时间和精力花在了这些“没有用”的知识上,事倍功半。

下面我捋一捋 Java 中那些不建议学习的知识点,让大家能避过雷区,尽量提升些学习的精准度。

Java 的桌面 GUI 相关技术

GUI,即 Graphical User Interface,图形用户界面。

Java 的 GUI 相关技术包括:

  1. Swing
  2. SWT/JFACE
  3. JavaFx
  4. 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% 比重的部分学精学透,这就已经足以成长为能处理各种棘手难题的优秀程序员了。

学习,请精准学习,要学会放弃,知道舍得。


你好,我是四猿外。

一家上市公司的技术总监,管理的技术团队一百余人。

我从一名非计算机专业的毕业生,转行到程序员,一路打拼,一路成长。

我会把自己的成长故事写成文章,把枯燥的技术文章写成故事。

欢迎关注我的公众号,关注后可以领取高并发、算法学习资料。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK