问题

为什么一些人很瞧不起 Java?

回答
有些人确实对 Java 抱有一种“瞧不起”的态度,这并非空穴来风,而是源于 Java 在发展过程中,以及它自身的一些特性,在不同时代、不同开发者群体中引发的讨论和评价。要把这个问题说透,得从几个层面来聊。

一、性能与“笨重”的印象:

这是最常见也是最直接的抱怨之一。

JVM 的存在: Java 的核心是 Java 虚拟机(JVM)。JVM 带来了跨平台的能力,这是 Java 早期成功的关键。但另一方面,JVM 本身需要启动时间,需要内存来运行,并且其字节码到机器码的转换(JIT 编译)虽然很高效,但相比于直接编译成原生代码的 C++ 或 Go,总会有一个“启动成本”。这就导致了 Java 程序,尤其是那些需要快速启动、低延迟的应用,可能会显得“笨重”。
启动时间: 想象一下,你写一个简单的“Hello, World!”,用 C++ 可能是瞬间完成,而 Java 即使是最简单的程序,也需要 JVM 启动、类加载、初始化等等一系列步骤,虽然现在有 GraalVM 等技术在努力改善,但这个印象依然存在。
内存占用: 同样的任务,Java 程序往往比 C++ 或 Go 程序占用更多的内存。这不仅仅是 JVM 本身,还包括 Java 的垃圾回收机制(GC)也需要消耗一定的内存资源来管理堆。虽然 GC 极大地简化了内存管理,但也带来了额外的开销。
垃圾回收(GC)的“不可控感”: 虽然 GC 是 Java 的一大优点,但也常常被诟病。GC 会在运行时突然暂停应用程序(StopTheWorld),虽然现在 GC 算法已经非常先进,暂停时间极短,但对于对毫秒级延迟有极致要求的场景(比如某些金融交易系统、游戏服务器),这种“不可控的停顿”是开发者无法容忍的。他们更倾向于 C++ 那种手动管理内存,对资源的控制更精细的方式。
字节码的解释执行(早期): 尽管现在 JIT 已经做得非常出色,但在 Java 早期,很多人对字节码的解释执行方式持保留态度,认为它不如直接运行的机器码高效。虽然这个观点在很大程度上被 JIT 弥补了,但“慢”的标签依然在一些老一辈开发者心中挥之不去。

二、语言设计的“臃肿”与“冗长”:

Java 的设计哲学是“一次编写,到处运行”,这带来了很多为了兼容性和稳定性而设计的特性,但也让语言本身显得有些“啰嗦”。

大量的样板代码(Boilerplate Code): 尤其是在 Java 8 之前,getter/setter 的写法、匿名内部类的语法、异常处理的繁琐,都让开发者觉得写 Java 代码需要写很多重复性的、非核心逻辑的代码。
例如,一个简单的 POJO(Plain Old Java Object)就需要大量的 getter 和 setter 方法,这在 Kotlin 等现代语言中可以用更简洁的属性语法代替。
异常处理,虽然是为了健壮性,但 Checked Exception 的强制捕获和处理,也常常让代码充斥着 `trycatch` 块,降低了代码的可读性。
面向对象的“过度”强调: Java 是纯粹的面向对象语言,一切皆对象。这在设计模式和大型项目中有其优势,但在某些简单场景下,可能会显得过于沉重。例如,很多时候一个简单的函数就可以完成的事情,在 Java 里可能需要封装到一个类里,定义一个方法。
泛型设计的妥协(Type Erasure): Java 的泛型是通过类型擦除(Type Erasure)来实现的,这意味着泛型信息在运行时会被擦除。这导致了泛型的一些限制,比如不能直接创建泛型数组,不能进行 `instanceof` 检查等。相比于 C++ 的模板,Java 的泛型在某些方面显得不够强大和灵活。

三、历史遗留与技术迭代:

Java 并非一成不变,它一直在进步,但一些早期的负面印象,或者说技术发展过程中不同阶段的产物,依然被拿来放大。

Swing 和 AWT: Java 早期的 GUI 框架 Swing 和 AWT,在用户体验和开发效率上,确实不如后来的 Electron、Qt 或者原生 UI 框架。这给 Java 在桌面应用领域留下了“不够现代”的印象。
Android 开发的变迁: 早期 Android 开发以 Java 为主,虽然庞大,但很多开发者抱怨其开发效率和生态的成熟度(相比原生 iOS 开发)。虽然 Kotlin 现在已经成为 Android 的首选语言,但 Java 在 Android 历史上留下的“问题”也被不少人提起。
Spring 框架的复杂性: Spring 框架是 Java 生态中最流行的框架之一,它提供了强大的依赖注入、面向切面等功能,极大地提高了开发效率。但同时,Spring 的配置(尤其是 XML 配置时代)和其背后的复杂性,也让一些开发者望而却步,觉得“学不动”。

四、开发者社区与文化:

