java8 新特性

从Java8到Java21各版本新特性详解 上面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线,可以看出,JDK 17的支持时间最长,可以延续到2029年9月。考虑到技术更新的速度,这次免费商用8年的时间可谓是经过精心考虑,旨在让用户放心地升级到JDK 17(不过JDK 8的支持时间更长,可以延续到2030年12月)。从JDK诞生到现在,仅有几个版本得到了长期支持,主要包括JDK 7、JDK 8、JDK 11以及即将发布的JDK 17,它将是继Java 8之后最重要的LTS版本,是Java社区八年努力的成果。 阅读详情

java8 新特性

注:此为复习笔记,查缺补漏,并非全部知识点讲解。

Lambda表达式
  • lambda表达式允许把函数作为一个方法的参数。使得代码结构更加紧凑。

    • 通过函数描述符能描述lambda表达式的参数。如:int example(Apple a1, Apple a2)就可以表示为(Apple, Apple)->int。
    • 传递行为正是Lambda的拿手好戏。
  • lambda主要用来定义行内执行的方法类型接口。

  • lambda表达式支持三种使用方式。

    1. 直接使用,定义一个方法后,使用变量名.方法名的方式调用。
    2. 通过将接口类型定义在方法参数中,在方法实现中调用该接口中的方法,在将实现接口方法的变量名传入该方法作为参数。
    3. 同2中在方法参数中定义接口类型,但是在调用时不传入变量名,而是直接写一个lambda表达式。
    public class Note {
    
        interface Calculation{
            //接口中只能有一个抽象方法,接口默认方法不算抽象,重写了Object类的也不算抽象(任何类中都有实现)。
            int cal(int a, int b);
        }
    
        public static void main(String[] args) {
            // 方式1
            Calculation add = (a,b) -> a+b;
            int r1 = add.cal(10, 20);
            System.out.println(r1);
    
            // 方式2
            Note note = new Note();
            Calculation subtraction = (int a, int b)  -> {return a-b;};
            int r2 = note.cal(10, 20, subtraction);
            System.out.println(r2);
    
            // 方式3
            Note note2 = new Note();
            int r3 = note2.cal(10, 20, (m,n)->m*n); //变量名既与接口中方法定义的无关,也与调用的方法参数中写的无关,只是个形参
            System.out.println(r3);
    
        }
    
        public int cal(int x, int y, Calculation calculation){
            return calculation.cal(x, y);
        }
    }
    
  • lambda表达式只能引用标记了final的外层局部变量。也即是表达式内部不能修改外部的值。

默认方法
  • 默认方法也就是接口可以去实现方法,而不需要是实现类去实现。
  • 好处:之前为了修改接口的功能,所有实现类都要去修改。使用默认方法后,只改接口就好。
  • 原因:引进默认方法是为了不与之前发布的代码形成冲突。有新特性需要接口增加方法,但是会与已发布的代码冲突,没法实现新的接口方法。所以引入了接口默认方法,直接在接口中实现即可,不需要修改原有代码。
  • 使用方法:加上default关键字,对于实现的多接口相同的默认方法,可以自己重写一个,或者使用super调用具体的某一个(接口.super.方法();)
  • 接口还可以声明静态接口方法。
函数式接口
  • 简单来说,只有一个抽象方法的接口就是函数式接口。接口默认方法不算抽象,重写了Object类的也不算抽象(任何类中都有实现)。
  • Java中提供了一些函数式接口:Comparatot、Runnalble、ActionListener、Callable、PrivilegedAction…
方法引用
  • 方法引用通过方法名来指向一个方法。

  • 采用方法引用的方式是为了简化lambda表达式的写法。

  • lambda表达式可用方法引用代替的场景可以简要概括为:lambda表达式的主体仅包含一个表达式,且该表达式仅调用了一个已经存在的方法。方法引用所使用方法的入参和返回值与lambda表达式实现的函数式接口的入参和返回值一致,也即是函数描述符要一致。

  • 方法引用有四种不同的方式:

    调用方式使用方式使用场景
    1. 静态方法引用ClassName :: staticMethodNamelambda表达式主体仅调用了某个类的静态方法
    2. 构造器引用ClassName :: newlambda表达式仅调用了某个类的构造函数返回实例
    3. 类的任意对象的实例方法引用ClassName :: instanceMethodNamelambda表达式第一个入参为调用者,后续参数与实例方法参数一致,也即是接口中的方法比实例方法多一个参数为调用者
    4. 特定对象的实例方法引用object :: instanceMethodNamelambda表达式仅调用了某个对象的某个实例方法
