java8部分特性记录

一次渗透测试引发的Json格式下CSRF攻击的探索 阅读详情

笔者认识到的java比较重要的阶段是java5以及java8。

这里记录java8的一些新特性

一、Lambda表达式和函数式接口

Lambda读音和数学的λ读音一样,Lambda表达式也叫闭包,它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理。

Lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如:

Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );

在上面这个代码中的参数e的类型是由编译器推理得出的,你也可以显式指定该参数的类型,例如:

Arrays.asList( "a", "b", "d" ).forEach( ( String e ) -> System.out.println( e ) );

如果Lambda表达式需要更复杂的语句块,则可以使用花括号将该语句块括起来,类似于Java中的函数体,例如:

Arrays.asList( "a", "b", "d" ).forEach( e -> {
    System.out.print( e );
    System.out.print( e );
} );

Lambda表达式可以引用类成员和局部变量(会将这些变量隐式得转换成final的),例如下列两个代码块的效果完全相同:

String separator = ",";
Arrays.asList( "a", "b", "d" ).forEach( 
    ( String e ) -> System.out.print( e + separator ) );

和

final String separator = ",";
Arrays.asList( "a", "b", "d" ).forEach( 
    ( String e ) -> System.out.print( e + separator ) );

Lambda表达式有返回值,返回值的类型也由编译器推理得出。如果Lambda表达式中的语句块只有一行,则可以不用使用return语句,下列两个代码片段效果相同:

Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> e1.compareTo( e2 ) );

和

Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> {
    int result = e1.compareTo( e2 );
    return result;
} );

函数接口:只有一个函数(方法)的接口,这样的接口可以隐式转换为Lambda表达式,例如java.lang.Runnable和java.util.concurrent.Callable。函数式接口非常脆弱:只要某个开发者在该接口中添加一个函数,则该接口就不再是函数式接口进而导致编译失败。为了尽量避免,并显式说明某个接口是函数式接口,Java 8 提供了一个特殊的注解@FunctionalInterface

@FunctionalInterface
public interface Functional {
    void method();
}

注:默认方法和静态方法不会破坏函数式接口的定义,因此如下的代码是合法的。

@FunctionalInterface
public interface FunctionalDefaultMethods {
    void method();

    default void defaultMethod() {            
    }
    static FunctionalDefaultMethods create( ) {
        ...
    }	
}

二、接口的默认方法和静态方法

Java 8使用两个新概念扩展了接口的含义:默认方法和静态方法。

默认方法,使得在现有接口中添加新的方法得到实现,即不强制那些实现了该接口的类也同时实现这个新加的方法。

接口提供的默认方法会被接口的实现类继承或者覆写,如下:

private interface Defaulable {
    default String notRequired() { 
        return "Default implementation"; 
    }        
}

private static class DefaultableImpl implements Defaulable {
}

private static class OverridableImpl implements Defaulable {
    @Override
    public String notRequired() {
        return "Overridden implementation";
    }
}
Java 8带来的另一个特性是在接口中可以定义静态方法,如下:
private interface DefaulableFactory {
    static Defaulable create( Supplier< Defaulable > supplier ) {
        return supplier.get();
    }
}

小结:默认方法允许在不打破现有继承体系的基础上改进接口。该特性在官方库中的应用是:给java.util.Collection接口添加新方法,如stream()、parallelStream()、forEach()和removeIf()等等。但使用时也需谨慎,可能带来语义分歧和编译错误。


lwip-2.0.3 lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。 立即下载

相关推荐

使用JAVA 的 POI 库 将DOC文件转为DOCX文件

java使用POI库,将doc文件转为docx文件

qq_45808266的博客 5706

gcc编译python可执行_来了解一下GCC编译器编译C可执行脚本的过程

GCC简介Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件...

weixin_42305377的博客 1037

京东商品数据爬取实战:用Selenium+代理IP绕过最新反爬机制(附完整代码)

