JAVA 在 2024 年仍然存在的 25 个理由

本文介绍了Java的25个优势,包括生态成熟、跨平台、向后兼容、强类型系统等。Java生态系统提供广泛的库、构建工具和框架,其强类型系统可减少运行时错误,提高代码可读性。此外,Java在性能、并发编程等方面不断改进,如引入虚拟线程、结构化并发等特性,短时间内难以被取代。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bjarne Stroustrup(本贾尼·斯特劳斯特卢普(C++语言之父) )曾经说过:

“There are only two kinds of programming languages: the ones people complain about and the ones nobody uses.”

世界上只有两种编程语言:一种是人们抱怨的,一种是没人使用的。

OOP在90年代末炒作达到了顶峰,而Java几乎是唯一真正实现这些概念的语言。

在我的整个职业生涯中,我遇到过很多不太理想的 Java 代码库,有时我发现自己对 Java 有点厌倦。然后,我参与了许多其他伟大的项目,并再次开始爱上 Java。

似乎那些批评和抱怨 Java 的人通常更年轻,对 JavaScript 的接触比其他任何事情都多。与 JS 相比,Java 可能显得有点繁重和限制——到处都是样板,编译器严格执行的类型系统,等等。但是如果可以选择,我会选择次优的 Java 代码库而不是 JS 代码库。

只有在积累了一些实际经验,处理了实际项目中的各种问题之后,你才开始意识到Java的所谓“局限性”实际上是防止你搬起石头砸自己的脚的保障措施。

如果你觉得Java有很多投诉,你应该看看 C++。人们又爱又恨这种语言,就像它是一种不可避免的虐待关系。

Python也有相当多的抱怨。

人们经常谈论 GIL(全局解释器锁)如何阻止真正、高效的多线程。Python 核心的许多部分都依赖于 GIL,以至于它可能永远无法自拔。因此,人们不得不通过使用多个进程并创建消息传递方案来在进程之间进行通信来解决这个问题。Python 性能也非常慢,除非您在 C/C++ 中重写热路径。当然,还有整个 Python 2 到 3 的过渡等。

我曾经在一个Django项目上工作过(当它很酷的时候),我认为Python比类型语言更好,但不是在一个有上千个类的复杂系统中,当项目扩展到多人以及十万行代码时,他就变成了一个难以维护的复杂部分。这让我有意识的想切换到java生态。这就是为什么我决定记下一些我最喜欢的Java生态系统。所以,如果有人说Java的坏话,你有25个理由告诉他们为什么他们错了。

1.生态成熟

Java 已经存在了 25 年以上。作为在这个生态系统中工作的开发人员,反思这个生态系统多年来是如何成熟的,真是令人着迷。

Java 广泛的生态系统中最好的事情之一就是我可以选择广泛的库、构建工具和框架。

JVM生态系统非常的完全,几乎每个问题都有一流的库,所有功能都很高性能,维护得很好。在构建工具方面有很多选择,包括 Gradle、Maven 和 Bazel,用于快速可重复的构建。如果您还不熟悉生态系统,Java 为各种功能(如日志记录、数据库连接、消息传递和应用程序服务器)提供了默认实现,这是一个很好的起点。

例如,假设您需要为应用程序进行日志记录。不用担心,Java 开箱即用,默认日志记录选项无缝集成到 JDK 中。如果您不喜欢默认选项,或者它不够用怎么办?默认日志记录只是日志记录 API 的参考实现。还有其他不错的日志记录库可供选择。

这不仅仅是日志记录。Java 生态系统为您提供了数据库连接、消息传递、应用程序服务器、servlet 等选项。

2.一次编写,随处运行 

这是我们经常用来指代 Java 语言的跨平台优势的口号。我知道现在大多数学习 Java 的开发人员可能没有意识到这个功能对软件开发有多么具有开创性。

以下是一些背景信息。在Java诞生的十年前,C++是主要的编程语言。然而,开发人员面临的挑战之一是 C++ 的平台依赖性。用 C++ 编写的代码需要重新编译,并且经常修改才能在不同的操作系统或硬件体系结构上运行。

3. 向后兼容性

        你能想象如果每次有新版本的 Java 时都必须为你的程序重写代码吗?这将是非常昂贵和耗时的,特别是对于大型组织而言。

        Java 已经存在了一段时间,这意味着存在基于旧版本 Java 的软件产品,它们构成了许多企业的骨干,在各个领域发挥着重要作用。

