揭秘Java 8双冒号::用法:如何用方法引用提升代码简洁性与可读性

2021-09:Java的框架甲骨文面试题(自己总结的) 前提:在公司呆着不舒服,环境真的还是决定一个人的成长,在金九银十找个好工作吧 一、Java 基础 1.JDK 和 JRE 有什么区别? jdk是java的开发工具包,jre是java运行环境 jdk->jre->jvm 2.== 和 equals 的区别是什么? "=="是判断两个变量或实例是不是指向同一个内存空间。 "equals"是判断两个变量或实例所指向的内存空间的值是不是相同。 3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 不一定 . 阅读详情

第一章:Java 8双冒号::的引入背景与意义

Java 8 的发布是 Java 发展史上的一个重要里程碑,其中最引人注目的新特性之一便是 Lambda 表达式的引入。为了更好地支持函数式编程范式,Java 8 引入了方法引用操作符——双冒号(::),它提供了一种简洁、清晰的方式来引用已有方法,而无需显式地调用它们。

提升代码可读性与简洁性

双冒号操作符允许开发者直接引用类或对象的现有方法,避免重复编写冗余的 Lambda 表达式。例如,在集合遍历中使用方法引用可以显著减少样板代码。
// 使用 Lambda 表达式
list.forEach(s -> System.out.println(s));

// 使用双冒号方法引用,更简洁
list.forEach(System.out::println);
上述代码中,System.out::println 等价于一个接收参数并调用 println 方法的 Lambda 表达式,但语义更明确,代码更紧凑。

支持函数式接口的灵活绑定

双冒号语法能够与函数式接口(如 Function、Consumer、Predicate)无缝集成,实现行为的延迟绑定。它支持四种形式的方法引用:
  • 静态方法引用:ClassName::staticMethod
  • 实例方法引用:instance::method
  • 对象的任意实例方法引用:ClassName::method
  • 构造器引用:ClassName::new

推动函数式编程在 Java 中的落地

通过双冒号操作符,Java 实现了对函数式编程理念的深度支持。它降低了从命令式向函数式过渡的门槛,使流式操作(Stream API)更加自然流畅。
场景Lambda 写法方法引用写法
字符串转大写s -> s.toUpperCase()String::toUpperCase
创建对象() -> new ArrayList<>()ArrayList::new
双冒号的引入不仅是一次语法糖的升级,更是 Java 向现代化编程语言演进的重要标志。

第二章:方法引用的基本类型与语法解析

2.1 静态方法引用:简化工具类调用

在Java函数式编程中,静态方法引用提供了一种简洁的语法来直接引用已有类的静态方法,避免冗余的Lambda表达式。通过双冒号(`::`)操作符,可将方法作为参数传递,提升代码可读性。
基本语法与示例
public class MathUtils {
    public static int add(int a, int b) {
        return a + b;
    }
}

// 方法引用替代Lambda
BinaryOperator<Integer> operator = MathUtils::add;
int result = operator.apply(3, 5); // 输出 8
上述代码中,`MathUtils::add` 等价于 `(a, b) -> MathUtils.add(a, b)`,编译器自动匹配参数类型与数量。
常见应用场景
  • 集合排序时引用自定义比较逻辑
  • Stream操作中映射或过滤调用工具方法
  • 替换重复的静态函数调用表达式

2.2 实例方法引用:复用对象行为提升可读性

简化函数式接口调用
实例方法引用允许直接引用已有对象的方法,避免重复编写 Lambda 表达式。通过 object::method 语法,代码更简洁且语义清晰。
List names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(System.out::println);
上述代码中,System.out::println 等价于 name -> System.out.println(name),但更具可读性。该语法将每个元素传递给 println 方法,复用已定义行为。
常见使用场景
  • String::toLowerCase —— 转换字符串为小写
  • Integer::compareTo —— 用于排序比较
  • list::add —— 将元素添加到特定集合

2.3 特定对象的方法引用:绑定上下文逻辑

在Java中,特定对象的方法引用允许将某个实例的方法绑定到函数式接口上,从而实现上下文相关的逻辑调用。这种引用方式通过保留对象实例的状态,使方法调用更具语义性和可读性。
语法形式与应用场景
特定对象的方法引用使用 instance::methodName 语法,适用于已存在对象实例的场景。例如:
String text = " hello world ";
Runnable trimTask = text::trim;
System.out.println(trimTask); // 输出: hello world
上述代码中,text::trim 绑定了字符串实例 text 的 trim 方法,即使该方法无参数,也能通过绑定上下文正确执行。
与静态方法引用的区别
  • 静态方法引用(如 Integer::parseInt)不依赖实例状态
  • 特定对象引用则捕获了调用时的对象状态,形成闭包式行为
