java8的新特性_Java8的

java8的新特性

Java8没有安排释放,直到2014年3月,但早期发行版本已经可用了一段时间。 一些最有趣的新功能是:

  • 功能接口
  • 默认方法
  • Lambdas
  • Java时间


新的java.util.stream软件包包含“支持元素流上的功能样式操作的类”。 流不是一种新的集合,并且不替换任何现有的集合,例如列表和队列。 相反,它们提供了一种与现有集合进行交互的方式,并且在这方面与迭代器更相似。

javadocs将流描述为“支持顺序和并行聚合操作的元素序列”。 流管道由产生结果(例如,总和或计数)的源(例如,集合),中间操作(例如,过滤器或映射)和终端操作组成。 流是惰性的,因为对数据的操作仅在最后一分钟(即,在调用终端操作时)执行,并且流仅处理一次。

例如:

int totalFxTrading = blocks.stream().filter(trade -> trade.getType() == FX).mapToInt(b -> b.getTradedAmount()).sum();

功能接口

Java 8将具有称为功能接口的新功能。 功能接口只有一种抽象方法。 您可能已经将许多这样的接口用作Java开发人员,例如Runnable,ActionListener,Comparator和Callable。 在Java 8中,这些类型的接口现在更正式地称为功能接口。 可以使用新的@FunctionalInterface批注来标识它们,最重要的是,可以使用Lambda表达式(稍后再介绍)来表示它们。 例如,过去要使用ActionListener,需要创建一个实现,通常使用匿名内部类。

例如:

JButton button = new JButton();button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent ae) {System.out.println(ae.getSource());}});

使用功能接口,这变得更加简单:

JButton myButton = new JButton();button.addActionListener(ae -> {System.out.println("You clicked the button");});

我们甚至不需要提及ActionEvent –编译器从上下文中得出“ ae”的类型。 请注意, @ FunctionalInterface批注(如@Override批注)不是必需的。 相反,它向编译器发出信号,表明您的意图,以便在某些地方出现问题(例如多个抽象方法可用)时向您发出警告。

默认方法

在Java7之前,接口是相当简单的事情。 它只能包含必须由具体子类实现的抽象方法(和常量)。 接口基本上是一堆方法签名,但是永远不能包含方法定义/实现。

在Java8中,事情变得更加有趣。 现在可以将默认方法添加到接口。 这些是具有实现的方法,不必在接口实现中重写,并且可以直接从接口运行。

添加这些默认方法是为了提供向后兼容性。 如果未添加它们,则例如在不破坏所有实现的情况下就不可能扩展/改善现有的收集接口。 因此,由于这个原因,默认方法有时称为防御者方法。

对我来说,默认方法的真正有趣之处在于它们允许多种形式的继承。 由于一个类可以实现多个接口,并且每个接口现在都可以具有一个具有相同名称的默认方法,因此该子类可以继承哪个版本? 我认为这被称为钻石问题 。 如果在使用Java8时出现这种情况,编译器将提供警告。 您可以使用语法X.super.m(…)显式选择父类的实现之一。

附带说明一下,为什么这些新的默认方法完全需要default关键字? 如果没有该关键字,他们是否也能正常工作? 答案是肯定的,默认关键字是多余的,就像抽象关键字一样。 两者都被添加以使事情更加清晰。 这篇文章有一些更多的细节是链接。

拉姆达

根据Wikipedia的说法,lambda表达式是“定义为不绑定标识符的函数”。 Lambda表达式已进入Java版本,旨在简化代码。

我上面讨论的许多其他更改(默认方法,功能接口)与引入lambas密切相关。

编写Lambda表达式时,它将在编译时转换为功能接口。 这是一个使用Lambda表达式用更简洁易读的代码替换匿名内部类的示例。
没有Lambda的旧方法:

button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent ae) {System.out.println(“Action Detected”);}});

Lambda的新方法:

button.addActionListener(e -> {System.out.println(“Action Detected”);});

使用Lambda表达式通常会使代码更易于阅读,并且所需的行数更少。