在企业开发中,项目庞大而复杂,将此类系统迁移到最新的 Java 版本需要仔细规划和执行。

Java 对向后兼容性的承诺非常重要,因为它向任何在开发系统上投入大量资金的开发人员或组织保证,它将保持运行并且无需完全重写即可维护。Java (JVM) 的向后兼容性还简化了迁移过程,促进了新功能和改进的采用,而不会危及现有系统的稳定性。

4. JAVA强型系统

Java 是一种强类型语言,而不是松散类型的 Python 等语言。如果你使用过 Python,你会立即感受到将不同类型的值分配给同一变量的灵活性,并且语言会动态适应。

int 年龄 = 25;

字符串名称 = “John”;

但这种灵活性是有代价的。我记得我曾开发过一个金融应用程序,该应用程序处理涉及不同数值数据类型的复杂计算。借助 Java 的强类型,编译器将标记任何混合不兼容数据类型或执行可能导致数据丢失或意外结果的操作的尝试。在运行时之前,这些明显的错误可能在 Python 等语言中没有被注意到。

这就是为什么 Java 对开发企业应用程序很有吸引力的原因之一,尤其是在银行和金融等可靠性和安全性很重要的行业。除了减少必须处理的运行时错误外,Java 的强类型系统还可以通过更轻松地理解变量、参数和返回值的预期数据类型来提高代码的可读性。

5.更快的发布周期 — 不断改进

传统上,作为 Java 开发人员,我们习惯于每隔几年发布一次重大版本后获得新的 Java 功能。然而,为了跟上现代编程的要求,Java 9 后Java 的发布节奏已经更改为 六个月。但是,对于不需要跳入新版本的企业组织,Oracle 提议每三年发布一次 LTS 版本。

更频繁、更小的版本降低了与升级到新 Java 版本相关的复杂性和风险。开发人员不太可能面临重大的兼容性问题,因为增量更改旨在更加向后兼容。

6. 最佳 IDES

Java 已经取得了长足的进步,有许多变化和功能,使其非常适合现代开发。但是,只有当开发人员得到强大的集成开发环境 (IDE) 的支持(如 IntelliJ IDEA、Eclipse 和 NetBeans)时,这才有用。

我无法想象在缺乏智能代码时完成自动重构、无缝版本控制集成等功能的环境中编写代码是什么感觉。然而,同样重要的是,要停下来认识到情况并非总是如此,尤其是在早期的Java时代。

快进到 IntelliJ 和 Eclipse 等现代 IDE,它们使 Java 开发变得轻而易举。这些 IDE 与 Maven 和 Gradle 等构建工具无缝集成,可处理编译、依赖关系解析和项目管理。智能代码完成等功能使 Java 感觉不那么冗长,内置的静态代码分析工具使调试更容易,而访问插件允许您根据需要自定义环境。

7.GRAALVM 原生镜像支持

我们已经讨论过 JVM 是一头奇妙的野兽,它推动了 Java 走向辉煌。但是,JVM长期以来一直受到启动时间缓慢的困扰。这可能是一个非常成问题的,尤其是现在我认识的几乎每个开发人员都在转向微服务、无服务器计算以及快速启动和优化资源消耗至关重要的环境。

与在 JVM 上运行的传统 Java 应用程序相比,人们一直在努力降低内存占用并实现更快的启动时间。令我兴奋的解决方案之一是 GraalVM Native Image 技术。Oracle GraalVM 是一款高性能 JDK,它可以使用称为 Graal 编译器的替代实时 (JIT) 编译器来提高基于 Java 和 JVM 的应用程序的性能。

GraalVM 还包括一个本机映像实用程序,可提前编译 Java 字节码 (AOT),使应用程序几乎可以立即启动。Graal 编译器还可以用作 AOT 编译器,生成本机可执行文件。因此,输入是 Java 字节码,输出是本机可执行文件。

下面是一个使用递归反转 String 的小型 Java 程序示例。

public class Example {
    public static void main(String[] args) {
        String str = "Native Image is awesome";
        String reversed = reverseString(str);
        System.out.println("The reversed string is: " + reversed);
    }
    public static String reverseString(String str) {
        if (str.isEmpty())
            return str;
        return reverseString(str.substring(1)) + str.charAt(0);
    }
}

您可以编译它并从 Java 类构建本机映像。