此机制在事件处理、延迟执行等场景中尤为有效,能自然传递上下文信息。

2.4 构造方法引用:通过new引用实现对象创建

在Java 8引入的函数式编程特性中,构造方法引用是一种简洁表达对象创建的方式。它使用`::new`语法,将类的构造器作为函数式接口的实例传递。
基本语法与应用场景
当某个函数式接口的抽象方法签名与类的构造方法匹配时,可使用构造方法引用来替代Lambda表达式。例如,`Supplier` 接口的 `get()` 方法无参且返回对象,正好对应无参构造器。
Supplier<Person> supplier = Person::new;
Person person = supplier.get(); // 调用构造器创建实例
上述代码等价于 `() -> new Person()`,但更简洁清晰。JVM会根据上下文自动推断应调用哪个构造方法。
支持多参数构造的引用
对于带参数的构造器,只要函数式接口的方法参数列表与其一致,即可引用。例如`BiFunction`可绑定`Person(String, int)`构造器。
函数式接口构造方法引用实际调用的构造器
Supplier<T>T::newT()
Function<String, T>T::newT(String)

2.5 数组构造方法引用:处理动态数组生成场景

在Java中,数组构造方法引用通过 `::new` 语法支持动态数组的生成,特别适用于函数式编程中需要延迟创建数组的场景。
语法与基本用法
IntFunction arrayCreator = int[]::new;
int[] arr = arrayCreator.apply(10); // 创建长度为10的int数组
上述代码中,`int[]::new` 是对数组构造器的引用,等价于 `size -> new int[size]`。`IntFunction` 接受一个整型参数并返回指定大小的数组实例。
实际应用场景
该特性常用于流式操作中生成结果数组:
  • 将流元素收集为指定类型的数组
  • 结合 `toArray()` 方法实现高效转换
例如:
String[] result = stream.toArray(String[]::new);
此处 `String[]::new` 提供了数组的构造方式,确保返回正确类型的数组实例,避免类型擦除问题。

第三章:方法引用与Lambda表达式的对比分析

3.1 从Lambda到方法引用:何时进行转换

在Java函数式编程中,Lambda表达式提供了简洁的匿名函数实现方式。然而,当逻辑已存在于某个方法中时,使用方法引用可进一步提升代码可读性。
方法引用的适用场景
以下情况推荐将Lambda转换为方法引用:
  • Lambda体仅调用一个已存在方法
  • 目标方法与函数式接口的签名兼容
  • 代码语义更清晰,避免冗余封装
代码示例对比
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// 使用Lambda
names.forEach(name -> System.out.println(name));
// 转换为方法引用
names.forEach(System.out::println);
上述代码中,System.out::println 是对 println(String) 方法的引用,其参数列表和返回类型与 Consumer<String> 接口匹配,因此可安全替换,使代码更简洁。

3.2 可读性与维护性:实际代码块中的表现差异

命名规范对可读性的影响
清晰的变量和函数命名能显著提升代码可维护性。例如,使用 calculateMonthlyInterest 比 calc 更具表达力,团队成员无需额外注释即可理解其用途。
代码结构对比示例
// 不推荐:逻辑紧凑但难以维护
func proc(d []int) int {
    s := 0
    for _, v := range d {
        if v > 0 {
            s += v
        }
    }
    return s
}

// 推荐:结构清晰,易于扩展
func sumPositiveValues(data []int) int {
    sum := 0
    for _, value := range data {
        if value > 0 {
            sum += value
        }
    }
    return sum
}

上述代码功能相同,但后者通过语义化命名和结构化布局提升了可读性。在团队协作中,这种风格降低了理解成本,便于后期调试与功能迭代。

  • 变量名应准确反映其业务含义
  • 函数职责应单一且命名动词化
  • 避免嵌套过深的控制结构

3.3 编译原理层面的等价性探讨

在编译器设计中,程序的等价性分析是优化与验证的核心。源代码经词法、语法分析后生成中间表示(IR),不同形式的IR若在语义上保持一致,则称为等价变换。
中间表示的等价转换
常见的等价操作包括常量折叠、公共子表达式消除等。例如以下C代码片段:

int x = 2 * 3 + a;
int y = 6 + a; // 等价于上式经常量折叠后
上述两行在语义上等价,编译器可通过代数化简识别其相同性,从而复用计算结果。
控制流图的结构等价
结构特征是否影响等价性
基本块顺序否
跳转逻辑是
变量定义点是
只要控制流与数据流保持一致,即便布局不同,仍可视为等价。

第四章:典型应用场景与最佳实践

4.1 集合遍历与Stream操作中的方法引用应用

在Java 8引入的Stream API中,方法引用极大简化了集合遍历和函数式编程的操作。通过`::`语法,可以直接引用已有方法,替代冗长的Lambda表达式。
方法引用的基本形式
  • 静态方法引用:ClassName::staticMethod
  • 实例方法引用:instance::method
  • 对象方法引用:ClassName::method
Stream中的实际应用
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream().forEach(System.out::println);
上述代码中,System.out::println是System.out.println(String s)的简写,避免了s -> System.out.println(s)的冗余写法。方法引用提升了代码可读性,并在语义上更清晰地表达了“对每个元素执行打印”这一意图。

4.2 函数式接口中使用方法引用替代冗余Lambda

在函数式编程中,Lambda 表达式极大提升了代码的简洁性,但当逻辑仅调用已有方法时,仍会出现冗余写法。此时,方法引用可进一步优化表达。
方法引用的四种形式
  • 静态方法引用:Class::staticMethod
  • 实例方法引用:instance::method
  • 对象的方法引用:Class::method
  • 构造器引用:Class::new
代码对比示例

// 冗余 Lambda
List list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));

// 优化为方法引用
list.forEach(System.out::println);
上述代码中,System.out::println 是对已存在方法的直接引用,语义更清晰且避免了参数的重复声明,提升可读性与性能。

4.3 在Optional链式调用中提升代码清晰度

在Swift等支持Optional类型的语言中,链式调用能显著简化对可能为nil的对象的访问。通过使用`?`操作符,开发者可在一连串属性或方法调用中安全地穿透多层嵌套结构。
链式调用示例
let finalValue = user?.profile?.address?.street?.uppercased()
上述代码从`user`开始,逐级访问其可选链上的属性。只要其中任一环节为nil,整个表达式将短路返回nil,避免运行时崩溃。
优势分析
  • 减少冗余的if-let嵌套,提升可读性
  • 集中处理不确定性,逻辑更连贯
  • 降低错误处理复杂度,增强代码健壮性
合理使用Optional链式调用,能使深层对象访问既简洁又安全。

4.4 结合自定义函数式接口实现优雅设计

在Java函数式编程中,自定义函数式接口能够显著提升代码的可读性与复用性。通过精准定义接口中的抽象方法,开发者可以将其用于Lambda表达式,实现行为参数化。
自定义函数式接口示例

@FunctionalInterface
public interface Validator<T> {
    boolean validate(T value);
}
该接口定义了一个泛型验证器,仅包含一个validate方法。配合Lambda使用,可动态传递校验逻辑,如:

Validator<String> notEmpty = str -> str != null && !str.isEmpty();
System.out.println(notEmpty.validate("hello")); // 输出: true
上述代码将字符串非空判断封装为可复用的验证行为,提升了业务逻辑的模块化程度。
优势分析
  • 提高代码简洁性与表达力
  • 支持高度灵活的行为注入
  • 便于单元测试与逻辑隔离

第五章:总结与未来展望

云原生架构的演进方向
现代企业正加速向云原生转型,Kubernetes 已成为容器编排的事实标准。未来,服务网格(如 Istio)与无服务器架构(Serverless)将进一步融合,提升系统的弹性与可观测性。
  • 微服务治理将更加依赖声明式配置
  • 边缘计算场景下对轻量级运行时(如 K3s)需求上升
  • GitOps 模式将成为持续交付的核心实践
代码即基础设施的实践示例
以下是一个使用 Terraform 定义 AWS EKS 集群的简化片段,展示了 IaC(Infrastructure as Code)在生产环境中的典型应用:
resource "aws_eks_cluster" "dev_cluster" {
  name     = "dev-eks-cluster"
  role_arn = aws_iam_role.eks_role.arn

  vpc_config {
    subnet_ids = aws_subnet.example[*].id
  }

  # 启用日志收集以增强可观测性
  enabled_cluster_log_types = [
    "api",
    "audit",
    "scheduler"
  ]
}
技术选型对比分析
方案部署速度运维复杂度适用场景
VM + Ansible中等高传统系统迁移
Kubernetes + Helm快中微服务架构
Serverless (Lambda)极快低事件驱动任务
安全与合规的自动化集成

