Java基础快速入门: 面向对象高级之Lambda表达式深度解析

Java 8新特性深度解析:从Lambda到Stream的工程实践 函数式编程思想是现代Java开发的重要基石,Java 8作为里程碑版本,将这一范式正式引入主流开发。Lambda表达式与函数式接口简化了匿名类的繁琐写法,让代码更聚焦于业务意图;Stream API则以声明式方式处理集合数据,将过滤、映射、聚合等操作编排为流水线,结合惰性求值与短路机制带来性能红利。Optional提供安全的空值处理方案,新日期时间API解决了旧版Date的可变性与线程安全问题,而CompletableFuture让异步编程摆脱嵌套回调。这些特性覆盖从集合处理到并发协作的常见场景,也是Jav 阅读详情

本文纲要

  1. Lambda表达式初体验与函数式编程思想
  2. Lambda表达式的标准格式和使用前提
  3. Lambda表达式练习:带参数无返回值
  4. Lambda表达式练习:无参数有返回值
  5. Lambda表达式练习:带参数带返回值
  6. Lambda表达式的省略模式
  7. 匿名内部类与Lambda表达式的区别

项目代码结构

src/
└── com/
    └── wb/
        ├── test1/
        │   └── TestSwimming.java 
        ├── test2/
        │   └── TestLambda.java
        ├── test3/
        │   └── StringHandlerDemo.java
        ├── test4/
        │   └── RandomNumHandlerDemo.java 
        ├── test5/
        │   └── CalculatorDemo.java
        ├── test6/
        │   └── Test6.java
        └── test7/
            └── Test.java

Lambda表达式初体验与函数式编程思想

1 ) 从匿名内部类到Lambda

以前我们调用一个接口方法时,通常需要传入一个匿名内部类对象。例如,有一个游泳接口 Swimming,里面有一个 swim() 方法,我们这样调用:

goSwimming(new Swimming() {
    @Override 
    public void swim() {
        System.out.println("铁汁, 我们去游泳吧");
    }
});

采用 Lambda表达式 后,可以简化为:

goSwimming(() -> System.out.println("铁汁, 我们去游泳吧"));

运行结果完全一致。这说明 Lambda表达式可以理解为对匿名内部类的简化(本质上两者有区别,后文会说明)。

2 ) 函数式编程思想

通过对比可以发现,匿名内部类的写法里,我们不仅要关注“做什么”(打印一句话),还要关注“怎么做”(创建匿名内部类对象、重写方法)。而Lambda表达式让我们把注意力完全集中在要做什么上面,至于怎么创建对象、怎么重写方法这些语法细节,都由编译器在背后处理了。

这种更关注做什么,而不是怎么做的编程思想,就是函数式编程思想(Functional Programming)。Lambda表达式正是这种思想在Java中的体现。

Lambda表达式的标准格式和使用前提

1 ) 标准格式

Lambda表达式由三部分组成:(形式参数) -> { 代码块 }

  • 形式参数:如果有多个参数,用逗号分隔;如果没有参数,留空即可
  • 箭头 ->:由英文横线和大于号组成,表示将参数传递给后面的代码块
  • 代码块:具体要执行的内容,相当于方法体

2 ) 使用前提

Lambda表达式并不是任何地方都能用,必须满足两个条件:

  1. 操作的必须是一个接口。
  2. 接口中有且仅有一个抽象方法。

这种接口也被称为函数式接口。

3 ) 示例:无参数无返回值

接口定义(ShowHandler):

interface ShowHandler {
    void show();
}

测试类:

public class TestLambda {
    public static void main(String[] args) {
        // 匿名内部类方式
        useShowHandler(new ShowHandler() {
            @Override
            public void show() {
                System.out.println("我是匿名内部类中的show方法");
            }
        });
 
        // Lambda方式 
        useShowHandler(() -> System.out.println("我是Lambda中的show方法"));
    }
 
    public static void useShowHandler(ShowHandler showHandler) {
        showHandler.show();
    }
}

