8。匿名类,lambda表达式

本文探讨了Java中匿名类的使用场景,以及如何通过匿名类和Lambda表达式实现接口/抽象类,重点介绍了Arrays.sort()的排序逻辑和Comparable接口的compareTo方法。同时,讲述了Lambda表达式与匿名类的区别,以及方法引用对Lambda的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

匿名类

一个类实现了一个接口或抽象类,必须要实现接口和抽象类中的所有抽象方法 ,我们写一个类实现了一个接口或抽象类,可以说是这个类是属于这个接口或抽象类类型的,如果我们在很多地方经常用到这个类的实例,那没问题, 我们就非常有单独写一个.java这个类的必要,但是还有种情况是如果这个类只在项目中使用几次,用的不多,这种情况 下我们可以将这个类设置 为匿名类

当一个类在项目中只需要使用一次时,外界不会对其反复的使用时,便可以使用匿名类,不知道它是属于哪种类型,但是也可以在这个类中定义内部类中的资源

  • 这样可以省掉一些类结构 ,便项目的类结构变得更加的精简
  • 匿名类的书写方式,new 接口名称(){ };代表这个类实现了这个接口,或者抽象类的基础上的类,也只有在接口和抽象类中体现,

image-20220527203510528

image-20220527204405306

排序

排序Jdk提供了一个接口

image-20220530082826099

两个数来调用 这个方法,默认排法是将小的排在左边,大的排在右边 这是 自带的 不能变更

Java的Arrays.sort()方法的逻辑 简单的理解

例如 33 22 来调用 这个方法 , 用33-22 结果是大于0,那么编译器 会认为 33这个位置 >32这个位置 又因为大的在右边,所以 33 在22的右边

如果11 98来调用 这个方法 , 用11-98 结果小于0 , 那么 编译器会认为 11这个位置 <98位置 又因为大的在右边 ,所以 98 在11 的右边

根据以上逻辑,如果想要有不同的排序结果 只需要 让 同样 是33 22 两个 数来比,我让编译器认为22比较大 33比较小不就可以 了怎样让编译器 这样认为 呢 本来是33 22 比 33 大 是因为减出来的结果大于 0 所以 认为 33 大,那么我将这个返回值反过来 ,同样 还是33 22 来比, 返回值 的结果是 33 22 <0 ,那么 编译器 33 就小于22 了就会把它放在左边,便完成 了降序的效果

判断排序的逻辑

怎样判断大和小?01 - 02 返回值 小于0 右边就大本来既定事实 01 - 02 <0 02大,现我让他返回值 硬变成相反的(02-01)也就是大于0 了, 那左边就比较大 那左边就要往右排,可事实上左边还是比右边 小,这样就降序了

comparable接口中的compareTo方法的实现

image-20220530084022430

image-20220530084701352

image-20220530084151433

Lambda表达式

image-20221216173543837

image-20221216174355771

当一个接口中只有一个抽象 方法 时,便可以使用lambda表达式,我们可以在这个接口上加上注解@FunctionalInterface来表示这个是函数式接口,加了这个注解就告诉Jvm这个接口在加载时如果出现了另外 一个抽象 方法就会加载出错, 这个语法也是Java8才有的语法

image-20220530084629911

image-20220530084811495

匿名类和lambda 的 区别

  • Lambda没有引入新的作用域不能定义表达式中局部变量中已经存在的变量,定义的话会出现冲突
  • 在访问时,如果 访问this对象里面的成员变量时,访问的是这个类中的成员变量,如果有的话就能访问到
  • 匿名类中如果 访问的this成员变量,如果类中本身没有这个成员变量会报错,这就是最大的区别
  • Lambda this表示的 是这个实例方法中的实例有没有这个成员变量, 而匿名类表示的是这个类本身有没有this这个成员变量,访问上有差异

image-20220530085000105

方法引用

Lambda表达式是对函数式接口的优化,那么方法引用便是对Lambda的优化

当lambda表达式中调用的是不同方法时(静态方法,构造方法,实例方法…)我们会对其书写进行不同程序的优化image-20220530085131818

image-20220604102057849

image-20211119114552369

image-20220604103049353

image-20220604103146947

image-20220604103218401

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值