CI/CD 流水线中嵌入静态代码扫描(SAST)和策略引擎(如 OPA)已成为标配。例如,在 GitHub Actions 中自动检查 Terraform 配置是否符合 CIS 基准:

- name: Run tfsec
    uses: aquasecurity/tfsec-scan@v2
    with:
      soft-fail: false
双目视觉三维重构(一)————简介 优快云中关于立三维重构的介绍层出不穷,CNKI中也有各类综述对三维重构进行总结,撰写这篇博客仅作为本人对该类博客、论文的总结学习,加深自身学习的印象、作为学习的笔记。如有错误的地方,欢迎指正。   1、三维重构 1.1、三维重构到底是什么?   首先要了解立体匹配算法,首先要知道立体匹配算法主要具体应用于什么方向。 三维重构又被称为三维重建,百度百科中对它的定义为:指对三维物体建立适合... 阅读详情

相关推荐

OI 生涯回忆录 《Pilgrimage》

前言 于 NOI2020 后写下本文。 本文简单提及了在写作时尚能回忆起来的,在我的 OI 生涯中对我的影响重大的人、事、比赛等。 写作本文,旨在在回忆允许的范围内,对 OI 生涯进行一定程度上的梳理,总结。 开端 入门 我最早接触计算机程序设计,是在小学。 那时候,我的数学成绩不错,就被老师推荐去学习编程。 就这样,我在局前街小学的何静老师的指导下,走上了编程的道路。 小学时的编程,与其说是 “竞赛” ,不如说是 “兴趣班” 。 当时,包括我在内,很多小孩子天性是浮躁的。支撑我对着无聊的代码学下去的,并不

cz_xuyixuan的博客 1万+

Singleton Pattern

1、饿汉式 这种方式下,只要类加载了,单例对象就会产生,并且唯一(final),利用类加载器解决了线程安全问题,因此,饿汉式是线程安全的。写法有两种 1.1 静态常量 //饿汉式单例模式1(静态常量) class Singleton{ //构造方法私有化,外部不能new这个对象,想要获得这个类的对象只能调用他的静态方法,且对象只能有一个。 private Singleton(){} //本类内部创建对象,final修饰符可以做一个优化 private final stat

Geralt 289

别再只盯着YOLOv8了!手把手带你用PaddleDetection的PP-YOLOE+搞定你的第一个检测项目

本文介绍了PP-YOLOE+在目标检测领域的优势与应用实践,对比YOLOv8展示其在精度、速度和部署便利性上的突破。通过详细的代码示例和实战教程,帮助开发者快速上手PaddleDetection工具链,实现产业级目标检测项目,提升开发效率。

weixin_42701915的博客 185

java基础

一:java基础 @[TOC]java环境变量 1.JDK java开发环境简称JDK,包括java编译器,java运行工具,文档生成工具,java打包工具 java运行环境简称JRE,JRE中只有java运行工具********* JVM java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台 2.java语言的特点 简单易用,安全可靠,跨平台,面向对象,支持多线程,动态的,高性能,可移植 Java即是编译型的,也是解释型语言,总的来说Java更接近解释

ilanyangyang的博客 1207

电涡流位移测量技术深度解密

电涡流位移传感器凭借非接触测量、高精度(可达纳米级)、强环境适应性(耐高温高压油污)等优势,成为工业精密位移检测的核心技术。其工作原理基于电磁感应:高频磁场在金属靶面感应涡流,通过检测线圈阻抗变化转化为位移信号。应用需注意靶材依赖性(需按实际材料标定)、安装精度及抗干扰措施。广泛应用于磁悬浮轴承、航空发动机、精密制造等领域,实现对微米级位移的可靠监测。

技术工作者 1755

样本不均衡时AUC反而下降?用imbalanced-learn库实战解决分类陷阱

本文探讨了样本不均衡时AUC指标下降的现象,并通过imbalanced-learn库实战演示了如何解决这一分类陷阱。文章详细分析了不同采样技术(如SMOTE、ADASYN)对模型性能的影响,并提供了XGBoost和逻辑回归模型的优化建议,帮助数据科学家在实际项目中做出更明智的决策。

weixin_29174013的博客 343

