点击下载IntelliJ IDEA最新试用版
Java几乎是独一无二的,它能够在25年前的现代版本的Java中运行代码。语言开发人员非常重视向后兼容性,因此,许多组织很高兴将Java用作主要的开发平台,因为他们知道代码仍会在JVM上运行多年。
长期存在有很多优点。在过去的25年中,开发人员一直在用Java为各种行业和业务类型以及不同的平台编写应用程序。同时,在这25年中,开发人员一直在学校,大学,新兵训练营和在职学习Java。这创建了一个大型生态系统,该生态系统有时间从经验中学习并不断发展。供应商,非营利组织和个人对Java及其可以解决的问题进行了充分的文档记录和良好的支持。对于像我们这样的开发人员而言,非常重要的是,Java的成熟和广泛采用意味着对于想要使用Java进行编码的开发人员来说,有很多工作!
与向后兼容性和成熟度相反,是平台和语言的发展。自2017年(Java 9)起,每六个月发布一个新版本,这使该语言不断进行更改和改进。与预览功能结合使用,该语言能够尝试新语法,从开发人员那里获得反馈,然后标准化对于使用该语言的人来说确实有效的新功能。
Java在向后兼容性和拥抱未来之间很难取得平衡。当前评估向后兼容性并每六个月发布一次的方法,但是每三年发布一次长期支持,似乎达到了适当的平衡。通过为将要删除的不推荐使用的功能提供警告,以及通过替换可能消失的功能,该语言得以发展。
标准对于开发人员而言可能不像语言功能那样令人兴奋,但是拥有适用于Java,Java EE和Jakarta EE的标准以及开发人员遇到的常见用例,确实使开发人员的工作变得更加轻松。了解如何使用JDBC与数据库进行通信意味着我们不必关心数据库驱动程序是如何实现的,我们与数据库驱动程序的交互方式始终相同。在JCP是用来确定Java标准的过程之一。
对于那些不太熟悉Java的人来说,有时候这是一个惊喜,但是Java是一种非常高性能的语言。它是一个成熟的平台,具有25年的性能改进;具有不同性能配置文件的大量垃圾收集器;JVM在运行时针对实际生产用例优化了代码,这比大多数人类开发人员所能做到的要好得多。例如,Java在金融领域得到广泛使用,这取决于低延迟事务和可预测的性能。
自动垃圾收集是25年以来我们通常认为理所当然的另一件事。我们不必考虑在应用程序中如何分配内存或如何释放内存。每个JVM具有一个或多个不同的GC算法,因此我们可以选择一种对我们的应用程序运行良好的算法,而不必过多地关注内部,我们可以继续为应用程序编写业务逻辑。
如果我们对应用程序运行时的运行状况感兴趣,则可以使用许多工具。其中许多甚至是免费的,特别是因为Java Flight Recorder和Mission Control现在已成为OpenJDK的一部分(自Java 11起)。诸如JMX之类的工具甚至还允许我们动态管理我们的应用程序。
我们刚刚提到的许多功能都是JVM的功能,但是我们特别想调用JVM,以及它与Java语言是分开的事实。喜欢JVM的原因很多,其中包括我们已经介绍的一些内容:WORA,运行时优化,性能,供应商选择等,其中许多是由于标准和规范才得以实现的。JVM也必须与Java语言分开,这一点也很重要。这意味着可以在平台上构建不同的语言,从而利用我们刚刚提到的JVM的所有强大功能,同时提供不同类型的语法和语言功能。
Java在Java 6和8之间的那些安静的岁月中得以幸存甚至兴旺的原因之一(Java 7具有一些强大的功能,但对于Java开发人员来说,它并不是一个很大的版本),是因为其他JVM语言所致。在JetBrains,我们最喜欢的当然是Kotlin,但是JVM是其他流行语言(例如Groovy,Scala,Clojure和JRuby)以及大量其他新语言和重新实现的语言的平台。在许多情况下,这些语言与经典Java之间的互操作性有助于我们拥抱和利用这种多样性。
最引人注目的争论之一是我们拥有大量的库和框架可供选择,其中许多是开放源代码且可以免费使用。诸如Spring和Spring Boot这样的流行框架使创建从小型服务到大型复杂企业应用程序的一切变得容易。标准意味着,当我们在另一个环境中使用类似的东西时,通常并不难理解和使用一个库。Java的成熟以及社区对开放源代码的早期采用,意味着通常存在针对标准问题的现有解决方案。无需重新发明轮子。这也意味着,由于许多解决方案已经存在并投入使用很长时间了,因此它们已经过了良好的测试,理解和记录。
贫穷的开发人员不得不在Internet上搜索一些未知的JAR文件的日子已经一去不复返了,JAR文件包含他们试图运行的代码显然需要的类。尤其是,Maven和Gradle使得构建和部署应用程序变得容易,而且还以标准方式设置了具有所有必需依赖项的项目。在新项目或现有项目中开始编码都非常简单。Maven Central和Bintray等公共存储库为我们提供了查找(和发布)库的著名场所。
JUnit的是在1997年创造了这样几乎是一样古老Java本身!它是迄今为止Java世界中最常见的自动化测试框架,并且IntelliJ IDEA附带了JUnit和TestNG,因为它假定任何新的Java项目都将需要测试框架。面向所有语言的现代测试框架很可能基于我们现在认为来自JUnit的想法。Java社区的自动化测试文化在很大程度上归功于这一库。
这是IntelliJ IDEA博客,我们不会忘记这个博客!无论您是相信Java的冗长性需要IDE,还是因为其静态类型而实际上Java可以真正利用IDE,事实都是Java开发人员喜欢他们的IDE(我们也爱您!)。学习有效地使用IDE(无论是IntelliJ IDEA,Eclipse还是NetBeans),可以通过以下方式显着提高开发人员的生产率:代码完成和生成,运行测试,调试,导航和许多其他功能。Java开发人员通常对IDE带来的好处非常热情。
Java社区是一个大型,成熟,充满活力且热情的社区。全球许多城市都有Java用户组,如果您无法参加物理聚会,则有一个虚拟Java用户组。在Java的冠军被公认的技术领导者在Java世界中谁出名为共享的东西都是有用或有趣的Java和JVM开发。Java具有庞大的开源社区,包括通过OpenJDK的JDK本身。Java社区重视学习,教学和不断改进,关心标准和“最佳实践”,并且对于在实际环境中应用这些标准务实。
当然,社区是由人组成的,但是当我问开发人员对Java的最重视时,其中许多人专门指出了影响Java的Java世界中的个人。这些人的范围从同事和老师到像Brian Goetz,Angie Jones,Georges Saab,Mala Gupta和Venkat Subramaniam之类的人。甚至有人提到我。就我个人而言,我之所以来Java是因为我在大学期间学习过Java并且有很多工作,但是我之所以留下来是因为我热爱人们以及从他们那里得到的帮助和支持。
Java通过Javadoc使API文档成为该语言的关键部分。三种不同类型的注释(Javadoc,块和行)清楚地表明了开发人员要留下的注释类型。Javadoc特别鼓励开发人员将有用的文档留给其他调用方法或使用类或包的开发人员。如果开发人员无法在库或代码段上找到详细的教程信息,通常可以使用Javadoc来帮助他们指出正确的方向。
Java社区不仅在早期就接受开源,而且现在JDK本身也通过OpenJDK成为开源。开源使多个供应商和个人更容易参与和协作。能够查看Java本身的代码也很有趣。开源代码为像我们这样的开发人员提供了一个很好的机会,可以向已经完成所有思考和解决复杂问题的艰苦工作的人们学习。
Java平台和Java生态系统中使用的许多最流行的工具都不需要开发人员(甚至常常是牟利组织)来支付使用它们的费用。即使在Oracle 更改了Java 11的许可和支持之后,他们(以及许多其他供应商)仍然提供了一种在生产中免费使用该语言的方法。本文中已经提到的开源项目,构建工具和IDE都是免费的或具有免费选项。这使Java吸引了开发人员开始编写代码,并且吸引了各种规模的组织,他们需要在关注预算的同时构建软件。
当然,面向对象的编程并不是唯一的游戏,每个范例都有其优点和缺点。Java从一开始就被设计为一种OO语言,并且在Java中演示了许多设计模式示例和其他面向OO的编码最佳实践。如果您想要一种面向对象的编程语言,则Java应该是您尝试的语言之一。
Java曾经是,现在仍然是一种面向对象的编程语言。但是它也已经成功地从函数式编程中采用了一些概念(例如lambda表达式和不可变的数据结构),并使它们在OO范式中很好地工作。类型推断(例如var)使我们仍然可以使用静态类型语言的好处,但模板更少。计算机科学仍然是一门相对年轻的学科,但是随着我们学习事物,它们可以应用于我们现有的工具。Java(语言和整个生态系统)是根据新趋势和新的“最佳实践”不断发展的,也是看到现实世界中事物如何运转的结果。
Java代码通常是可读的,即使对于非Java程序员也是如此。该语言倾向于更加冗长而不是过于简洁,这使得我们在阅读Java代码时更容易推理。语言开发人员尚未实现运算符重载之类的功能,因为他们认为不要因意外的自定义行为而感到惊讶,这一点很重要。在语言和框架中,有一种避免“魔术”的趋势-尽管某些框架将使用Convention(诸如约定)而不是Configuration(配置)之类的东西来进行操作,而无需开发人员必须这样做。肯定有一个步骤,例如,使用批注进行大量AOP,以及使用注释进行文档和静态分析检查的更多内容。社区和生态系统倾向于喜欢标准和“最佳实践”,因此即使在非常不同的项目上,Java代码也经常遵循类似的规则。
我们已经介绍了23篇关于Java的内容,但是并没有提到一个功能!老实说,这是因为将自己限制为仅25个功能似乎非常困难,并且因为我们对Java的许多爱好与语法或功能无关。当然,我们提供了一个视频>>,显示所有这些功能,请使用IntelliJ IDEA!>>!
我们每六个月获得一次新功能,每个LTS版本通常为运行于其上的任何应用程序提供开箱即用的更好性能。Java 15(2020年9月)应该具有:隐藏类;文本块(不再预览);更新了记录的预览;instanceof的模式匹配;和密封类的预览。
展望未来,我们还希望看到:Project Loom易于使用,轻量级并发;Valhalla项目的内联类型; 来自Amber项目的更多语言更改,例如lambda剩余的内容;巴拿马计划将使程序员更轻松地访问外部API。莱顿项目(Project Leydon)缩短了启动时间; 对各种垃圾收集器进行更多改进;还有更多。
Java的前途一片光明!
====================================================
JetBrain技术交流群现已开通,QQ搜索群号“786598704”或者扫描下方二维码即可加入
标签:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn