Java8-11新特性总结(三)

从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社区八年努力的成果。 阅读详情

1、函数式接口

什么是函数式接口?

函数式接口指的是接口中只有一个抽象方法的函数。

说明:

  • 函数式接口中可以包含默认实现的方法,即关键字为default开头的方法。
@FunctionalInterface
interface myFunctionInterface {
    
    String getName();

	//默认实现
    default Integer getAge() {
        return 25;
    }

}
  • 函数式接口中可以有静态实现方法,即方法带有static关键字的方法。
@FunctionalInterface
interface myFunctionInterface {
    
    String getName();

	//默认实现
    static Integer getAge() {
        return 25;
    }

}
  • 函数式接口中可以允许子接口继承多个父接口,但每个父接口只能存在一个抽象方法且必须是相同的抽象方法,否则子类就不是函数式接口。
@FunctionalInterface
interface MyFunctionInterface1 {

    String getName();

}

@FunctionalInterface
interface MyFunctionInterface2 {

    String getName();

}

//继承多个接口,但是多个父接口具有相同的抽象方法,所以该接口还是函数式接口
@FunctionalInterface
interface SubFunctionInterface1 extends MyFunctionInterface1 ,MyFunctionInterface1 {

    @Override
    String getName();

}

//继承多个接口,但是多个父接口具有相同的抽象方法,所以该接口不是函数式接口且编译报错
//错误信息Invalid '@FunctionalInterface' annotation; SubFunctionInterface1 is not a functional interface
@FunctionalInterface    
interface SubFunctionInterface2 extends MyFunctionInterface1 ,MyFunctionInterface1 {

    Integer getAge();

}
  • java8中提供@FunctionInterface在类上标注说明该接口为函数式接口,在编译期间该接口不符合函数式接口条件则提示编译报错。
  • Java8中增加了java.util.function包,该包包含了常用的函数式接口。如下表所示
接口名称方法声明功能说明
Consumervoid accept(T t)提供一个参数
SupplierT get()得到一个返回值
Function<T,R>R apply(T t)通过指定参数返回指定值
Predicateboolean test(T t)判断条件是否满足

2、Lambda表达式

什么是Lambda表达式?

  • lambda表达式也成为闭包,是java5以来以来最具有革命性的版本新特性,同时也是推动Java最重要的新特性。

为什么要使用lambda表达式?

  • lambda允许将函数当作方法参数并传入,使代码变得更加简洁、紧凑。
  • lambda表达式免去了使用匿名方法的麻烦,并且给予java简单又强大的函数化编程能力。

语法

lambda表达式的语法格式:

(parameter) -> expression 或 (parameter) -> {statements;}

特征:

  • 可选类型声明:可以不用参数类型,编译器可自动识别参数类型。

(int a) -> System.out.println(a)

或

(a) -> System.put.println(a)

  • 可选的参数圆括号:一个参数时可以不用定义圆括号,但多个参数需要定义圆括号。

a-> System.out.println(a)

(a,b) -> a+b

  • 可选大括号:当主体只包含一条语句,则不需要使用大括号。

(a,b) -> a+b

(a,b) -> {

    return a+b;

}

  • 可选的返回关键字: 当主体只有一个表达式时自动返回值,多个表达式需要使用大括号则代表需要手动使用return关键字进行值的返回。

(a,b) -> a+b

(a,b) -> {

    int sum = a+b;

    int result = sum/10;

    return result;

}

实例

public class Test {
	
	public static void main(String[] args) {
		//MyFunctionInterface1 myFunctionInterface1 = (int a,int b) -> a + b;
		MyFunctionInterface1 myFunctionInterface1 = (a,b) -> a + b;
		System.out.println(myFunctionInterface1.addition(5, 3));
		
		//MyFunctionInterface2 myFunctionInterface2 = String msg -> System.out.println(msg);
		MyFunctionInterface2 myFunctionInterface2 = msg -> System.out.println(msg);
		

        Test test = new Test();
        System.out.println(test.operate(1,1,myFunctionInterface1));
	}

    private int operate(int a, int b, MyFunctionInterface1 mf) {
        return mf.addition(a, b);
    }
}

@FunctionalInterface
interface MyFunctionInterface1 {

    int addition(int a,int b);

}