javac Example.java
native-image Example

本机映像生成器会提前将 Example 类编译为当前工作目录中的独立可执行文件(示例)。然后,你可以运行可执行文件。

./example

8. 开源库和框架。

开源库和框架是 Java 使用至多的关键原因之一。

这些库和框架就像构建块一样,我可以无缝集成到我的项目中,使开发人员无需为常见功能重新发明轮子。这就像有一个精心编写的测试代码存储可供使用。

这些库的庞大数量意味着我不能被困在一个解决方案上。我总是可以选择最适合我需求的产品。这些图书馆的开放性鼓励透明度和问责制。这也意味着我可以深入研究源代码,了解事物在后台是如何工作的,甚至贡献改进。

Java 中的开源库列表包括 JSON 解析库(如 Jackson 和 Gson)、日志库(如 Log4j、SLF4j 和 LogBack)、单元测试库(包括 JUnit、Mockito 和 PowerMock)、数据库连接库、消息库等等。

Java的受欢迎程度至少也要归功于其庞大的框架生态系统。Spring 和 Springboot 是我最喜欢的组合之一。我使用过的其他框架还包括 Jakarta Faces、Struts、Hibernate 和 Quarkus。

9. 多线程

Java 支持多线程,这意味着我可以设计出可以同时无缝处理多个任务的应用程序,无论是处理数据、处理用户交互还是管理后台计算。Java 通过实现 Runnable 接口或扩展 Thread Class 来支持多线程处理。

Java 中的 java.util.concurrent 包还提供了高级并发实用程序,包括 ExecutorService、ScheduledExecutorService、Future、CyclicBarrier 等,用于开发并发应用程序。

public class MyRunnable implements Runnable {
   public void run() {
       // code to be executed in the new thread
   }
}
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
myThread.start();

10. JAVA面向对象的本质

        我知道你在想什么:Java并不是唯一的面向对象语言,那么它与Python和C等语言有什么特别之处呢?与一些采用 OOP 元素或引入支持 OOP 概念的功能的编程语言不同,Java 是从头开始设计时采用面向对象的原则设计的。

Java 坚持面向对象的原则,如抽象、继承、多态和封装,使其成为构建复杂、可扩展和可维护的软件系统的不错选择。我发现 Java 对 OOP 范式的支持有很多好处。这些优势包括构建模块化、灵活、可读、可维护和可扩展的 Java 应用程序。

11. 内存管理和垃圾回收

在手动内存管理中,开发人员负责分配和释放内存,就像决定何时以及如何处理每块垃圾一样。忘记倒垃圾,最终会变得混乱,就像忘记释放内存会导致内存泄漏和性能问题一样。

现在,考虑一下 Java 的自动内存管理;这就像拥有可靠的垃圾收集服务一样。在 Java 中,垃圾回收器扮演着勤奋的垃圾回收器的角色,自主识别和处理不再需要的内存。

在过渡到 Java 之前,我曾使用过 C++,我有两方面的经验。C++ 提供了对内存管理的无与伦比的控制,但作为开发人员,也将承担更多的责任,以确保没有内存泄漏。

另一方面,Java 无需担心低级系统技术细节或手动垃圾回收、底层操作系统或跟踪内存分配和释放的问题。垃圾回收器还会自动识别和回收不再使用的内存。这降低了内存泄漏的风险。

作为一名开发人员,这意味着我可以更多地关注应用程序开发的业务逻辑和更高层次的方面。如果您正在与团队合作,Java 的自动内存管理可以缩短您的开发周期并提高工作效率。

12. 可观测性和监控

直到最近几年,我认识的许多开发人员主要从事开发和维护单体应用程序。故障排除和解决错误具有一定程度的直接性,整个应用程序都驻留在一个有凝聚力的代码库中。跟踪这些类型的应用程序中的问题就像在精心绘制的区域中导航一样。

随着微服务、无服务器计算和分布式系统的兴起,这种情况发生了巨大变化。识别和解决问题变得越来越困难,因为微服务作为通过网络通信的独立服务运行。当问题出现时,它可能不局限于单个代码库。java 中也有一些工具来对这样的问题进行检测。

VisualVM   就像我值得信赖的伙伴,可以了解我的 Java 应用程序底层发生的事情。它将 JConsole 和 VisualGC 结合在一起,为我提供了一个用于监控线程、堆使用率和 CPU 分析的可视化游乐场。此外,它与各种 JDK 实用程序配合得很好,使其成为一个可靠的工具。

