Java 19了,为何程序员几乎都停留在Java 8?

createh54个月前 (02-14)技术教程35

直至今日,OpenJDK(也就是Java开源版本)已发布了预览版OpenJDK 19 了,OpenJDK JDK 19 Early-Access Builds。

然而,众多的Java程序员依然停留在Java8版本,也就是JDK1.8系列,Java8可真是YYDS,差不多快要满10个年头了。

为何程序员不选择使用新版本,依旧使用快要10年的Java8版本呢?

这个问题网上很多回答,大家可以自己通过网络搜索引擎搜索。

其中主要的回答就是Java越做越烂,换个说法就是Java8“非常够用”。

貌似这个说法也很对,但是我却有另外的观点,那就是Java程序员也太死板了。

在这里可能会冒犯一些Java程序员,其实包括我自己也使用了很多年的Java,很多主要项目也是使用Java开发,也是使用Java8版本,所以我没有必要和Java用户搞对立,我可以从自我反思中也可以这样评论。

如果看其它流行语言的发展,比如Kotlin和Golang,特别是Golang,有着挑战Java的态势,还好Kotlin只是作为Java的强化,但其实很多类似的JVM语言并不总是被人买单,就犹如Java新版本为何越做越烂,那是因为很多JVM支持语言如Scala、Groovy以及Kotlin都在新特性上做的比Java新版本好多了,比如对我来说使用Kotlin+JRE8开发,完全胜过使用JDK17等新版本。

作为Android原生开发用户,Kotlin基本上已经成为现在开发Android原生程序的最佳选择,且Kotlin不仅仅支持Android客户端开发,还能无缝支持服务端开发,Native原生应用程序开发,还能开发Web前端,通过类似Typescript一样转译JavaScript,变成全能语言,且在语法上类似于协程和空安全以及响应式编程优势大于Java新版本。

同时Kotlin也完美支持主流Java框架,此外它是著名IDE厂商JetBrains亲儿子,开发工具支持也是无敌了。

再说到框架,目前很多第三方框架或依赖,在Java新版本支持上完全不可靠,很容易出现报错以及不兼容问题,这也是我完全不使用新版本Java项目原因。

这也说到了上述Java程序员太死板这个问题,如果去研究学习其它新语言,从语法到设计都更潮流,也更复杂,像golang语法简洁但实现功能很方便,内置的各种标注库能基本上开箱即用,像rust这样的语言又极其复杂的语法和用法,但又是很强大的底层编程能力。而一看Java,寥寥可数的几个基本关键字,非常简单的面向对象,Java真的是最简单的编程语言之一了,完全谈不上复杂的语法和用法,和C#很类似但是差距越来越大了。因为基本没有开箱即用,非常依赖框架或第三方,这也是程序员非常在意框架生态,比如spring生态,使用什么样的方式取决于Spring框架的指示,失去了自我意识。

相关文章

Java 中 ConcurrentHashMap 1.7 和 1.8 之间有哪些区别?

在初次接触 ConcurrentHashMap 时,许多同学难免会对它高并发环境下的设计原理心生好奇。要弄清它在不同版本之间究竟有何差异,就需要先探究底层原理的“前世今生”。本文将聚焦 Java 1....

Jdk1.8版本的下载,安装和环境变量配置

1.Jdk下载首先在官网上下载Jdk的安装包官网网址:[https://www.oracle.com/java/technologies/javase-downloads.html]下载1.8版本,使...

关于Java8的精心总结

前言 最近公司里比较新的项目里面,看到了很多关于java8新特性的用法,由于之前自己对java8的新特性不是很了解也没有去做深入研究,所以最近就系统的去学习了一下,然后总结了一篇文章第一时间和大家分享...

ConcurrentHashMap最全详解(含JDK1.7和1.8原理剖析)

ConcurrentHashMap是Java并发编程非常重要的容器,也是大厂重点考察,下面我就全面来详解ConcurrentHashMap@mikechenConcurrentHashMapConcu...

Java 8 新特性探秘:Lambda 表达式、Stream API 和 Optional 的深度解析

一、引言Java 8 的出现为开发者带来了诸多强大的新特性,其中 Lambda 表达式、Stream API 和 Optional 更是备受瞩目。这些新特性极大地提高了编程效率和代码的可读性,为 Ja...

最详细的Java学习点知识脑图,从基础到进阶,看完还有啥你不懂的

一、代码块加载顺序静态代码块只会加载1次,在普通代码块前执行,会在类链接中的准备阶段执行普通代码块每次new的时候都会加载,在构造方法前执行,其实是编译的时候,代码被放到构造函数前构造函数每次new都...