idea使用java8新特性,报红提示不支持方法引用

环境背景 我的java版本是1.8 并且项目的SDK版本也选择了1.8,语言级别也选择了8 编译环境也用了8版本的 问题 遍历的时候想使用java8的新特性,却提示图下图 想了一会,发现因为我的是maven的父子工程,所以模块还需要配置java的版本 模块的语言级别还需要配置为java8版本的 不报错了,解决问题了 ...

林高禄 9791

手把手教你用Docker快速部署开源MES系统(附避坑指南)

本文提供了一份详细的实战指南,手把手教你使用Docker容器化技术快速部署开源MES系统。内容涵盖从环境准备、项目选型、数据库配置到应用服务器优化、前端部署及生产环境监控的全流程,并附有避坑指南,旨在帮助中小制造企业IT人员和开发者低成本、高效率地构建智能制造解决方案。

f0g1h2的博客 1060

【进阶篇】聊一聊关于 Java8 新特性的理解与应用

Java 8是Java的一个重大版本,是目前企业中使用最广泛的一个版本。 它支持函数式编程,新的Stream API 、新的日期 API等一系列新特性。 掌握Java8的新特性已经是java程序员的标配,掌握了它,就可以看懂公司里的代码、高效率地处理大量集合数据以及消灭“嵌套地狱”等等。

weixin_43248862的博客 1654

【原创教程】西门子1500与施耐德伺服的通讯以及调试

该函数块主要描述伺服的手动,左边的引脚Forward是指伺服手动正转,Backward是指伺服手动反转,Fast是指手动的某个方向为快速运行,TipPos手册上描述为固定值,WaitTIme是指伺服手动的相应时间,VeloSlow指伺服手动正常慢速运动的速度,VeloFast指伺服手动快速运动的速度,Acceleration是指伺服手动的加速度,Decelertion是指伺服手动的减速度。该函数块用于伺服停止,左边的引脚Execute为伺服停止执行,Deceleration含义为减速,Axis为轴。

Qinmingyue13的博客 1374

把 SNC 支持的通信链路一次讲透,SAP GUI、RFC、CPIC、SAProuter 到底谁在保护谁

摘要: SNC(Secure Network Communications)是SAP系统中用于保护特定通信链路的安全机制,主要应用于DIAG、RFC、CPIC等SAP协议,而非HTTP等互联网协议(后者由SSL/TLS处理)。其核心在于保护通信端点之间的逻辑链路,需在发起方和接收方同时配置SNC参数,包括SNC名称、保护等级(QoP)等。实际项目中,SNC的配置涉及多个层面,如SAP GUI到ABAP平台的登录链路、外部程序通过RFC/CPIC连接ABAP的认证、ABAP系统间的跨系统通信等。配置不当可能导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

java如何减少代码量_Java 8 中的方法引用,轻松减少代码量,提升可读性!

1. 引言Java8中最受广大开发中喜欢的变化之一是因为引入了 lambda 表达式,因为这些表达式允许我们放弃匿名类,从而大大减少了样板代码,并提高了可读性。方法引用是lambda表达式的一种特殊类型。它们通常通过引用现有方法来创建简单的lambda表达式。方法引用包括以下四种类型:静态方法特定对象的实例方法特定类型的任意对象的实例方法构造方法在本篇文章中,我们将探讨Java中的方法引用。2. ...

weixin_30198949的博客 479

【2025年华为秋招(AI)-11月19日-第二题(200分)- 终端款型聚类识别】(题目+思路+Java&C++&Python解析+在线测试)

该摘要总结了题目要求、输入输出格式、KMeans算法的实现步骤以及关键点。以下是150字内的摘要: 本文提出基于KMeans算法对终端型号进行聚类的方法。通过包间隔时长、连接持续时长、漫游前后信号强度4个特征,使用欧氏距离度量相似度。算法采用固定初始化策略(前k个样本作为初始质心),经过分配-更新迭代,直至质心移动小于1e-8或达到最大迭代次数。最终输出各簇样本数并按升序排列,解决了终端型号自动分类问题。示例显示该方法能有效识别3-4类终端,并准确统计每类数量。

m0_73659489的博客 141

Java揭秘深入探索Lambda表达式与函数式编程的魔力