@FunctionalInterface
interface MyFunctionInterface2 {

    void addition(String msg);

}

3、变量作用域

lambda表达式中之只能引用标记了final的外层局部变量,这就是说不能再lambda表达式内部修改定义在域外的局部变量,否则会编译错误。

public class Test {
	
	public static void main(String[] args) {
		int num = 10;
		//报错信息:Local variable num defined in an enclosing scope must be final or effectively final
		MyFunctionInterface1 myFunctionInterface1 = (a,b) -> a + b + num;
		System.out.println(myFunctionInterface1.addition(5, 3));
		num = 50;
	}
}

@FunctionalInterface
interface MyFunctionInterface1 {

    int addition(int a,int b);

}

正确写法: 

public class Test {
	
	public static void main(String[] args) {
		final int num = 10;
		
		MyFunctionInterface1 myFunctionInterface1 = (a,b) -> a + b + num;
		System.out.println(myFunctionInterface1.addition(5, 3));    //输出结果为18
	}
}

...省略

>>> Java8-11新特性总结(二)

>>> Java8-11新特性总结(四)

AI奶牛TMR智能饲喂机器人 Qt信创完整项目( 统信/麒麟国产系统直接编译) 内置**犊牛、育成牛、围产牛、泌乳牛、干奶牛**5套标准化饲喂配方;+" 饲喂批次完成|牛群:"+grpText+"|投喂饲料:"+QString::number(ft)+"吨|剩料:"+QString::number(st)+"吨|异常牛:"+QString::number(abCow);cv::putText(frame,"霉变变质饲料禁止饲喂",cv::Point(20,40),cv::FONT_HERSHEY_SIMPLEX,0.7,cv::Scalar(0,0,255),2); 阅读详情

相关推荐

云漾AI创作平台实战:如何用GPT4.0+Midjourney快速生成商业级插画(附Prompt模板)

本文详细介绍了如何利用云漾AI创作平台结合GPT4.0和Midjourney快速生成商业级插画。通过智能文案生成与视觉化工作流,大幅提升创作效率,适用于电商、社交媒体等多种场景。文章包含实用Prompt模板和参数调整技巧,帮助设计师和内容创作者高效产出专业插画。

weixin_29251567的博客 219

Java8到Java11新特性和用法介绍

本文汇总了Java8到Java11的主要核心的新特性,以及对应的新特性用法介绍以及对应的代码示例

yuxiangjin的博客 1354

DeepSeek的训练与优化流程

DeepSeek的训练体系不仅追求极致的计算效率,更注重将物理规律、人类知识、安全伦理深度融入训练过程,其"效率-安全-可解释性"三角平衡的设计理念,为行业提供了重要参考范式。

m0_56896669的博客 1436

Java8-11新特性

Java8-11新特性

weixin_46925850的博客 2023

Python爬虫实战:绕过B站-352风控的完整解决方案

网络爬虫技术是数据采集和自动化测试的重要工具,其核心原理是通过模拟HTTP请求获取网页数据。在实践过程中,开发者常会遇到网站反爬机制,这涉及请求指纹识别、IP行为分析等安全技术。这些风控措施的价值在于保护网站数据安全和服务器资源,广泛应用于电商、社交、内容平台等场景。针对B站等平台的-352风控错误,需要综合运用请求头伪装、会话管理、参数签名破解等技术方案。本文重点探讨如何通过构建完整的浏览器级请求头、管理Cookie会话、以及使用Playwright等浏览器自动化工具,有效解决Python爬虫在B站数据采

weixin_33912638的博客 400

全志V3S开发板实战:从零构建嵌入式Linux系统

本文提供了一份针对全志V3S开发板(如LicheePi Zero)的零基础教程,详细指导如何从零开始构建嵌入式Linux系统。内容涵盖编译环境搭建、交叉工具链配置、U-Boot引导程序编译与烧录、Linux内核定制与编译,以及使用Buildroot构建根文件系统,最终实现系统成功启动,帮助开发者深入理解嵌入式系统构建全流程。

tensor9flow的博客 575

JDK 8、JDK 11、JDK 17 和 JDK 21 的部分特性

JDK 8、JDK 11、JDK 17 和 JDK 21 的部分特性

优快云博客技术,java高级工程师,业务层架构师,高级管理认证,毕业设计可以联系我 1702