Stream
  • 能够让程序员以声明的方式处理数据源(集合、数组等)。核心观点是将数据源看作流(Stream),在管道(Pipeline)中传输和运算,支持包含筛选、排序、聚合等,到达终点时便得到最终结果。
  • 支持并行操作,且不用写多线程代码。
  • foreach(Cunsumer<? super T> action) 函数的参数是Cumsumer消费者类型(一种能够对传入数据进行处理,没有返回值的接口)。功能是变量数组中的每一个元素
  • map(Function mapper) 函数的参数是函数式接口对象,功能是将流中所有元素用Function计算后返回一个新的流(类型有可能改变)
  • filter(Predicate<? super T> predicate) 函数的参数也是个函数式接口
  • reduce(BinaryOperator<T> accumulator) 参数是一个累加器,返回一个Optional对象。
  • collect(Collector collector) 参数是一个工具类,提供了很多归约的静态方法,如toList()、toSet()等。能将Stream流转换成List、Set。
RK3588开发笔记-MIPI-CSI接口视频解码芯片XS9922B调试 Rockchip RK3588 是一款高性能的处理器,支持多种摄像头接口,包括 MIPI(Mobile Industry Processor Interface)接口。MIPI是一种用于移动设备和嵌入式系统中的摄像头、显示器和其他传感器设备的串行接口标准。MIPI是MIPI联盟发起的为移动应用处理器制定的开放标准。CSI-2(Camera Serial Interface 2)是MIPI 联盟定义的另一种高速接口,主要用于摄像模组和处理器之间的连接。 阅读详情

相关推荐

OpenEuler22.04 快速部署Docker:华为云镜像源配置指南

本文详细介绍了在OpenEuler 22.04系统上快速部署Docker的完整流程。针对系统默认源版本老旧的问题,重点讲解了如何配置华为云镜像源以加速安装,并涵盖Docker引擎、Docker Compose的安装、服务启动验证、权限配置、镜像加速等核心步骤与常见问题排查,帮助用户高效搭建稳定的容器化开发环境。

http9protocoller的博客 173

【Java 8 新特性】Java 8 新特性大全

【Java 8 新特性】目录Java Util StreamJava Util FunctionJava Util ConcurrentJava UtilJava TimeJava MathJava Lang Java Util Stream 【Java 8 新特性】Java Stream中forEachOrdered()和forEach() 【Java 8 新特性】如何将Java流(Stream)转化成数组(Array) Java Util Function Java Util Concurrent

猫巳的博客 3033

开关电源EMC整改实录:用WSX系列共模电感搞定30MHz辐射超标

本文详细介绍了开关电源EMC整改实战,通过WSX系列共模电感成功解决30MHz频段辐射超标问题。文章分析了共模干扰的产生机制,对比了不同磁芯材料的性能差异,并提供了电路布局优化与安装技巧,最终通过实测数据验证了整改方案的有效性。

weixin_29305313的博客 414

【Java】从java8到java17各版本新特性详解

下面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线,可以看出,JDK 17的支持时间最长,可以延续到2029年9月。考虑到技术更新的速度,这次免费商用8年的时间可谓是经过精心考虑,旨在让用户放心地升级到JDK 17(不过JDK 8的支持时间更长,可以延续到2030年12月)。从JDK诞生到现在,仅有几个版本得到了长期支持,主要包括JDK 7、JDK 8、JDK 11以及即将发布的JDK 17,它将是继Java 8之后最重要的LTS版本,是Java社区八年努力的成果。

一个天蝎座的程序猿 5889

SAP CKMLCP 月结7大常见报错:从“未找到成本核算运行”到“物料占用”的完整解决方案

本文深入解析SAP CKMLCP月结过程中的7大常见报错,从权限问题到数据一致性错误,提供系统化的解决方案。重点解决'未找到成本核算运行'和'物料占用'等典型问题,帮助财务人员高效完成成本核算月结,确保数据准确性。