本文深入解析京东商品数据采集技术,详细介绍了如何利用Selenium与智能反反爬策略绕过京东最新的反爬机制。通过实战案例和完整代码,帮助开发者掌握高效采集京东商品数据的方法,包括动态参数加密、行为验证识别及分布式采集架构设计等关键技术。

cc789的博客 1060

java学习笔记16——java8的其他新特性

这是JDK9的新特性1.命令行中通过指令jshell,调取jshell工具2.常用指令:/help:获取关使用 jshell 工具的信息/help intro : jshell 工具的简介/list :列出当前 session 里所有有效的代码片段/vars :查看当前 session 下所有创建过的变量/methods :查看当前 session 下所有创建过的方法/imports :列出导入的包/history :键入的内容的历史记录。

qq_58956810的博客 890

2024年最全scrapy+scrapyd+gerapy 爬虫调度框架,字节跳动面试时间

scrapyd是一个用于部署和运行scrapy爬虫的程序,它允许你通过JSON API来部署爬虫项目和控制爬虫运行,scrapyd是一个守护进程,监听爬虫的运行和请求,然后启动进程来执行它们方便地控制爬虫运行直观地查看爬虫状态实时地查看爬取结果简单地实现项目部署统一地实现主机管理轻松地编写爬虫代码。

2401_84140653的博客 1201

西门子Industrial Copilot实战:5个工业场景下的AI效率提升案例

本文通过五个工业场景实战案例,深入解析西门子Industrial Copilot如何将工业智能转化为实际生产力。从自动化配置、预测性维护到能源优化与人机交互,这位AI助手显著缩短工程周期、提升设备可用率并降低运营成本,展示了其在工业领域系统化、工程化的落地价值。

3c4x5z6v7b的博客 928

JAVA8新特性(Stream API,LocalDate,LocalDateTime)

【代码】JAVA8新特性(Stream API,LocalDate,LocalDateTime)

qq_43372633的博客 1782

FortiOS 存在身份验证绕过导致命令执行漏洞(CVE-2024-55591)

FortiOS 是 Fortinet 公司开发的操作系统,作为 Fortinet 安全平台的核心,提供全面的网络安全功能。 它将网络和安全功能无缝集成,支持跨本地、云、混合和融合 IT/OT/IoT 基础设施环境的统一管理。 FortiOS 7.6 版本引入了生成式人工智能助手、数据保护、托管服务和单一代理等新功能,进一步增强了其安全性和性能。

缘梦未来的博客 1841

记录某公司(简称SMKJ) 的一次面试

昨天去了一家公司面试 Java 开发岗位,这篇文章主要是做一个面试的记录以及总结。 这家公司的规模大概100-200人,环境还可以,在一栋大厦租了两层办公室(31层和32层)。一同搭电梯上去的还有一位去应聘测试岗位的妹纸�� 这里要吐槽一下该公司的前台,由于跟HR约好了是在31楼面试,我和测试妹纸都去了31楼的前台,31楼的前台直接让我们去楼上找32楼的前台,32楼的前台找了楼下31楼的...

nnngu 528

数仓解惑:数据仓库常见建模方法与大数据领域建模实例综述

为什么需要数据建模? 为什么要进行数据仓库建模? 随着DT时代互联网、智能设备等信息技术的发展,数据开始井喷式的增长,如何讲这些数据进行有序、有结构地分类组织存储是我们面临的一个挑战。 如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置,而不是乱糟糟的 大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在 性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑 ...

云祁QI 5850

姿态传感器/陀螺仪之IIS2DLPC 应用驱动程序设计

* 转换为°C单位 (参考温度为25°C,灵敏度为16 LSB/°C) */

corlin6688的博客 220

谢飞机的Java面试之旅