VisualVM 就像在我的工具包中有一个秘密特工。它深入挖掘方法级细节,公开执行时间和内存分配。它为您提供了一种简单、轻松且安全的方式来分析云、容器和集群环境。

AppDynamics,它采用整体方法来监控、观察和可视化我的整个技术堆栈,从数据库和服务器到云原生和混合环境。我很欣赏它如何帮助我了解性能对最终用户的影响,使它不仅仅是一个监控工具,而是一个用户满意度工具。

日志记录解决方案。

Log4j。

这就像伐木框架的老政治家一样。它一直陪伴着我,忠实地记录了事件和错误。它在配置追加器和过滤器方面提供的灵活性使其成为满足任何日志记录需求的可靠主力。

SLF4J的。

SLF4J就像我的伐木瑞士军刀。它不直接记录,而是充当门面,允许我无缝插入不同的日志记录实现。这种灵活性使它成为使用具有其日志记录首选项的各种库时的明智选择。

java中的可观测性

Digma:持续反馈 (FC)。

如果您无法看到代码在现实世界中的表现,则无法做出明智的设计决策并评估更改的影响。通过关闭可观测性和代码之间的循环,Digma为一种新的开发方法开辟了道路。

Digma是一个持续反馈(CF)工具,旨在简化从OTEL可观测性源收集和处理有关代码的数据的工作。Digma 作为 IDE 插件在本地运行,并在您编码时收集有关代码的数据,从跟踪到日志和指标。这意味着您可以实时发现问题并获得见解。

Elastic Stack (ELK)。

基于 AI 和搜索构建的开放、可扩展、全栈可观测性。Elasticsearch、Logstash 和 Kibana 共同打造了搜索、分析和可视化日志的强大引擎。关联日志、指标和跟踪的能力为我提供了完整的调查工具包。

13. 函数式编程支持

函数编程是 Java 8 版本中 Java 支持的另一种编程范式。在函数式编程中,我们将函数视为一等公民,这意味着它们可以分配给变量,作为参数传递,并作为值返回。

这种范式中的一些特性使 Java 成为一种有吸引力的编程语言。作为一名开发人员,拥抱 Java 中的函数式编程特性改变了我的游戏规则。lambda 表达式和函数接口的引入使我能够编写不仅更简洁而且更具表现力的代码。凭借其在多核处理器上利用并行处理的能力,Stream API 为我的应用程序提供了性能提升。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        
        int sum = list.stream().reduce(0, (a, b) -> a + b);
        System.out.println(sum);
    }
}

14. JAVA丰富的文档

如果你有机会参与一个团队项目,你一定会明白文档的重要性。就我个人而言,我认为文档是一本用户手册,它解释了代码的作用、它是如何做到的,以及它为什么这样做。如果你是一个学习Java的初学者,这就像有一个导师在你身边。

文档包括一组丰富的代码示例、教程、开发人员指南、API 文档等,可用于快速开发原型并将其扩展到实际应用程序。

如果文档不是最新的,它就没有任何好处。Java 的文档会定期更新和修订,以反映开发人员和专家在生态系统中的新发展。文档的结构也使得很容易找到有关特定类、方法或概念的信息。

15. 构建工具和依赖关系管理

一个普通的 Java/Spring 启动项目可能有几十个,几百个直接依赖项和传递依赖项。手动管理此类依赖项可能是一个令人头疼的问题,尤其是在处理大型企业项目时,因为存在版本兼容性等问题。通过利用生成工具,您可以在与在本地运行其生成的多个开发人员合作时统一断开连接的生成。

但是,Maven 和 Gradle 等构建工具简化了构建、测试和管理依赖项,使开发人员的工作更加轻松。首先,这些工具还可以通过从存储库中获取依赖项并自动检查更新来省去您随时了解有关不同依赖项的更新和安全补丁的麻烦。

构建工具还强制执行项目结构和配置的约定和标准,使其易于理解并与其他 Java 开发人员团队合作。

16. 强大的测试功能

尽管我们开发人员害怕解决错误和与 QA 工程师合作,但我们也承认,全面的测试是确保我们的应用程序尽可能没有错误的最有效方法之一。

选择具有强大测试功能的语言可以显着减轻负担,并有助于建立更可靠和可维护的代码库。这就是为什么我保证 Java 是构建无错误软件的首选编程语言的原因之一。