weixin_30299709的博客 415

打穿内网之Vulntarget-a靶场实战记录

内容包括:通达OA未授权上传+文件包含RCE、Redis未授权写马、ms17-010永恒之蓝、代理转发内网跳板、CVE-2020-1472 域控杀器Zerologon、wmiexec/smbexec横向移动、cobalt strike与msf的shell传递

tpaer的博客 3031

Java 8的新特性—终极版

前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java 8 – Lambdas and Concurrency、Java 8 Date Time API Tutorial : LocalDateTime和Abstract Class Versus

飞鸟Blog 14万+

ANSYS APDL 异类单元连接实战:MPC方法在壳-实体装配中的应用

本文详细介绍了在ANSYS APDL中使用MPC方法实现壳单元与实体单元高效连接的技术要点。通过分析工程仿真中的常见需求,阐述了MPC方法在解决异类单元连接问题上的优势,包括网格独立性、自由度耦合和载荷传递等特性,并提供了具体的APDL命令流操作示例和实用经验技巧。

weixin_33391446的博客 178

重学Java 8新特性 | 第1讲——我们为什么要学习Java 8新特性?

为什么我们一定要学习Java 8新特性?

李阿昀的博客 1721

Autosar Configuration(十四)SomeIP之配置SoAd

本文主要介绍SomeIp协议栈中的SoAd在Configurator中的详细配置

king110108的专栏 2600

【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程

如图所示,红色的照片为未校准的图片,软件无法自动获取连接点,有关相机未校准的原因及解决办法,可以参考《pix4d未校准相机:287 out of 402 images calibrated (71%), all images enabled, 6 block,问题分析及解决方案汇总》,本文以案例的形式,详细讲解pix4d中手动添加连接点的方法及操作步骤。 文章目录1. 手动添加连接点2. 重新优化3. 生成质量报告,检查精度 1. 手动添加连接点 在【空三射线】模式下查看校准失败的图片,记下照片的名称。.

智慧空间实验室 2万+

Java8 接口新特性