【AI智能体】Codex 开发聚合搜索应用项目实战操作详解

Codex 开发聚合搜索应用项目实战操作详解

congge 3096

JDK8,JDK11,JDK17,JDK21的主要更新特性

废弃的API:Java 11中废弃了一些API,主要是Java EE 和 CORBA 相关的API,包括 java.corba、java.transaction、javax.enterprise 和 javax.jms 等。Epsilon 垃圾回收器:Epsilon 是Java 11中引入的一种新的垃圾回收器,它不执行实际的垃圾回收操作,仅仅负责对内存进行分配和释放。ZGC 垃圾回收器:Java 11中引入了全新的ZGC垃圾回收器,它是一个低停顿的、可扩展的、并行的垃圾回收器,可以处理TB级别的堆内存。

2401_84206048的博客 1383

Android 12.0 framework系统修改安兔兔等显示的屏幕尺寸大小功能实现

在12.0的系统rom定制化开发中,在使用第三方app检测系统的一些信息中,比如安兔兔 设备信息等检测app中,有时候显示的屏幕尺寸大小和 产品规格书等信息不同,稍微有些差异,所以就需要看下系统framework层中,相关的设备信息是怎么读出来的,然后做些调整 接下来就来分析相关功能

安卓兼职framework和app工程师的博客 477

基于STM32、HAL库的W25Q01JVZEIQ TR FLASH存储器驱动应用程序设计

1Gb (128MB),分为512个可擦除块(block),每个块256KB。:块擦除约30-50ms,芯片擦除约30s。:标准SPI (支持1/2/4线模式)// 初始化CS引脚为高电平。// 擦除扇区(4KB)// 初始化Flash。/* 状态寄存器位 *//* 指令定义 *//* 超时定义 *//* 函数声明 */

corlin6688的博客 267

简单阐述JDK8,JDK11,JDK17,JDK21的主要更新特性

5. 并发增强:引入了新的并发工具,如CompletableFuture和StampedLock,提供了更好的并发性能和可扩展性。4. 新的日期时间API:替代了旧的Date和Calendar类,提供了更加简洁和易用的日期和时间操作方法。2. Sealed类:引入了Sealed类的概念,可以限制类的继承和扩展,增强了代码的安全性和可维护性。2. 基于事件的I/O API:提供了一种基于事件的I/O操作方式,可以实现高性能的非阻塞I/O。4. 更加紧凑的垃圾收集器:优化了垃圾收集器,使其占用更少的内存空间。

2302_80829269的博客 550

【FPGA教程案例89】编译码2——使用vivado核实现RS信道编译码

RS编码,又称里所码,即Reed-solomon codes,是一种前向纠错的信道编码,对由校正过采样数据所产生的多项式有效。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。

FPGA/MATLAB学习教程/源码/项目合作开发 3542

java轮询_您当前正在使用哪个Java版本? [轮询]

我们的年度调查的初步结果( 仍然是公开的)表明,受访者并没有不喜欢Java 6、7和8,但这并不意味着他们不希望更多地关注Java 9。今年。 更准确地说,有62%的人希望在2018年尝试Java 9 ,只有五分之一的受访者认为它没有兴趣。 此外,大约三分之一的受访者对尝试即将推出的Java 10和11版本感兴趣。 资料来源:《 2018年JAXenter调查》-初步结果 ...

274

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java11的8个新特性

Java11又出新版本了,我还在Java8上停着。不过这也挡不住我对他的热爱,忍不住查看了一下他的新性能,由于自己知识有限,只总结了以下八个特性; 1、本地变量类型推断 什么是局部变量类型推断? var javastack = "javastack"; System.out.println(javastack); 大家看出来了,局部变量类型推断就是左边的类型直接使用 var 定义,而不用...

小马过河 5万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【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社区八年努力的成果。

一个天蝎座的程序猿 5891

Java8新特性

HashMap jdk1.7:数组+链表 jdk1.8:数组+链表+红黑树 当哈希碰撞即链表上个数大于8并且总容量个数大于64,链表转成红黑树 红黑树除了添加以外,其他(查询、删除)效率都比链表高 扩容后重排序,不用重新运算hashCode值,直接找对应元素在原来哈希表的总长度加上它当前所在哈希表的位置 HashSet,同理 ConcurrentHashMap jdk1.7 并发级别:16 锁+段机制:默认16段,每段默认16表 段太多浪费空间,段太少导致每段元素过多效率遍地 jdk1.8 CAS 无锁算法