分析:接口中只有一个 show() 方法,无参数,无返回值。
Lambda表达式 () -> System.out.println(...) 中,括号内无参数,箭头后直接写要执行的事情。

Lambda表达式练习:带参数无返回值

当接口方法带有参数时,Lambda表达式也需要在括号内声明参数。

接口定义(StringHandler):

interface StringHandler {
    void printMessage(String msg);
}

使用示例:

public class StringHandlerDemo {
    public static void main(String[] args) {
        // 匿名内部类
        useStringHandler(new StringHandler() {
            @Override 
            public void printMessage(String msg) {
                System.out.println("我是匿名内部类" + msg);
            }
        });
 
        // Lambda
        useStringHandler(msg -> System.out.println("我是Lambda表达式" + msg));
    }
 
    public static void useStringHandler(StringHandler stringHandler) {
        stringHandler.printMessage("itheima");
    }
}

要点:方法 printMessage 有一个参数,所以Lambda的括号内需要写上参数名(参数类型可以省略,后面会讲)。如果只有一个参数,括号也可以省略,如 msg -> ...。

Lambda表达式练习:无参数有返回值

如果接口方法有返回值,Lambda表达式必须使用 return 语句返回结果。

接口定义(RandomNumHandler):

interface RandomNumHandler {
    int getNumber();
}

使用示例:

import java.util.Random;
 
public class RandomNumHandlerDemo {
    public static void main(String[] args) {
        // 匿名内部类 
        useRandomNumHandler(new RandomNumHandler() {
            @Override
            public int getNumber() {
                Random r = new Random();
                int num = r.nextInt(10) + 1;
                return num;
            }
        });
 
        // Lambda
        useRandomNumHandler(() -> {
            Random r = new Random();
            int num = r.nextInt(10) + 1;
            return num;
            // 注意: 如果lambda所操作的接口中的方法有返回值, 一定要通过return语句将结果返回
            // 否则会出现编译错误
        });
    }
 
    public static void useRandomNumHandler(RandomNumHandler randomNumHandler) {
        int result = randomNumHandler.getNumber();
        System.out.println(result);
    }
}

注意:无参数但需要返回值时,括号不能省略;方法体中的代码块如果有多条语句,大括号也不能省略。

Lambda表达式练习:带参数带返回值

这是最完整的形态:既有参数,又有返回值。

接口定义(Calculator):

interface Calculator {
    int calc(int a, int b);
}

使用示例:

public class CalculatorDemo {
    public static void main(String[] args) {
        // 匿名内部类
        useCalculator(new Calculator() {
            @Override 
            public int calc(int a, int b) {
                return a + b;
            }
        });
 
        // Lambda
        useCalculator((a, b) -> a + b);
    }
 
    public static void useCalculator(Calculator calculator) {
        int result = calculator.calc(10, 20);
        System.out.println(result);
    }
}

说明:参数 a 和 b 的类型可以省略,方法体只有一条返回语句时,可以省略大括号和 return,直接写表达式。

Lambda表达式的省略模式

Lambda表达式提供了一些简化写法,让代码更简洁。

1 ) 省略规则

  1. 参数类型可以省略,但如果有多个参数,不能只省略一个(要么都省略,要么都保留)。
  2. 如果参数只有一个,小括号可以省略。
  3. 如果代码块只有一条语句,可以省略大括号、分号和 return(这三个必须一起省略)。

2 ) 示例:针对省略规则的综合练习

原始接口:

interface Inter {
    double method(double a, double b);
}

完整Lambda:

useInter((double a, double b) -> {
    return a + b;
});

应用省略规则后:

useInter((a, b) -> a + b);

完整调用代码:

public class Test6 {
    public static void main(String[] args) {
        useInter((a, b) -> a + b);
    }
 
    public static void useInter(Inter i) {
        double result = i.method(12.3, 22.3);
        System.out.println(result);
    }
}

3 ) 对其他练习的省略优化

test2(无参无返回值):

  useShowHandler(() -> System.out.println("我是Lambda中的show方法"));

因为无参,括号不能省;只有一条语句,可以省略大括号和分号。

test3(一个参数无返回值):

useStringHandler(msg -> System.out.println("我是Lambda表达式" + msg));

参数类型省略,且只有一个参数,小括号省略;一条语句,省略大括号和分号。
test4(对应上述无参有返回值,方法体多条语句):
无法省略大括号,因为方法体有两条语句,必须保留 {} 和 return。

test5(有参有返回值,方法体一条语句):

useCalculator((a, b) -> a + b);

省略了参数类型、大括号和 return。

匿名内部类与Lambda表达式的区别

区别点匿名内部类Lambda表达式
所属类型可以是接口、抽象类,甚至具体类只能操作接口
使用限制接口中抽象方法数量不限接口中必须有且仅有一个抽象方法
实现原理编译后生成独立的 .class 文件(如 Test$1.class)编译时不生成单独的 .class 文件,运行时动态生成字节码

1 ) 验证编译结果

接口:

interface Inter {
    void show();
}

测试类:

public class Test {
    public static void main(String[] args) {
        // 匿名内部类 
        useInter(new Inter() {
            @Override 
            public void show() {
                System.out.println("匿名内部类的show方法");
            }
        });
    }
 
    public static void useInter(Inter i) {
        i.show();
    }
}

编译后,在 out 目录下可以看到:

  • Inter.class (接口字节码)
  • Test.class (测试类字节码)
  • Test$1.class (匿名内部类生成的字节码)

如果使用Lambda表达式,编译后不会生成 $1.class,对应的字节码会在运行时动态生成,不保留在硬盘上。

结语

Lambda表达式是 Java 8 引入的重要特性,它让代码更简洁,同时将编程思维从“怎么做”引导到“做什么”。

掌握Lambda的格式、使用前提、省略规则以及与匿名内部类的区别,是Java进阶的必经之路。希望本文能帮助你快速入门Lambda表达式。

2026Java后端面试:10道Java基础硬核解析(二) 本文将为你带来一份Java基础面试题的深度解析指南。我将从finally与finalize的区别、static关键字的作用出发,逐步深入到静态方法无法调用非静态变量的底层原因。文章核心部分将详细拆解四种访问权限修饰符的区别、内部类的分类与本质差异,并最终系统总结Java8核心新特性与Lambda表达式的底层实现机制。 阅读详情

相关推荐

用友秋招Java笔试题深度解析:核心考点与实战复盘

Java作为企业级开发的主流语言,其面向对象、集合容器、多线程与JVM内存管理等核心知识,始终是技术面试与笔试的常考内容。深入理解这些基础概念的底层原理,例如HashMap的底层存储结构、synchronized与volatile的语义差异、JVM运行时数据区划分等,能够帮助开发者写出更健壮、更高效的工程代码。在校招笔试与日常开发中,扎实的Java基本功直接影响问题排查效率与代码质量。本文以用友2018秋招Java笔试题为例,回溯面向对象、集合、异常处理、并发、JVM等高频考点,并结合手写冒泡排序、快速排序

weixin_34220179的博客 544

javalang与Java 8语法解析:全面支持Lambda表达式和Stream API的终极指南

javalang是一个纯Python编写的Java源代码处理库,专门针对Java 8语法进行深度解析。这个强大的工具能够完美解析Java 8引入的核心特性,包括Lambda表达式、方法引用和Stream API等现代语法结构。对于需要在Python环境中处理Java代码的开发者和研究人员来说,javalang提供了完整的语法树构建和分析能力。 ## 🔍 为什么选择javalang进行Java语

gitblog_00892的博客 850

Java Lambda表达式与泛型实战:30个避坑技巧与性能优化

Lambda表达式作为函数式编程的核心概念,通过将函数作为参数传递实现了代码的简洁性和灵活性。其原理基于函数式接口的单一抽象方法约束,配合编译器的类型推断机制,显著提升了开发效率。在技术价值层面,Lambda与泛型的结合为集合操作、异步编程等场景提供了类型安全的解决方案。泛型通过编译时类型检查确保数据一致性,而Stream API则通过流水线操作实现数据处理的高效抽象。在实际应用场景中,这些技术广泛应用于大数据处理、微服务架构等现代Java开发领域。本文基于Java 8函数式接口和类型擦除机制,深入解析了3