通过这次面试,谢飞机展示了他对Java基础和Spring框架的理解,但在一些较为复杂的问题上还有提升空间。谢飞机:嗯,Java 8引入了很多新特性,比如Lambda表达式,可以简化代码,还有Stream API,用于处理集合数据流。谢飞机:当然知道,Spring Boot简化了Spring应用的初始搭建和开发,通过自动配置和起步依赖减少了配置的复杂性。谢飞机:Redis是一个开源的内存数据库,支持多种数据结构,可以用来做缓存、消息队列等,提高应用的性能。面试官:好的,今天就到这里,我们会尽快通知你结果。

YHongXX的博客 242

【现代控制理论期末考点】

现代控制理论期末考点,适用于 SEU Automation

【人工智障 | 计算鸡视觉 | 机器孩】 1445

互联网大厂Java面试实录:从Spring Boot到AI技术栈的全面考察

谢飞机,你能简单介绍一下Java 8的新特性吗?:当然可以!Java 8引入了Lambda表达式、Stream API、新的日期时间API,还有Optional类。:不错!那你能解释一下Stream API的优势吗?:Stream API可以简化集合操作,支持并行处理,代码更简洁高效。:很好!那你能写一个简单的Stream例子吗?:呃...这个...我有点记不清了。

2201_75622795的博客 444

假人有限元模型

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JDK8到JDK17最常用的核心功能

从 JDK 8 到 JDK 17,Java 引入了多项提升开发效率和代码质量的新特性。局部变量类型推断(JDK 10)简化了变量声明,文本块(JDK 15)优化了多行字符串的处理,记录类(JDK 16)快速定义不可变数据传输对象。模式匹配(JDK 16/17)简化了类型检查和转换,Switch 表达式(JDK 14)提供了更简洁的语法。HTTP Client(JDK 11)支持 HTTP/2 和异步请求,Stream API 和 Optional 在 JDK 9~16 中得到了增强。ZGC 和 Shenan

weixin_45668002的博客 578

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

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

面试实录:互联网大厂Java求职者的三轮技术面试

谢飞机,今天的面试就到这里了,你的表现有一些地方还需要加强。回去等待通知吧。

weixin_45730913的博客 430

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android studio报错Jack compilation exception

最近项目依赖的库使用了java8,结果编译时报这个错,com.android.build.api.transform.TransformException: com.android.builder.core.JackToolchain$ToolchainException: Jack compilation exception,困扰了两天,网上搜罗了一遍基本没有关于这个错的解释,而且这个错误没有具

lei_notes的博客 5914

互联网大厂面试:Java技术栈的深度剖析与应用场景

探索互联网大厂面试中的Java技术栈问题,通过面试官和应聘者的对话,呈现核心技术点及应用场景,包括Spring Boot、Hibernate、Spring Cloud等,帮助求职者深入理解及应对相关技术面试。

antOnSofa的博客 338

互联网大厂Java面试实录:从Spring Boot到AI技术栈的全面拷问

面试官:今天的面试就到这里,你先回去等通知吧。

m0_74347384的博客 300

互联网大厂Java面试实录:Spring Boot与微服务实战场景20问

本文通过模拟互联网大厂Java求职者面试场景,以严肃面试官与搞笑程序员谢飞机的对话形式,逐步深入探讨Java技术栈在实际业务中的应用。内容涵盖Java SE、Spring Boot、微服务、数据库等核心技术,并结合音视频、电商、金融等场景,问题与答案详细解析,适合小白学习。

2201_75614513的博客 183

关于playframework2.5

加入了很多新东西: 1.用akka streams 替换了大部分iteratee-based async io,当然还有一些模块在用iteratees 2.java 的一些API 做了调整升级,以及项目需要java8的支持 3.加入了支持其它一些日志框架,任何 slf4j 支持的,并且可以记录执行的sql 4.部署在linux上时,可以使用native socket f...

diaokaijing6889的博客 101
上一篇: java多线程初探(四)取消和关闭
下一篇: mysql读写分离简单实现-win7
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值