minge0001的博客 3万+

Java11新特性一览

Java 11是自Java 8以来的又一个LTS版本,是目前全球使用最多的LTS版本之一。下边我们看一下JAVA11的新特性 字符串API增强 在Java 11中,针对String的操作进一步得到加强。避免我们在很常见的场景中引入额外的、复杂的API。 isBlank() 用来判断字符串是不是空字符"“或者trim()之后(” ")为空字符: String blankStr = " "; // true boolean trueVal = blankStr.isBlank(); lines(

张钰杰杰杰杰杰的博客 1万+

Java8、Java11、Java15、Java21新特性

Java 11的更新确保了对最新Unicode标准的支持,使得开发者可以处理更广泛的字符和文本编码。Java 15 引入了新的 API 特性,如改进的 Stream API : ByteArrayOutputStream和新的日期和时间 API。引入了var关键字,可以用于局部变量的声明,根据初始化值的类型自动推断变量的类型.需要注意的是,var关键字只能用于局部变量的声明,不能用于成员变量、方法参数、方法返回值等。引入了新的标准化HTTP客户端API,支持HTTP/2协议,并提供了异步和响应式的特性。

孟林洁的博客 2919

【java11】java11新特性介绍

Java11于2018年9月25日正式发布,Java11是继Java8之后的第一个LTS(Long-Term-Support)长期支持功能版本,与之前的版本(Java9和Java10)不同,它提供了长达3年的维护期,旨在提供稳定且长期的技术支持。Java11的发布也标志着Java版本发布周期的调整,即从原来的每两年发布一个大版本变为每六个月发布一次,其中每年3月和9月为大版本发布节点。Java11的技术支持将持续至2023年9月,而对应的补丁和安全警告等支持将持续至2026年。

morris 1万+

java11新特性

原文:New Features in Java 11 1.概述 Oracle在2018年9月发布了java 11,仅在其前身版本10后6个月。 java 11是继java 8 之后第一个长期支持的版本。Oracle在2019年一月份已经停止了对java 8 的支持。因此,大部分人会升级到java 11。 在本教程中,我们将看看选择java 11的原因。然后我们将会探索几个新特性,已移除的特性以及java11中引入的性能增强。 2.Oracle vs. Open JDK Java10是最后一个免费的Oracl

藿香正气的博客 1万+

Java JDK8-17新特性 知识点总结Note

Java版本迭代 Java8 - Java17Oracle JDK和Open JDK 许可证不一样JEP(JDK Enhancement Proposals):jdk 改进提案,每当需要有新的设想时候,JEP可以提出非正式的规范(specification),被正式认可的JEP正式写进JDK的发展路线图并分配版本号。LTS(Long-term Support)即长期支持。

weixin_54372875的博客 2906

IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍

Java 11新特性

个人博客 3734

【16章Java 9 10 11新特性】Java9 &Java10 & Java11新特性

【16章Java 9新特性:目录结构变化、模块化系统、jShell命令、接口私有方法、try语句钻石操作符升级、String存储结构改变,快速创建只读集合方法,intputstream流加强和API加强;Java 10:局部变量类型推断、新增创建不可变集合方法;Java 11新特性:新增字符串处理方法、Optional加强、局部变量类型推断升级、全新HTTP客服端API、ZGC、更简化编译运行程序】...

小鳴人的博客 2678

Java11新特性(一)——JDK11新特性概述

序言 关于JDK11,自从去年也就是2018年9月份 Oracle 对外公布——JDK11正式发布以来,博主就跃跃欲试,但是由于项目周期时间紧,一直未果,今年,也就是2019年2月底系统正式上线,博主除了远程技术支持以外,终于可以抽出实现来一探究竟了,博主的探寻的起始之路如下:社区 -> 新特性概览 -> 详细文档说明 -> 官方 API -> 实践与应用(除了体验新...

Spring Boot-Common On With You 1万+
上一篇: Java8-11新特性总结(二)
下一篇: Java8-11新特性总结(四)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值