作者 | Nikos Vaggalis 译者 | 冬雨 策划 | 田晓旭 尽管 Java 被称为编程语言的“老马”,但它仍在不断发展。

在 Tiobe 排行榜中,它仍然是的第一名,在 PYPL 和 RedMonk 排行榜上则在与 Javascript 和 Python 争夺第二名的位置,按照 GitHub 上库贡献者的数据来看,它是第三大最受欢迎的语言。

时光在变,Java 一直没变,过去企业在谈 Java,现在还是在谈 Java,这一点可以在财富 500 强企业的技术栈中得到验证。

为什么 Java 能够一直流行呢?其中的原因有很多,例如企业最看重的是向后兼容性,众所周知,向后兼容性对重大的更新和升级非常敏感,而 20 年前用 Java 5 编写的系统还是能够在 Java 8 下编译和运行。

那么,2019 年 Java 的发展如何呢?Baeldung 调查了 6707 名开发经验丰富的技术人员,并从中获得了一些结论。

1 使用版本:Java 8 仍然最受欢迎

从 Java 8 之后,Java 的发布周期明显快了很多,现在已经快要到 Java 14 了。你可能会认为大多数人已经切换了更新版本的 Java 了,但实际情况并非如此,根据调查显示,80% 的受访者仍然在使用 Java 8。

为什么即使有了新版本,Java 8 仍然最受欢迎呢?这其中有很多原因:

首先,Java 8 开创性的语言特性(参见我的闭包和 Lambdas 书评)仍然在被编程社区吸收。即使到了 2019 年,关于 Steam 和 Optional 的相关问题仍在网上被热烈讨论,Baeldung 自己也发布了 Java 8 Optional 指南。

其次,Java 9 首先支持的新模块系统使人们感到困惑,而不是使他们感觉更轻松。

第三,在后来的 Java 版本中引入的特性似乎没有足够的说服力让大家下决心切换。

最后,还存在一个大问题,在 2019 年 1 月份之后,Java SE 8 的公共更新需要商业许可。这就是 Oracle JDK 与 OpenJDK 之争的开始,正如我们在之前的文章中所说的:

随着 Oracle JDK 发行和支持的变化,是使用 Oracle JDK,还是 Oracle 的 OpenJDK,或者是其他供应商的 OpenJDK,这中间在权限上存在着相当大的不确定性。此外,在不同的供应商那里是否可以得到免费更新的相关计划,以及 (新的和现有的) 付费的支持模型,这些都要予以考虑。2 框架:Spring 占据主导地位

在框架的采用方面,Spring 占据了主导地位。与传统且臃肿的 Java EE 相比,Spring 是现代化的、基于 Java 的企业应用程序的轻量级框架。Spring Boot 的采用率也很高。

3 构建工具:Maven 断层式第一

在 Java 构建工具的调查中,Maven 以相当大的优势排在了第一位,这表明排在第二位的 Gradle 仍然是 Android 的代名词,之后需要做更多的努力来摆脱这些限制,以便被认为是 Java 构建通用实践的一个可行的选择。

4 IDE:IntelliJ 大比例占据一位,Eclipse 份额持续下降

在 IDE 的调查中,IntelliJ 以将近 60% 的份额占据了第一的位置,为什么 IntelliJ 如此受欢迎呢?Andrey Cheptsov 曾在一篇博客中这样写道:“在你编写代码时,IntelliJ IDEA 也忙着在构建它的语法树,在类、变量、字段、方法和它们的用法之间创建引用,分析执行流,利用这些信息,它可以提供补全功能,帮助你快速浏览代码,提供错误分析和方便的快速修复。”

而传统的 Eclipse 则有点不妙,其占比从去年的 38% 下降到 32.8%

5 Web/ 应用服务器:Tomcat 占据第一

早在 2011 年,Forrester 的首席分析师 Mike Gualtieri 副总裁就写过一篇既有预见性又不受时间限制的文章,名为《停止在 WebLogic、WebSphere 和 JBoss 应用服务器上浪费金钱》

他开头写道:“使用 Apache Tomcat 吧,它是免费的。”

“我不明白为什么有些公司要在 Oracle Weblogic 或 IBM WebSphere Application Server 这样的 Java 应用服务器上花费数百万美元。我明白为什么有些公司要在 Red Hat JBoss 上花钱,因为他们想要节省在应用服务器上的开销。但是,为什么要花钱呢?Apache Tomcat 将满足大多数 Java web 应用程序的部署需求。”

该表反映了这种说法:Tomcat 一直保持着轻量级的资源消耗,毫无争议地击败 Jetty 夺得冠军。那些重量级产品的位次反映了它们那个年代已经过时的需求。

6 其他 JVM 语言:Java 的使用率未发生变化

首先,让人感到有些惊讶和有趣的是,有 62.6% 的开发人员只使用 Java,这与去年不相上下 (62.8%)。考虑到大家对 Kotlin 的大量采用,我的预期是这个数字肯定会下降,但现在看来并没有下降。不过,Kotlin 仍然从去年的 13% 增长到了现在的 16.5%。和 Gradle 一样,Kotlin 完全可以作为一种通用语言来用,尤其是在后端环境中,但在安卓之外它仍然未被接受得到普遍应用。

7 数据库:关系型数据库比 NoSQL 更受欢迎