“学院派”的刻板印象: Java 在企业级应用、大型项目领域有着深厚的根基,这使得它在很多大型、稳健的系统中被广泛采用。因此,一些开发者认为 Java 过于“学院派”、“重量级”,不太适合快速迭代、小巧灵活的项目。
与“新潮”技术的对比: 随着 Go、Rust、Kotlin、Python 等语言的兴起,它们往往以更高的性能、更简洁的语法、更快的开发速度等特点来吸引开发者。在这种对比之下,Java 有时会显得“老迈”。
“Java 程序员”的标签: 在某些非技术群体中,可能会对 Java 程序员形成一种刻板印象,认为他们只会写“大而全”的企业级应用,缺乏创意和激情。

五、为何还有这么多人用?

尽管存在这些批评,Java 依然是世界上最受欢迎的编程语言之一。这背后有几个关键原因:

1. 庞大的生态系统和社区: Java 拥有极其成熟和庞大的第三方库、框架和工具链,几乎任何你能想到的需求,都有相应的 Java 解决方案。开发者遇到问题,很容易找到答案。
2. 企业级应用的首选: Java 在金融、电商、政务等对稳定性和安全性要求极高的领域,拥有不可替代的地位。它强大的并发处理能力、成熟的 GC 机制、以及各种成熟的中间件(如 Kafka、Dubbo 等)都使其成为构建大型、高可用系统的基石。
3. JVM 生态的优势: 实际上,JVM 不仅仅是 Java 的平台,它还是 Kotlin、Scala、Clojure 等语言的运行环境。JVM 提供的垃圾回收、JIT 编译、内存管理等优势,使得这些语言也受益匪浅。
4. 持续的现代化: Oracle 和社区一直在努力让 Java 现代化。从 Java 8 的 Lambda 表达式、Stream API,到 Java 11 的模块化,再到 Java 17 及之后的 LTS 版本带来的 `records`、`sealed classes`、模式匹配等新特性,Java 正在不断地吸收其他语言的优点,变得越来越简洁和强大。
5. 人才储备: 历史上,大量开发者学习和使用了 Java,这意味着市面上有大量的 Java 开发者,企业招聘也更容易。

总结来说, “瞧不起” Java 的人,通常是觉得它在某些方面不够“现代”、“够快”或者“够简洁”。这可能是基于早期 Java 的性能问题、语言设计的冗长、或者是与新晋语言的对比。但是,Java 的强大生命力在于其庞大的生态、在企业级领域的统治地位、以及持续的自我进化能力。它就像一个经验丰富的老兵,虽然有时候显得有些“沉重”,但在关键时刻,依然是最可靠的选择。

所以,这种“瞧不起”更多是一种特定视角下的评价,而非对 Java 价值的全面否定。它反映了技术发展的不同阶段,以及开发者在不同场景下的需求和偏好。

网友意见

user avatar

正如C++之父所说,这个世界上只有两种语言,一种是经常被骂的,一种是从来没有人用的。

user avatar

瞧不起Java的,盲猜多半是C、C++的程序员。

毕竟,C#、PHP、Python、JS之流,还没有这个胆子敢瞧不起Java。

那为什么C、C++程序员会瞧不上Java呢?

继续盲猜,多半是因为C、C++属于底层语言,直接面向操作系统和硬件编程,手握指针可以直接操作内存的大杀器,怎么不比一个在虚拟机中跑跑字节码的语言有面儿?

那么话说回来:

凭什么底层语言就要高人一等?

按照这个逻辑,直接用机器码打孔的岂不是要翘到天上去了?

编程语言,归根结底是为了解决软件开发问题而诞生的工具,每一门语言的诞生绝不是毫无道理的,一定是解决了什么问题而出现的。

你鄙视Java花里胡哨虚拟执行,Java还鄙视你老态龙钟时常玩崩。

辛苦搬砖九九六

大战产品砍需求

同是社畜程序员

相互鄙视几时休

user avatar

说的好像大牛们瞧得起JavaScript、PHP这些语言一样,,,,,

Java作为一个语言本来就乏善可陈,更要命的是还有一个各方面完爆它的C#存在,瞧不起这个语言本来就没啥奇怪的。

user avatar

看不起java的总体来说有以下几种:

第一种是做比如erlang, scala,haskell之类剑走偏锋的语言的。这些人觉得java的思想实在是太老旧了,简直不可理喻。

第二种是做C#的。他们觉得java完全就是劣化版的C#,而且开源和自由软件的概念相比起“背靠大树好乘凉”而言简直是愚蠢。

第三种是写C或者C++的。他们觉得java没有指针也没有重定义(#define),所以弱。

第四种是写objective-c或者swift的,他们觉得java不是苹果出的所以是邪道。

第五种是做前台的,他们觉得比起javascript这种瞬息万变的语言,java简直就像一个古板的老处女一样严苛。

第六种是写汇编的,他们觉得所有OO语言不但慢而且占用内存还多,完全是浪费。

第七种是写python或者ruby on rail的。他们觉得java太过繁杂,有很多完全不必要的东西。

慢慢列应该还有其他的……

编程是信仰!信仰是不兼容的!!

当然,上边那些其实都是半桶水。真正的高手是万物皆为我所用一切皆可信手拈来的。所以真正的高手不会看不起任何一种语言,只会根据不同的场合选择最合适的而已。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有