总而言之,Lambda表达式与函数式编程为Java注入了新的活力。它通过简洁的语法、与函数式接口的完美结合、强大的Stream API以及对行为参数化的支持,显著提升了代码的可读性、可维护性和表达能力。它鼓励开发者采用更声明式、更专注于业务逻辑本身的编程风格。虽然它并非银弹,需要开发者理解其背后的概念以避免误用,但毫无疑问,掌握Lambda表达式是现代Java开发者提升编程功力和编写高质量代码的必由之路,其魅力与魔力正在于此。

xyj4189的博客 793

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lwip-2.0.3

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

【Lambda默认参数重载】:揭秘Java 8函数式编程中的隐藏陷阱与最佳实践

掌握Lambda默认参数重载技巧,解决Java 8函数式编程常见陷阱。详解函数接口设计、方法引用兼容性及实际应用场景,提升代码可读性与维护性。规避编译错误与运行时异常,最佳实践值得收藏。

FastSolve的博客 296

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

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

为什么顶尖公司都在用Lambda?揭秘现代Java开发的效率密码

掌握Java lambda表达式,提升代码简洁与效率。详解其在集合操作、事件处理与并行计算中的应用,揭示函数式编程如何优化Java开发流程。核心优势包括减少冗余代码、增强可读性与性能表现,现代Java高效开发的关键实践,值得收藏。

Instrustar的博客 923

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

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

Java8 新特性 学习笔记

java 8 新特性:lambda表达式、方法引用、默认方法、stream api、optional

lihaogn的博客 516

Java JDK1.8新特性

一、接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做扩展方法 interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); } } Formula formula...

假装你是大灰狼的专栏 900

java8新特性(简述十大新特性)

你真的开始用JDK8了吗?如果你没有用上一些新特性,请别说自己使用了Java8。Java 8可谓是自Java 5以来最具革命性的版本了,她在语言、编译器、类库、开发工具以及Java虚拟机等方面都带来了不少新特性。我们来一一回顾一下这些特性。

ywl470812087的博客 3637

Java笔记(入门篇)

为什么要使用Java? 世界上最流行的编程语言之一,在国内使用最为广泛的编程语言。 可移植性(跨平台)、安全可靠、性能较好。 开发社区最完善、功能最丰富。

白豆五的博客 2910

Java 8 新增的 Lambda表达式

Lambda 表达式支持将代码块作为方法参数。 Lambda 表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(函数式接口)的实例。 本文包含如下内容: Lambda表达式入门 lambda表达式与函数式接口 方法引用与构造器引用 Lambda 表达式与匿名内部类的联系和区别 使用Lambda 表达式调用 Arrays的类方法 1.Lambda 表达式入门 先使用匿名内部类来改写前面介绍...

黑白灰的博客 810

Java新特性

Lambda表达式 概述: Lambda 是一个匿名函数,使用它可以写出更简洁、更灵活的代码。 @Test public void test1() { // 原本写法 Runnable r1 = new Runnable() { @Override public void run() { ...

qq_35272054的博客 448

Java 面试题基础 -总结

Java 面试题基础(一) 1、面向对象的特征有哪些方面? 答: 面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽 象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的 细节是什么。 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类 被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让 变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要 手段(如果不能理解请阅读阎宏博士的《Jav

精◈彩◈猿◈笔◈记 2304

jdk8-lambda表达式的使用

1, 遍历list集合   List&lt;Integer&gt; list = new ArrayList&lt;&gt;();   list.add(1);   list.add(2);   list.add(3);   // 直接打印   list.forEach(System.out::println);   // 取值分别操作   list.forEach(i -&...

weixin_33948416的博客 486

Java-ZZH1-78面试题

ZZH 1-78 hollerJAVA总结 目录 总结 1 1.JDK 1 1、 JAVA开发工具(jdk\bin) 1 2、 基础开发库(jdk\jre\lib\rt.jar) 1 3、 基础开发库的源码(jdk\src.zip) 1 2.基本类型(八种) 1 整数型 1 浮点型 2 3.运算符 2 算术运算符 + - * / 2 比较运算符 2 逻辑运算符 2 三元运算符 3 三项运算 3 赋值运算符 3 赋值运算 3 复合的赋值运算 3 4.循环结构 3 for(开始条件;循环条件;更改条件){ 4

zzh18334820165的博客 1567

Java基础

Java基础部分

weixin_48864482的博客 612
上一篇: 从入门到精通:Python正则表达式提取超链接的4种高阶写法
下一篇: 【算法面试必考点】:冒泡排序Java实现详解,90%程序员都忽略的关键细节
simcode
博客等级 码龄14年 154粉丝 2026原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值