weixin_33483304的博客 305

如何用javalang在Python中轻松解析Java源代码:快速入门教程

在Python生态中解析Java源代码从未如此简单!javalang是一个纯Python实现的Java解析器库,专门为需要在Python环境中处理Java代码的开发者设计。这个强大的工具让Python开发者能够轻松解析、分析和操作Java源代码,无需依赖Java运行环境。无论是进行代码分析、静态检查,还是构建代码转换工具,javalang都能为您提供完整的Java语法解析支持。🎯 ## 🔍

gitblog_01095的博客 966

SAP ERP与金蝶云星空的集成案例(新能源光伏行业)

通过建设PLM、SAP、MES、WMS、SCADA、EAM等多系统集成的工业互联网平台作为数字化工厂的控制中枢,不仅可以实现人员、设备、物料、工艺参数、产品等生产全流程追溯管理,同时也可以根据数据采集进行生产现场的控制调节,最大程度降低能耗水平。销售订单创建下推金蝶采购订单创建修改、销售订单创建下推金蝶销售订单创建修改、销售发货过账下推金蝶采购入库单、销售发货过账下推金蝶销售出库单:在SAP ERP系统创建销售订单、销售发货过账单后推送到云星空系统,进行采购/销售订单的创建修改、完成物料的入库和出库流程。

集信通 1620

保姆级教程:在树莓派5B上用AI Kit跑YOLOv8,实测134fps的完整配置流程

本文提供了一份详细的树莓派5B搭配AI Kit部署YOLOv8的教程,从硬件组装到模型转换、优化和部署,最终实现134FPS的高帧率推理性能。通过Hailo-8L AI加速模块和HEF模型转换,这套方案为边缘AI计算提供了强大支持,适用于智能监控、无人机视觉导航等应用场景。

weixin_28725407的博客 450

Java 8 Lambdas项目深度解析:10个核心概念快速入门

Java 8 Lambdas项目是针对《Java 8 Lambdas》书籍的配套练习和答案,提供了丰富的Java 8新特性实践案例。本项目通过实际代码示例帮助开发者掌握Lambda表达式、Stream API、函数式接口等核心功能,是学习Java 8函数式编程的绝佳资源。 ## 1. Lambda表达式:简化代码的新方式 Lambda表达式是Java 8引入的革命性特性,它允许将函数作为方法参

gitblog_00455的博客 501

VS Code + Codex 在 WSL 中使用的正确姿势

Codex 登录只能在本地完成。文件仍可通过 UNC 路径访问 WSL → 本地 Codex 就能照常工作。避免在 WSL 内重复安装/登录 Codex 扩展。

yangguangwuyue的博客 9858

Lambda表达式