Java8 Lambda Expressions 1 Lambda出现的背景 1.1 Java8之前面对的问题 当我们实现一个接口时,因为语法定义,不得不创建一个实现类,或者一个匿名类,如下: button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {...

Weison 7301

热力学仿真软件:COMSOL Heat Transfer_(18).案例研究:工业加热炉优化

工业加热炉的优化设计和操作参数调整是提高制造过程效率和产品质量的关键。通过仿真软件如COMSOL Multiphysics,可以精确地分析炉内的温度分布、能耗和热损失,从而提出有效的优化方案。本文通过一个实际应用案例,展示了如何利用仿真技术进行工业加热炉的综合优化,并通过实验验证了优化方案的有效性。希望这些方法和案例可以为其他制造企业提供参考,帮助他们在实际生产中提高加热炉的性能和效率。

kkchenjj的博客 1008

Java8新特性——Lambda表达式

Java8新特性——Lambda表达式 Java8新特性 Java8新特性(又称为 jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java8,它支持函数式编程,新的JavaScript引擎,新的日期API,新的Stream API等。——摘自菜鸟教程 Java8 新增特性 Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有 Java 类或对象(实

qq_50994235的博客 3535

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java 8 新特性

Java 8 新特性

YIYIYI 1573

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk8新特性_Java系列之Java 8 新特性必知必会

课程目标:通过本课程的学习,详细掌握Java8新特性之接口默认方法、函数式接口、可重复注解、Optional;适用人群:有Java基础的开发人员; 课程概述:Java 8是一个跨越式的版本,于2014年3月18日正式发布,距今几年过去了,很多企业的项目中都使用了Java8进行开发,很多开源框架也都要求至少JDK8,由于Java8中有很多重要的变化,如果不掌握Java8的这些新特性,可能我们在实际项...

weixin_40009472的博客 85

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java8新特性-排序

java8新特性排序 最近新入手一项目,基本都是java8写法(过滤,排序)感觉很不错,就抽空学习下并总结: 案例一 /** * java排序 * @author andy * */ public class Test2 { public static void main(String[] args) { List<String> strs=new ArrayList&...

最初的节奏 773

Java 进化之路:从 Java 8 到 Java 21 的重要新特性

谁能想到这个1995年诞生的语言,在2023年居然已经更新到Java 21了!看到这里你可能要问:Oracle这更新速度是要逼死开发者吗?不过学新特性这件事…毕竟面试官最爱问这些(手动狗头)这行代码当年让多少开发者感动到流泪(终于不用写冗长的匿名内部类了)(企业级应用建议锁定Java 11/17/21这三个LTS版本)→ “hello”(比trim()更智能的空白处理)(垃圾回收延迟<1ms不是梦!(终于不用写匿名类了!(再也不用第三方库了!游戏服务器和金融系统狂喜。(集合操作从此起飞)

binbinaishijie88的博客 1064

Java 8新特性总结

Java 8新特性学习总结 1 前言 Java8已经出现了很久了,但是呢,还是有很多人都还在习惯使用以前的来版本JDK,或者是以前老版本的编程方式。通过一段时间对Java8新特性的学习之后,自己也深受感触,原来java8版本写代码可以这么简洁。Java8最主要的就是给我们编程的过程带来了很多便利,不仅仅是代码量少。更多的还是让程序更简洁,减少代码冗余。Java8新特性中有几个比较主要的特性,Lam...

weixin_43288034的博客 383

Java8 新特性

Java8 新特性 前言 Java8已经出现了很久了,但是呢,还是有很多人都还在习惯使用以前的来版本JDK,或者是以前老版本的编程方式。通过一段时间对Java8新特性的学习之后,自己也深受感触,原来java8版本写代码可以这么简洁。Java8最主要的就是给我们编程的过程带来了很多便利,不仅仅是代码量少。更多的还是让程序更简洁,减少代码冗余。Java8新特性中有几个比较主要的特性,Lambda 表达...

weixin_45864733的博客 293

java8 到java11 新特性以及LTS官方维护截止时间

java8新特性介绍 https://www.oracle.com/technetwork/cn/java/javase/8-whats-new-2157071-zhs.html java9 新特性介绍 https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-9/index.html java10 新特性介绍 http...

输微 7230

java JKD8新特性之引入篇

Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。目前市面上大多数的公司都是用java8了,因此,我们需要了解8的一些新特性 新特性 Java8 新增了非常多的特性,我们主要讨论以下几个: L...

有梦想的码农 2051

java8新特性_Java8新特性系列之-Java8 新特性之日期处理详解(一)

课程介绍:课程目标:通过本课程的学习,详细掌握Java8新特性之新的日期处理;适用人群:有Java基础的开发人员; 课程概述:Java 8是一个跨越式的版本,于2014年3月18日正式发布,距今几年过去了,很多企业的项目中都使用了Java8进行开发,很多开源框架也都要求至少JDK8,由于Java8中有很多重要的变化,如果不掌握Java8的这些新特性,可能我们在实际项目的开发中,有可能看不懂别人编...

weixin_39922374的博客 75

Java8的新特性

Java8的新特性一、JDK8中新日期时间API二、Lambda表达式三、强大的Stream API四、Optional类 一、JDK8中新日期时间API JDK8中新日期时间API 二、Lambda表达式 java中的Lambda表达式 三、强大的Stream API java8中的StreamAPI 四、Optional类 两个测试类: public class Girl { private String name; @Override public String

仰望与追逐的博客 472

Java8新特性

目录结构: 目录 Java 8新特性简介 1. Lambda 表达式 2. 函数式接口 3. 方法引用与构造器引用 4. Stream API 5. Optional 类 6. 接口中的默认方法与静态方法 7. 新时间日期 API 8.注解的新特性 8. 集合的底层源码实现 9. 其他新特性 Java 8新特性简介 Java 8 (又称为 jdk...

底层码农 1万+

java8新特性

j Java8新特性 1.List集合的forech循环 List<Integer> list = Arrays.asList(1,2,3,4); list.stream().forEach(i -> { System.out.println(i); }); 2.对象 public static void main(String[] args) { //...

qq_40798764的博客 90
上一篇: Java线程池
下一篇: Spring 缓存
一只小小翠
博客等级 码龄9年 154粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值