MySQL 和 PostgreSQL 是前两名,Oracle 是第三名,MongoDB 和 MS SQL 是第四和第五名。这里有两个值得注意的趋势。与 Percona 的数据库管理系统流行度调查结果一致,关系型数据库管理系统胜过 NoSQL,而开源数据库管理系统则比大型商业数据库管理系统做得更好。就像前文中的 Web 服务器一样,人们寻求的也是更轻量级的等价物,尤其是 PostgreSQL。

8 总结

总而言之,根据调查结果显示,Java 不会被取代,在未来几年也将在继续保持 Top 3 的位置。不过,尽管人们仍然坚持使用该语言及其围绕它的生态系统,但他们也在试图远离 Oracle 及其产品,如 IDE(JDeveloper)、服务器 (WebLogic)、JDK 及其旗舰数据库。MySQL 是个特例,因为它基本上不受甲骨文所有权的影响。大多数 Java 用户正在寻找更轻量级、更高效、更便宜、对开发人员和许可更友好的等价物,这些等价物完全比得上 Oracle 的同类产品,甚至更好。

原文链接:

https://www.i-programmer.info/news/80-java/13334-how-is-java-doing.html

今日推荐文章20个2020年软件开发趋势预测点个在看少个 bug?

java optional用法_2019年 Java 调查报告:“被取代”是不存在的!相关推荐

  1. java 百分比相加_2019年Java面试题基础系列228道(5),快看看哪些你还不会?

    2019年Java面试题基础系列228道 Java面试题(一) 第一篇更新1~20题的答案解析 第二篇更新21~50题答案解析 第三篇更新51~95题答案解析 Java面试题(二) 第四篇更新1~20 ...

  2. java optional 用法_Java 8中的Optional: 如何正确使用?

    Java 8中出现一个新的Optional类型,和其他语言中null的替代品类似. 本文将讨论如何使用这种新类型,即它的主要用例是什么. 什么是Optional类型? Optional是对单个对象包装 ...

  3. java optional 用法_理解、学习与使用Java中的Optional

    从Java8 引入的一个很有趣的特性是Optional类.Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException) -- 每个 Java 程序员都非常了解的异 ...

  4. java optional 用法_Java8 中的 Optional 相关用法

    基本方法: of() 为非 null 的值创建一个 Optional 实例 isPresent() 如果值存在,返回 true,否则返回 false get() 返回该对象,有可能返回 null 应用 ...

  5. 最新java开发工具_2019 最新 Java 开发工具教程,都在这了

    开发工具篇 Maven 篇 Git 篇 其他工具篇 开发工具篇 Intellij IDEA 最常用配置详细图解 Intellij IDEA 非常6的 10 个姿势 Intellij IDEA 那些隐藏 ...

  6. java callable用法_在Java中使用Callable和Future

    最近,我们正在开发一个监控仪表板,我们想要ping几个第三方服务器,只是为了检查它们的可用性,或者我们想要调用健康检查. 我们正在对服务器进行一系列api调用,这些服务器的IP,用户名和密码被外部化为 ...

  7. java sortedlist 用法_为什么Java中没有SortedList?

    本文翻译自:Why is there no SortedList in Java? In Java there are the SortedSet and SortedMap interfaces. ...

  8. java expression 用法_浅析Java 8新特性Lambda Expression

    什么是Lambda Expression 对于Lambda Expression,我的理解是,它是一个函数表达式,如下: (int x, int y) -> x - y 符号左边定义了函数的输入 ...

  9. JAVA中throw用法例子,Java Optional orElseThrow()用法及代码示例

    Java中的java.util.Optional类的orElseThrow()方法用于获取此Optional实例(如果存在)的值.如果此Optional实例中不存在任何值,则此方法将引发从指定供应商生 ...

最新文章

  1. Python基础学习!容器:列表,元组,字典与集合!(1)
  2. 一代数学大家--John Conway逝世,丘成桐、陶哲轩纷纷发文缅怀!
  3. RabbitMQ中的消息不可达returnlistener和mandatory的使用
  4. 将图片保存到系统相冊的两种方法
  5. CMDB 设计(二)实现host、ip存储
  6. 怎么看android sdk 文档
  7. 《区块链开发指南》一一第1章 区块链基础
  8. java 中时间计算_java中关于时间的计算
  9. Shell else if mysql_linux shell中 if else以及大于、小于、等于逻辑表达式介绍
  10. 2021中国WMS市场发展趋势和特点
  11. 数据结构——“双向循环链表“ 易懂刨析双向循环链表(图解+代码)
  12. 杭电OJ 1094(C++)
  13. QTcpServer和QTcpSocket使用详解
  14. 安卓机器人+淘宝客介绍
  15. 计算机的硬件和价格,简述台式电脑的各硬件价格占比
  16. OpenSolaris/Solaris 常见问题解答
  17. Unity----VR摄像机(浅谈)
  18. python爬取酒店信息练习
  19. 广州科源980tc数控系统说明书_GSK928TCa广州数控车床数控系统使用说明书.pdf
  20. WCDMA中的SIR和Ec/N0的计算公式

热门文章

  1. 表格在首行,添加空行
  2. python glob.glob使用
  3. 解决Pycharm文件夹中同级目录导包报错的问题
  4. 百练2815:城堡问题(DFS)
  5. 通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~
  6. android踩坑日记1
  7. android 捕捉home键
  8. swing中如何将jtable中的数据导入到excel中?
  9. Creative media发表了Flash memory player「ZEN Mozaic」的存储增量模式
  10. Java中map关于putAll()和“=”的区别