这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能。 大家好,我是IT修真院郑州分院何爽,一枚正直纯洁善良的后端程序员。 今天给大家分享一下,修真院官网java任务10,深度思考中的知识点——Lambda表达式 1.背景介绍 一、简介 (注:虽然看着很先进,其实La...

IT修真院:初学者转行到互联网的聚集地 571

AI编程助手Cursor如何革新经济学研究:从计量模型到可视化全流程实战

在数据科学和人工智能技术蓬勃发展的今天,如何高效地将前沿AI工具融入专业领域的研究工作流,成为提升科研效率的关键。其核心原理在于通过自然语言交互,将研究者的专业问题转化为机器可执行的指令,从而实现人机协作的范式转移。这一技术的核心价值在于大幅降低非计算机背景研究者的编程门槛,将精力从繁琐的代码实现中解放出来,更聚焦于学科本身的思想与逻辑。尤其在经济学、金融学等高度依赖数据分析和计量建模的领域,AI编程助手能够快速处理数据清洗、模型估计、可视化及结果解释等任务。具体到应用场景,研究者可以利用结构化提示词工程,

weixin_42531579的博客 296

数字信号的艺术演绎:用FPGA+DAC实现音乐合成器的核心原理

本文深入探讨了如何利用FPGA和DAC技术实现数字音乐合成器的核心原理,涵盖DDS架构、多波形合成、MIDI协议解析及动态包络控制等关键技术。通过详细的Verilog代码示例和硬件实现方案,展示了数字信号处理在音乐合成中的艺术演绎,为电子音乐创作提供了强大的硬件支持。

weixin_28256233的博客 390

Java 8 Lambda表达式深度解析:5大应用场景彻底改变你的编码方式

掌握Java 8新特性,提升编码效率。本文深入解析java lambda表达式在集合遍历、事件处理、线程创建等5大场景的应用,结合函数式接口与Stream API,简化代码逻辑,增强可读性。实战示例详解核心用法,值得收藏。

QuickTrans的博客 1093

手把手教你用Python处理MAHNOB-HCI多模态数据集(含脑电EEG/眼动/视频数据同步实战)

本文详细介绍了如何使用Python处理MAHNOB-HCI多模态数据集,涵盖脑电(EEG)、眼动追踪和视频数据的同步解析与对齐。通过MNE-Python、pandas和OpenCV等工具,实现从BDF、TSV到XML格式的高效处理,解决时间轴对齐难题,助力情感计算与人机交互研究。

weixin_30998797的博客 370

Java求职面试全攻略:从基础到高级技术栈的深度剖析

在互联网大厂的求职面试中,谢飞机,一个搞笑的水货程序员,正迎接着严肃的面试官的挑战。:呃,Lambda表达式就是Java的匿名函数吧,它可以让代码更简洁,Stream API嘛,用于处理集合的,像过滤、排序等操作。:Prometheus可以收集系统指标,Grafana可以用来展示这些数据,呃,就像物流中心的监控屏幕,实时追踪货物位置。:Kafka是个消息队列吧,可以帮忙处理实时数据,比如用户的学习进度更新,呃,就像快递信息实时更新那样。:今天的面试到此结束,我们会在几天内给你反馈,请回家耐心等待。

2501_90526811的博客 415

ethernet eth0: Could not attach to PHY

整个流程看下来就是MAC connect PHY的过程失败了,失败的具体原因根据config_init,上图(bcm54xx_config_init) ,从此方向入手去定位原因;我这里的问题是has_gmac4没有置1,根据 has_gmac4: uses GMAC4 core.按照上面的调用逻辑,添加了部分打印,定位到__phy_read接口返回失败。stmmac_mdio_read 大部分都是linux的标准接口。最终取决于平台用的是哪家的phy,调用config_init。

无线互联&网络介绍 2703

9.13华为OD机试真题 新系统 - 手机桌面整理 (Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【手机桌面整理】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【 手机桌面整理】多语言题解。

qq_45776114的博客 642

Java内部类与Lambda表达式深度解析及性能优化

Java内部类作为面向对象编程的重要特性,通过嵌套类结构实现更紧密的代码组织。其核心原理在于持有外部类的隐式引用,这使得内部类可以直接访问外部类成员,但也带来了内存管理的挑战。从技术演进角度看,Java 8引入的Lambda表达式通过invokedynamic指令优化了函数式编程的实现方式,相比传统匿名内部类具有更好的性能表现和代码简洁性。在实际工程中,内部类广泛应用于Android事件处理、回调机制等场景,而Lambda表达式则大幅简化了集合操作和异步编程。需要特别注意的是,匿名内部类在循环中使用可能导致

weixin_33404102的博客 124

Devexpress16.2.6破解工具

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

[Java核心技术解析从入门到精通的实用指南]

并发工具包(java.util.concurrent)提供高级特性,如ExecutorService管理线程池,CountDownLatch协调线程,ConcurrentHashMap实现线程安全映射。抽象类用abstract定义,可以包含抽象方法和具体方法,而接口用interface声明,所有方法默认抽象,Java8后支持默认方法。Java集合支持泛型,确保类型安全。Java 9引入模块化系统(Project Jigsaw),通过module-info.java定义模块依赖和导出,增强封装性和可维护性。

gigige123的博客 332

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java Lambda 表达式全面解析:函数式接口、方法引用与 invokedynamic 底层实现

Lambda 表达式(闭包)是 JDK 8 引入的核心语法,它让 Java 得以用简洁的函数式风格编写匿名逻辑,本篇文章以 YCBlogs 仓库中 [java/12.Java深入/06.Lambda表达式介绍.md](https://link.gitcode.com/i/8ebaa0623984fc3764cee00715dbc676) 为骨架,结合仓库内 JVM 字节码、方法调用与动态代理等源码

gitblog_00083的博客 491

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java 进化之路:从 Java 8 到 Java 21 的重要新特性(深度解析)

从Java 8到Java 21的13年间,Java不仅没有老去,反而通过持续创新焕发新生!建议开发者至少每两年关注一次新版本特性,但也不用盲目追新——根据项目实际情况选择合适的版本才是王道。(行动号召)现在就用看看你的当前版本,是时候规划升级路线图啦!

gskks6655661的博客 1075

Java开发指南:从零基础到深度实践

亲爱的读者朋友们,欢迎开启这段Java的修行之旅。代码,是思想的显化,是逻辑的禅定。本书将带您从“万物皆对象”的初心出发,掌握Java核心,驰骋于Spring的广阔天地,构建微服务的坛城,乃至驾驭AI的智慧之光。莫将此书仅作技术图谱,它更是一张心法地图。愿您于此,不仅习得一身精湛“术”法,更能悟得软件工程背后严谨、创造、演进不息的“道”。愿智慧之光,常伴您行。

weixin_45747731的博客 2007

【Lambda表达式】探索Lambda表达式

Lambda表达式可以被视作一种简洁的匿名函数,它与方法引用一起,主要为Stream API服务。它们提供了一种更清晰、更简练的方式来处理集合数据,无需声明整个函数即可快速定义行为。

qq_44530108的博客 351

终极Java编程进阶指南:Effective Java第三版90条黄金法则深度解析

想要突破Java编程瓶颈,写出高质量的代码吗?Effective Java第三版双语学习项目为你提供了完美的解决方案!这个项目将Joshua Bloch的经典著作《Effective Java》第三版完整翻译为中文英文双语对照,包含12个章节共90条宝贵的编程经验和最佳实践。 ## 🚀 为什么选择Effective Java第三版? 作为Java开发者的必读经典,《Effective Jav

gitblog_00525的博客 1156

Java反编译终极指南:CFR工具从入门到精通实战解析

Java反编译是每位Java开发者都应掌握的重要技能,它能让你深入理解字节码与源码之间的转换过程。CFR作为一款强大的Java反编译器,能够将现代Java特性完美还原,甚至支持Java 9、12、14等新版本特性。本文将为你提供完整的CFR使用指南,从基础安装到高级技巧,助你成为反编译专家!🚀 ## 📦 CFR简介与核心优势 CFR是一款开源Java反编译器,能够将编译后的.class文件

gitblog_01078的博客 598

Java二星级练习卷全解析:核心考点、高频算法与环境排错实战

在Java学习与工程实践中,扎实的基础语法、面向对象设计、集合容器与异常处理能力,是每一位开发者构建可靠应用的前提。数组越界异常(ArrayIndexOutOfBoundsException)与内存溢出(OutOfMemoryError)等经典问题,往往源于对底层原理的理解不足。而面对快速排序、冒泡排序等高频算法,以及Lambda表达式、枚举状态机等现代语法,只有真正掌握其运行机制,才能在实际编码中游刃有余。此外,java环境变量配置、编译版本不一致(如源发行版17需要目标发行版17)、Lombok编译器警

weixin_29574585的博客 257
上一篇: Java基础快速入门:面向对象高级之接口、多态与内部类
下一篇: Java基础快速入门: API常用类之Math,System,Object,Objects
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值