Java时间

用Java处理日期和时间从来都不是理想的。 充其量,它是古怪的,而最糟的是,它是一场噩梦。 Date类很笨重,现在已被不推荐使用的方法所困扰。 Calendar类是一种改进,但是我个人似乎总是花更多的时间来浏览API文档,即使我以前做过这些事情。 其他第三方图书馆则尝试以更简洁的方式处理时间(例如,乔达时间)。 有传言说Java8和Java8改进了Java itslef和anf的处理,这就是java.time包。

一个新的(抽象)Clock类提供了一些有用的静态方法,例如systemUTC()和systemDefaultZone()来获取当前时间和时区。 并且许多新类(例如LocalDate和LocalTime以及YearMonth和MonthDay)提供了更为优雅的日常(对双关语)日期操作。

可以在JSR-310站点上找到更多详细信息。

Java8中没有的内容

在一个侧面说明,虽然日期/时间的处理将在Java8得到改善,令人惊讶的还有没有好的办法来处理货币的Java(东西我已经在博客 ,在过去)。 双打(以及所有浮点数)天生就不适合花钱,或者需要精确计算的任何地方。 使用int或long需要跟踪小数点,BigDecimal也不理想。 JSR-354可能会有所改进,但看起来我们必须等到Java 9才能完成。

参考:来自Shaun Abram博客博客的JCG合作伙伴 Shaun Abram的Java8 。

翻译自: https://www.javacodegeeks.com/2013/10/java8.html

java8的新特性

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

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

相关文章

数学史思维导图_【学科活动】思维导图展风采,数学文化提素养——庆云县第四中学(北校区)四年级数学组活动小记...

思维无限 导我所想思维的火花跨越时空,照亮昨天、今天和明天。人类从茹毛饮血、采集狩猎到今天足不出户购遍全球,人工智能、大数据信息处理融入每个人的生活。这其中,最大的改变就是思维方式的改变。——题记思维导图又叫心智导图&#xff0c…

计算机新入学教案,计算机应用 新教案(1-6周).doc

计算机应用 新教案(1-6周)广州康大职业技术学院《计算机应用基础》课程教案计算机系(部) 教师曹丽萍:使 用 年 月 日周次班 次星期节 次教案编号12013-2-26一12经贸1班二1-22012-2-27一12经贸1班三3-4 学习内容第1章 计算机基础知识课时4教学目标专业能力1、了解计算…

python集合用法_Python 集合(Set)

集合 集合是无序、无索引的数据集。在Python中,集合用花括号包裹。 示例 创建集合: thisset {"自行车", "汽车", "高铁"} print(thisset) 注意: 集合是无序的,因此项目将以随机顺序出现。 访问集合项目 不能通过索引来访…

记录更新(Java数据类)

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

k2677场效应管参数引脚_共射极放大电路,场效应管放大电路,运算放大电路

电子技术、无线电维修及SMT电子制造工艺技术绝不是一门容易学好、短时间内就能够掌握的学科。这门学科所涉及的方方面面很多,各方面又相互联系,作为初学者,首先要在整体上了解、初步掌握它。无论是无线电爱好者还是维修技术人员,你…

计算机类和鼠标类是什么关系,电脑自己关机和鼠标键盘有关系吗

都是新版QQ惹的祸,用USB键盘的都会出现这个问题.1、找到QQ的安装目录,方法如下:在桌面上找到QQ图标,用鼠标右键点击图标,在出现的菜单中,点击“属性” ,在弹出的窗口中,点击“打开文件位置”,这…

加载类_JVM类加载详解

类的加载器概述类加载器是JVM执行类加载机制的前提。ClassLoader的作用:ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目…

group by用法多个字段_select的用法

select的用法 --每个员工的所有信息 select * from emp; --每个人的部门编号,姓名,薪水 select empno, ename, sal from emp; --每个人的年薪 select ename, sal*12 from emp; --计算2*3的值 select 2*3 from emp; --计算2*3的值(dual) select 2*3 from …

计算机考试打字小作文,打字练习作文(通用5篇)

