java求期望_Java 11的期望

java求期望

过去的几年对Java世界一直是动荡不安的,在相当多的发行版中添加了各种各样的功能。

在开发人员社区中,人们逐渐意识到Java的开发速度不够快。 在最初的20年中,Java平台和Java开发工具包(JDK)经历了庞大,不规则且有些不可预测的步骤。 每个功能版本均由一个或多个重要功能驱动。 因此,每次发布的计划都被推迟了多次,以适应这些功能的完成。

这种方法很好地提供了高质量的大型新功能。 但是,较小的功能和应用程序编程接口(API)仅在大型功能就绪时才能交付。 几年前这是可以接受的,但现在已经不行了。 如今,开发人员可以从各种以更快速度发展的平台中进行选择。

Java 11

在Sun Microsystems的领导下,最新版本是Java 1.6(又名Java 6),并且它已成为五年来的最新主要Java版本。 Sun很快陷入麻烦,并最终被Oracle收购。

Java 7是Oracle领导下的第一个主要版本,其次是Java8。Java平台的演变是从Java 9开始的。正如Java 8都是关于lambda及其后果(功能编程,流和默认方法)一样。 ,Java 9主要涉及模块。

在了解Java 11中出现了哪些令人兴奋的新功能之前,让我们首先看一下自Java 9以来逐步引入的新功能。

Java 9中引入的功能

在计划延迟后,Java 9于2017年9月21日发布。大多数开发人员认为Java 9主要与模块化有关。

Java 9版本及其功能是Java生态系统中的一个里程碑。 模块是构建和部署软件的新方法。 他们帮助开发人员创建了体积更小的架构更好的软件。 引入的关键功能是Project Jigsaw,JShell和其他一些功能改进。

Jigsaw项目是JDK 9中最大的功能,它为Java平台带来了模块化。 庞大的代码库通常会导致复杂,纠结的“意大利面条代码”。 封装代码而在系统的各个部分(Java存档或JAR文件)之间没有明确的依赖关系是非常具有挑战性的。

拼图项目(Project Jigsaw)引入了类似于OSGi的模块化,其中可以使用附加的模块描述符来表达模块之间的依赖关系。 拼图项目是我们设想和开发大型应用程序的方式的一种范式转变。

在Java平台上的20年开发已经付出了巨大的代价。 许多类已经纠缠在一起,没有简单的方法将私有实现类封装在JDK中。 这鼓励了依赖内部细节的外部库的泛滥,同时也阻碍了平台的发展。

有了Project Jigsaw,Java 9现在带有大约90个不同的模块,这些模块将相关的软件包分组。 只能从其他模块访问已从模块显式导出的软件包。 这使得内部实现类的封装成为现实。

Java 11

此外,模块可以指定对其他模块的依赖关系。 就像JDK已被模块化一样,应用程序也可以使用相同的技术。 您可以创建自己的模块来封装包并指定依赖关系,而不必使用脆弱的类路径(该类路径具有重复的,丢失的或不一致的JAR)。 这将使结构更好,更可靠的应用程序大有帮助。

Java 9还引入了JShell(交互式Java REPL) ,它是Java Shell的缩写,也称为REPL(读取-评估-打印循环) 。 它增加了执行不同Java构造(如类,接口,枚举,对象和语句)的功能。 JShell具有多种用途,最常见的用途是对某些代码进行快速测试以了解其工作方式。 无需首先创建一个类,对其进行编译并运行它。 只需使用JShell进行快速测试。

引入了不同的功能改进,例如升级的网络通信和对具有HTTP / 2.0支持的WebSockets的支持,增强的Process API,以简化对操作系统进程的控制和管理,以及Stream API的改进,以创建对集合的声明性转换管道。

Java 10中引入的功能

Java 10于2018年3月20日发布。由于发布周期短,因此仅引入了一些功能。 由于它应该是短期发布,因此JDK 10的公共更新计划在六个月内结束。 许多开发人员可能不会迁移到Java 10,因为他们希望等待Java 11。

长期以来,开发人员一直要求类型推断 ,因为许多静态类型语言已经支持此功能。

JEP 286中,引入了局部变量类型推断 (JDK增强建议),新的关键字var缩短了局部变量的声明。 它指示编译器从其初始化程序推断局部变量的类型。

在Java 10之前,我们曾经这样声明变量:

URL simpleProgrammer = new URL(http://www.simpleprogrammer.com);
URLConnection connection = simpleProgrammer.openConnection();
Reader reader = new BufferedReader(
New InputStreamReader(connection.getInputStream()));

使用Java 10,我们可以避免显式类型声明并编写如下代码:

var simpleProgrammer = new URL(http://www.simpleprogrammer.com);
var connection = simpleProgrammer.openConnection();
var reader = new BufferedReader(
New InputStreamReader(connection.getInputStream()));

通过从变量声明中删除冗余,关键字var使Java不再那么冗长。 可以根据使用它的上下文隐式确定变量的类型。

通过基于时间的发行版本控制 ,已更改了Java版本号的格式,以改善对基于时间的发行模型的支持。 新发行模型最值得注意的方面是发行的内容可能会更改。

开始时,仅宣布发布日期。 但是,如果此新功能的开发花费的时间比预期的长,则将从发布节奏中将其删除,并且将不包括在内。 因此,需要一种描述时间流逝的版本号,而不是所包含的更改的性质。

G1中的并行完整GC是一个有趣的功能,可能会在大爆炸功能宣布的噪音中迷失。 实际上,许多开发人员可能甚至没有注意到它。

G1 GC是Java 8中引入的,它成为Java 9中的默认垃圾收集器。通过设计,它避免了完整的垃圾收集,但是仍然会发生。

G1仅使用单线程的mark-sweep-compact算法来执行完整收集,这可能会导致性能问题。

Java 10通过使用多个线程执行完整GC来解决此问题。 用于完全收集的线程数与用于年轻和混合收集的线程数相同。 现在,G1收集器的完整GC性能将得到显着改善。

长期发布和支持周期

Java 10刚刚发布,但是我们现在迫切希望在今年晚些时候发布Java 11。 由于Oracle旨在加快发布周期,因此我们将以更快的方式提供更多功能。 与JDK 10不同,Java 11将是一个长期支持版本,它将成为Java Platform Standard Edition(Java SE)11的参考实现。

Java 11

除了新的发行版培训之外,Oracle还更改了其支持模型。 在新的方案中,短期发布和长期发布之间有所区别。 像Java 9和10这样的短期发行版将接受公共更新,直到下一个功能发行版可用。 这意味着对Java 9的支持已于2018年3月终止,对Java 10的支持将在2018年9月之后终止。

Java 11有一个独特的区别,那就是它是第一个长期发行版,并且将得到更长时间的支持。 Java 11将在2023年9月之前获得Oracle的首要支持,并将支持扩展到2026年。

Java 11的新增功能?

Java 11可能会推出一些关键功能。 通过删除CORBA (人们仍在使用它), Java EE模块 (最近更名为Jakarta EE)和JavaFX ,Java 11可能还会失去一些功能。

二十多年前,CORBA是创建分布式应用程序的一种流行方法,但我认为现在它仅在旧版应用程序中使用。 Java EE和JavaFX不再完全适合JDK堆栈,现在还有其他第三方库提供这些功能。 让我们详细考虑这些方面。

Java 11计划的新功能

此时,Java 11设置为引入以下功能:

  • JEP 318:Epsilon:任意低开销的垃圾收集器-Epsilon被称为“无操作”收集器,它承诺在不实现任何实际内存回收机制的情况下处理内存分配。 如提案中所述,目标是“以有限的分配限制和尽可能低的延迟开销提供完全被动的GC实现,但要以牺牲内存占用和内存吞吐量为代价。” Epsilon的特定用例包括性能测试,内存压力测试和虚拟机(VM)接口测试。 对于极其短暂的作业,最后一次延迟的延迟或最后一次吞吐量的改善,它也很有用。
  • JEP 323:Lambda参数的局部变量语法-Java 10中引入了局部变量类型推断,以减少与编写Java代码相关的冗长性。 Java 11通过允许使用var声明隐式类型的lambda表达式的形式参数来向前迈出了一步。

当前,您需要为lambda表达式指定参数,如下所示:

(var a, var b) -> a.process(b)

从Java 11开始,可以通过以下方式对其进行简化:

(a, b) -> a.process(b)

虽然它导致语法的统一,但也可以在不简短的情况下将修饰符应用于局部变量和lambda格式。 不需要多余的语法构造,因为可以从上下文中推导出它们。

  • JEP 309:动态类文件常量-Java类文件格式将得到扩展,以支持新的常量池形式CONSTANT_Dynamic。 这将减少创建新形式的可实现类文件常量的成本并减少创建中断。 当前,链接invokedynamic呼叫站点会将链接委托给引导方法。 这是一条JVM指令,它允许编译器生成代码,该代码以比以前更宽松的规范来调用方法。 它提供了进行动态调用的功能,JVM不仅可以识别它,而且可以像优化普通的老式静态类型调用一样进行优化。 现在,加载CONSTANT_Dynamic会将创建委托到引导方法。 新的常量池形式将为语言设计人员和编译器实施人员提供更广泛的表达方式和性能选择。

更快的JDK发布和更短的支持周期

Oracle旨在加快发布周期,因此,我们将以更快的速度提供更多功能。 Oracle去年宣布,2018年将发布两个JDK版本,并且JDK 10已经发布。 与缓慢发布周期的时代相比,这是一个可喜的变化,每几年主要发布中都会引入大量功能。

现在,我们可以预期每六个月发布一个较小的功能。 这具有许多好处,包括Java平台的更快创新。 降低了更新Java版本的风险。 较小的功能集使开发人员更容易采用。

更快的发布周期使Java成为一种敏捷而敏捷的语言。 它已成为一种动态语言,可以响应市场力量和开发人员社区的关注。

什么不会在Java 11中发挥作用?

Java 11

尽管Java 11可能会提供一些新功能,但它仍会比Java 10更为精简,这主要是因为一些遗留功能将被删除。

JEP 320:删除Java EE和CORBA模块旨在从Java SE平台和JDK中删除Java EE和CORBA模块。 实际上,这些模块在Java 9中已经过时,声明要在将来的版本中删除它们。

随着Java SE 6于2006年12月发布,其中包括了完整的Web服务堆栈。 这包括四种技术:

  • JAX-WS-XML Web服务的Java API
  • JAXB-用于XML绑定的Java体系结构
  • JAF-JavaBeans激活框架
  • Java通用注释

从那时起,Java EE版本不断发展,这使得Java SE很难在两个Java版本中包含无关的技术和繁琐的维护工作。 有第三方站点提供了独立版本的Java EE技术,因此Oracle不再感到有义务将它们包含在Java SE或JDK中。

关于删除CORBA,这项技术来自1990年代,如今几乎没有人使用它开发应用程序。 由于CORBA维护的成本远远超过收益,因此Oracle认为Java SE或JDK中没有必要包含它。

准备好使用Java 11

作为Java开发人员,您现在可以选择每六个月更新一次Java版本,也可以选择每隔几年更新一次长期版本。

Oracle还建议每个人都迁移到其Java SE Advanced产品。 对于每个长期版本,它将至少提供五年的支持。 我认为,如果您仍使用Java 8或Java 9之类的早期版本,则可以等待更长的时间,然后直接迁移到Java 11。

Java 11将通过令人兴奋的新功能(例如低开销的垃圾收集器),使用冗长程度较低的lambda表达式以及为语言设计人员和编译器实现人员提供的更多选项,帮助开发人员创建更好的软件。 Java世界的未来看起来令人兴奋。

翻译自: https://www.javacodegeeks.com/2018/06/expect-java-11.html

java求期望

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA for Mac 封装字段(添加setter/getter方法)

可以利用 IDEA 对类中的字段进行封装,所谓“字段封装”,就是指通过调用方法的方式来访问字段,而不是直接通过“对象.字段名”的方式去访问。 例如,成员变量 hairColor 是一个 public 的变量,没有相关的 setter/getter…

JDBC预处理对象prepareStatement

JDBC预处理对象prepareStatement概述 一、SQL注入问题 SQL注入:用户输入的内容作为了SQL语句语法的一部分,改变了原有SQL真正的意义。 假设有登录案例SQL语句如下: SELECT * FROM 用户表 WHERE NAME 用户输入的用户名 AND PASSWORD 用户输的密码; 此…

bean包、entity包、mode包、domain包的区别

文章目录beanentitymodeldomain总结bean 包含的都是 JavaBean。 JavaBean 是一种 Java 语言写成的可重用组件。为写成 JavaBean,类必须是具体和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成属性。Jav…

java修改数据历史记录_记录更新(Java数据类)

java修改数据历史记录最近几个月,有一些与“ Java数据类”(又称为“记录”)有关的更新。 正如我在“ JavaFX,Valhalla,数据类和Java的浮点更新 ”一文中简短提到的那样, Brian Goetz的“ Java数据类 ”“探…

idea配置Maven的本地仓库(打开新的项目时自动更新本地仓库的位置)

配置Maven的本地仓库 一、打开目录然后选择 Other Settings → Settings for New Projects 二、配置自己的文件路径和本地仓库 三、设置每次自动更新本地仓库

java导出数据透视表_使用数据库中的Java流制作数据透视表

java导出数据透视表来自数据库行和表的原始数据不能为人类读者提供太多了解。 相反,如果我们对数据执行某种聚合,则人类更有可能看到数据模式 在向我们展示之前。 数据透视表是聚合的一种特定形式,我们可以在其中应用排序,求平均…

Java程序和MySQL数据库中关于小数的保存问题

文章目录MySQL 中的小数类型decimaldoublefloatJava 中的小数类型floatdoubleBigDecimal金额的计算MySQL 中的小数类型 decimal MySQL 使用 decimal 保存高精度的小数,可以设置保留的小数个数。decimal(m,d),表示该值一共显示 m 位整数,其中…

javafx 遮罩_JavaFX技巧31:遮罩/剪切/ Alpha通道

javafx 遮罩选择条 最近,我不得不实现一个自定义控件,该控件使用户可以从项目列表中选择一个项目。 此“ SelectionStrip”控件必须水平放置项目,并且在项目过多的情况下,允许用户左右水平滚动。 该控件将在空间受限的区域中使用&…

IntelliJ IDEA for Mac如何查看某个方法的实现

如果没有子类,按住 Command,鼠标点击方法名会跳到声明定义方法的地方;如果是接口或者父类,那么只会跳至接口或者父类声明方法的地方,想要看子类的实现,可以点击鼠标右键,选择 【Go To】 -> 【…

日志管理工具_您需要了解的6种日志管理工具(以及如何使用它们)

日志管理工具如果没有正确的工具来汇总和解析您的日志数据,则几乎不可能找到并了解所需的信息。 日志有无穷的用途,因为日志本身是无止境的。 应用程序日志,安全日志,BI日志, 林肯日志 (好吧,也…

Spring半注解半Xml

一、 Component 1.Component 标记了注解, 默认的名称是:简单类名,首字母小写UserDaoImpl -> userDaoImplUserServiceImpl -> userServiceImplComponent可以使用value属性指定对象的名称,相当bean标签的id属性 Component注解…

JDK 命令之 javadoc -- 生成API文档

文章目录命令简介命令选项中文乱码javadoc 命令实例进入源代码文件所在目录,解析指定的源代码文件,生成 API 文档解析指定包下的所有源码文件,生成 API 文档指定源文件根目录,再指定具体的包路径,解析其中的源码文件&a…

apache.camel_带有Spring Boot 2支持的Apache Camel 2.22发布

apache.camel今天,我们发布了最新的Apache Camel 2.22.0版本 ,这是第一个正式完全支持Spring Boot 2的版本。这是一项重大的工作,因为针对像Apache Camel这样的大型框架将Spring Boot v1升级到v2付出了很多努力–感谢骆驼队和他们的贡献。 对…

纯注解的开发

使用纯注解开发 目录结构 JdbcConfiguration package com.itheima.Config;import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbutils.QueryRunner; import org.springframework.beans.factory.annotation.Value; import org.springframework.co…

IntelliJ IDEA forMac 如何生成项目的javadoc(API文档)

1.在菜单栏,点击 Tools -> Generate JavaDoc… 2.根据你自己的需要,设置解析源文件的范围、设置文档输出目录、设置资源的访问权限范围、字符编码、堆内存大小等。

vaadin_Vaadin Flow –奇妙的鹿

vaadin您可能知道,Vaadin是Java上最受欢迎的Web框架之一: https://zeroturnaround.com/rebellabs/java-web-frameworks-index-by-rebellabs/ https://javapipe.com/hosting/blog/best-java-web-frameworks/ 最近发布了此Web UI开发框架的新版本– Vaa…

Spring和Junit整合

一、引入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.2.RELEASE</version></dependency>二、在测试类中修改 &#xff08;1&#xff09;不带有配置文件的修改…

什么是stub文件_stub code

存根, 占位代码&#xff0c;占坑代码&#xff0c;桩代码&#xff0c;粘合代码&#xff0c;残存代码, 指满足形式要求但没有实现具体功能的占坑/代理代码。 stub code 给出的实现是临时性的/待编辑的。它使得程序在结构上能够符合标准&#xff0c;又能够使程序员可以暂时不编辑…

子类重写父类变量_为什么在子类中不重写超类的实例变量

子类重写父类变量当我们在父类和子类中创建一个具有相同名称的变量&#xff0c;并尝试使用持有子类对象的父类引用访问它时&#xff0c;我们会得到什么&#xff1f; 为了理解这一点&#xff0c;让我们考虑下面的示例&#xff0c;在该示例中&#xff0c;我们在Parent和Child类中…

Spring基于 XML 的声明式事务控制(配置方式)

一、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…