无论是单元测试、集成测试还是端到端测试,Java 都提供了一套全面的工具来编写全面的测试。JUnit 是 Java 中单元测试的标准。它提供了一种简单而优雅的方式来编写和执行测试。JUnit 使用 @Test、@Before、@After、@BeforeClass 和 @AfterClass 等注释来定义测试方法的生命周期。这允许在运行测试之前设置先决条件。

使用 JUnit 编写测试非常简单,并且与流行的 Java IDE(集成开发环境)无缝集成,例如 Eclipse、IntelliJ IDEA 和 NetBeans。

我发现其他工具对 Java 生态系统中的测试很有用,包括用于集成测试的 TestNG、用于行为驱动开发的 Cucumber 和用于自动化功能和回归测试用例的 Selenium。Mockito 也是一个强大的模拟框架,您可以将其与其他测试框架(如 JUnit 和 TestNG)结合使用。

17. 大型社区

Java 社区在我作为 Java 开发人员的旅程中发挥了重要作用。我已经记不清有多少次向 Java 社区寻求帮助和指导了。无论我是遇到错误、探索新库,还是在实施新解决方案时寻求最佳实践,社区都已被证明是宝贵的信息来源。

Java 社区是响应速度最快的社区之一,你始终可以确保几乎立即获得帮助。例如,我是 Reddit 的 r/java 社区的一员,该社区由数千名 Java 开发人员组成。Stack Overflow 和 Github 等平台上的其他社区包括各种各样的开发人员,从初学者到经验丰富的专业人士。这种多样性是一种优势,因为这意味着拥有涵盖各个领域和经验水平的丰富专业知识。

除了在线社区之外,一些 Java 活动、会议和聚会还为开发人员提供了面对面联系、分享经验和相互学习的机会。这些聚会促进了网络和协作,有助于增强 Java 开发人员的社区意识。

18. JAVA 注释支持

JAVA 注解是一个非常受欢迎的话题,但也存在争议。注解是在 Java 5 中引入的,我们都很兴奋。注解的引入标志着对大量 Hibernate 或 Spring XML 配置文件时代的结束。注释允许我们根据需要将信息、指令或配置直接嵌入到源代码中。

Java 注解通过减少引用外部文档的需要,无疑提高了代码的清晰度和表现力。注释还可以通过封装重复性任务或配置来帮助减少一些样板代码。例如,使用注释,您可以定义依赖注入、ORM 映射和事务边界等方面。

但一些开发人员认为,尽管注解很方便并且有很多好处,但他们仍然对某些注解持怀疑态度。

安全特性

我们编写的程序不仅仅是一行代码。他们还处理敏感信息,例如个人用户数据、财务详细信息和专有业务信息。用户希望我们保护他们的信息并提供一个安全的环境。对于企业,尤其是那些参与软件开发或创新的企业来说,保护应用程序对于防止知识产权被盗非常重要。保护源代码、算法和专有信息对于保持竞争优势至关重要。

Java 具有许多功能,可以更轻松地开发安全应用程序。其中一些功能包括加密、公钥基础结构、安全通信、身份验证和访问控制。您还可以访问大量 API 和工具,从而将安全措施无缝集成到 Java 应用程序中,从加密到智能卡 I/O 以及其他确保安全通信的身份验证协议。

这份清单还远未完成。您可以从官方 Java 安全指南中了解更多可以利用的功能。

20. 丰富的 API 集

Java 还以其丰富的应用程序编程接口 (API) 集而闻名,这些接口为我们开发人员提供了一种与各种软件组件、库和服务进行交互的标准化方式。这些 API 包括丰富的预编译类、接口和方法集合,可提供即用型功能。

假设您正在从头开始制造汽车。Java API 让您感觉就像是在组装从供应商处采购的已经制造的零件,而不是在组装零件之前自己制造零件。在这种情况下,您可以灵活地选择完全符合您需求的 API。这些 API 是标准化的,并且有据可查,因此易于使用。

Java 的 API 是它抽象出组件构建的复杂细节,让您专注于组装一辆功能齐全的汽车,在这种情况下,这就是您的应用程序。这些 API 可以帮助您跨域完成不同的任务,例如网络、IO、文件处理、数据库连接、多线程处理等。

Java API 被组织成几个包。一些最常见的包括 java.lang、java.util、java.io 和 java.net。

21. JAVA的表现

另一件事让我长期了解 Java,是见证了 Java 性能的不断提高,这验证了我选择作为主要编程语言的那一道道由来。

这些性能方面的改进在解决问题方面非常有用,也使我能够构建能够为现代客户提供服务的高性能应用程序。一些值得注意的。

例如,Java 虚拟机 (JVM) 在每个新版本中都进行了重大优化。实时 (JIT) 编译器改进、垃圾回收增强功能和更好的运行时分析共同有助于加快执行速度并减少内存开销。

Project Valhalla 引入了值类型,使我们能够定义更高效、更紧凑的数据结构。这样可以减少内存消耗,还可以增强缓存局部性,从而显著提高性能,尤其是在数据量较大的方案中。

最近,我们看到 JDK 21 引入了 15 个特性,包括关键封装机制 API、虚拟线程以及字符串模板和结构化并发的预览,这些都显著增强了 Java。

22. 结构化并发

建议的结构化并发 API 仍然是 JDK 21 中的一项功能,旨在通过将不同线程中的相关任务组视为单个工作单元来简化并发编程。这种方法增强了错误处理、消除、可靠性和可观察性。该功能部件无意替换 java.util.concurrent 中的现有并发结构。

此功能将使我们能够消除使用现有结构(如 ExecutorService 和 Future)在并发编程中管理任务和子任务的复杂性。任务和子任务之间缺乏内在关系,导致错误处理、取消和可观察性方面的挑战。所提出的结构化并发方法旨在使代码的语法结构与任务的运行时层次结构保持一致,使并发编程更具可读性、可维护性和可靠性。

23. 虚拟线程

虚拟线程最初是作为 JDK 19 和 JDK 20 中的预览功能引入的,现在已正式出现在 JDK 21 中。传统上,java.lang.Thread 的每个实例都与一个平台线程相关联,在其整个生命周期内将其绑定到底层操作系统线程。

然而,虚拟线程带来了范式转变。仍然有 java.lang.Thread 的实例,但它们的运行方式是它们在底层操作系统线程上运行 Java 代码而不垄断它。这一突破使多个虚拟线程能够有效地共享单个操作系统线程。与平台线程不同,虚拟线程不会锁定宝贵的操作系统线程,并且其数量可以远远超过操作系统线程可用性的限制。

虚拟线程是 JDK 21 的一个引人注目的补充。它们可以对应用程序性能产生重大的积极影响,尤其是在并发任务量很大(通常超过数千个)的情况下。

而现在,可以根据应用程序的特定要求灵活地在虚拟线程和传统平台线程之间进行选择。

24. switch的模式匹配

这个激动人心的特性起源于 JDK 17 提案,并在 JDK 18、JDK 19 和 JDK 20 中进行了一系列改进。现在,它将成为 JDK 21 的一部分,并根据 Java 社区的反馈和经验进行其他改进。

此功能的主要目的是扩展switch表达式和语句的功能和多功能性。它还涉及让模式在大小写标签中发挥更突出的作用,在处理空值时允许更大的灵活性,并通过要求使用模式switch语句全面覆盖所有可能的输入值来使开关语句更安全。

如果您已经在使用 switch 表达式和语句,请不要担心;目标是确保它们将继续像现在一样工作,而无需进行任何更改。

25. 字符串模板

字符串模板已经进入 Java,终于带来了对字符串插值的支持,这是开发人员所渴望的。到目前为止,组合多个字符串或与 string.format 争吵是唯一的出路,让我们承认,这很烦人。但是有了 Java 21,我们就可以享受到了。这项新功能使开发人员能够获取 Java 的字符串文本和文本块,并为它们注入字符串模板。

int x = 10;
int y = 20;
String s = STR."\{x} + \{y} = \{x + y}";

主要目标是通过简化可在运行时编译的值的表达式来简化动态字符串的创建。另一个目标是提高可读性,解决与 StringBuilder 和 StringBuffer 类相关的冗长问题。最后,字符串模板还将帮助我们克服与其他编程语言中现有的字符串插值技术相关的安全问题。

总结

java 的生态 和企业使用率决定了短时间内是无法被取代的,而且也正在不停地产生新的技术,总的来说还是生命力旺盛。

本文部分摘自<25 REASONS WHY JAVA IS STILL AROUND IN 2024>---Nir Shafrir

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值