打字练习作文(通用5篇)导语:随着计算机在人们的生活中普及,敲键盘打字的速度就变成了人们努力的方向。下面是小编为大家整理的打字练习作文(通用5篇),欢迎阅读,希望大家能够喜欢。打字练习作文 篇1今天过得有些无聊,爸…

euclidea教程_Euclidea

Euclidea作者:Fegeek56次浏览2019-10-13 12:42:02分享Euclidea is a FUN & CHALLENGING Way to Create Euclidian Constructions!> 127 Levels: from very easy to really hard> 11 Tutorials> 10 Innovative Tools> "Explore" Mode and …

信息技术与计算机文化的问题,信息技术与计算机文化

第一章 信息技术与计算机文化1信息:是指自然界、人类活动和人类思维活动中普遍存在的一切物质和事物的属性(在计算机上以数据形式存储)2数据:存储在某种媒体上加以鉴别的符号资料(在计算机以二进制形式存储)3文件:存储在外存上的一组相关信息…

eclipse创建pojo_使用Eclipse Hibernate插件逐步为POJO域Java类和hbm自动生成代码

eclipse创建pojo概述: 在本教程中,我们将使用Eclipse Hibernate工具自动生成域对象和相应的hbm xml文件。 如果您正在处理大型或中型项目,并且开始时有超过5个以上的表,那么您可能会发现此插件是自动生成映射域对象java文件和相应…

c语言中x的n次方怎么表示_线性代数的本质及其在AI中的应用

线性代数是 AI 专家必须掌握的知识,这已不再是个秘密。如果不掌握应用数学这个领域,你永远就只能是「门外汉」。当然,学习线性代数道阻且长。数学,尤其是线性代数常与枯燥、复杂和毫无意义的事物联系起来。不过你还可以另辟蹊径。…

为什么在生产中进行调试是如此诱人?

生产调试 为什么在生产中进行调试是如此诱人? 在我的第一份工作中,我要做的任务之一是修复一个错误,该错误过去在非常复杂的生产系统中有时会发生。 很简单! - 我想。 我将在开发环境中重现同样的情况,找到虚线&#x…

软件测试中需求分析谁去做的,软件项目在进入需求分析阶段,测试人员应该开始介入其中。 - 问答库...

问题:[判断题] 软件项目在进入需求分析阶段,测试人员应该开始介入其中。A . 正确B . 错误某男性患者,45岁.乡镇企业工人,因腹胀,尿少2周就诊。诉近年来体力下降较明显,易疲乏,时有右…

解码base64_linux C++ Base64编解码

Base64的由来目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么&#xf…

java的for循环取出数据只是拿到最后一个_新兴大数据分析榆中百合

新兴大数据分析榆中百合大数据流程从流程角度上看,整个大数据处理可分成4个主要步骤。处理流程图分为三层(数据采集层,数据存储与计算处理层,数据可视化):表2-1 系统环境系统版本Windows 10专业版(建议)LinuxCentOS 6.8 or CentO…

文件 服务器 pandas,疑难杂症-使用pandas_profiling查看EDA数据文档遇到的一些坑

最近在学习特征工程相关的东西,发现pandas_profiling这个包特别适合直观地能够展示数据地很多细节的地方,包括缺失值等相关信息。然后,我就开始折腾pip install pandas_profiling发现一下子把原本好好的环境(Anaconda3.5、Python3)给折腾坏了…

log4j 禁止类输出日志_log4j 2过滤spring日志遇到的问题

在项目中使用testng写单元测试,使用log4j输出日志,spring的日志也被打印出来,在调试的时候看到一片一片的spring日志很烦,总是要找自己的输出日志。这样式的~~~找了一下log4j2的日志过滤,很简单,在logger定…

c++冒泡排序代码_【开源推荐】数据结构和算法必知必会的50个代码实现

最近GitHub上发现了个非常不错的项目,目前star 4000,项目主要讲数据结构和算法,有多种语言 50个代码实现。实现语言有c,c#,go,java,javascript,object-c,python&#xff…