关于匿名内部类,Lambda,数组以及可变参数

本文深入探讨了匿名内部类的概念与应用,以及如何通过Lambda表达式简化其使用。同时,详细介绍了数组的特性、声明与初始化方式,以及如何操作数组中的数据。

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

匿名内部类
没有名字的内部类
简化没有独自作用|功能的实现|子类

*new Smoking(){ //–匿名内部类的蕾体 是new后面的接口或者父类的实现类|子类的类体
@Override
public void cat() {
System.out.println(“吸猫…”);
}
}.cat();
interface Smoking{
void cat();
}
Lambda表达式
目标:简化匿名内部类
语法: ()->{}
() :–>重写的抽象方法的参数列表
-> :箭头符号,箭头函数,Lambda符号
{} :重写的抽象方法的方法体

前提:函数式接口
函数式接口:只有一个抽象方法的接口就是函数式接口
@FunctionalInterface : 强制检查是否为函数式接口

数组: []
相同数据类型的有序集合

变量: 存储单个数据
数组: 存储多个数据

数组的特点:

  • 1.数组是引用数据类型

  • 2.数组是定长的,长度一旦确定不可改变

  • 3.数组中所有数据的数据类型保持一致

  • 4.数组中的数据存在顺序(索引:从0开始)

  • 数组的声明方式:

    1. 数据类型[] 数组名;
      数据类型:可以是基本数据类型|引用数据类型
      数据类型的作用:规定数组中所有数据的数据类型
    2. 数据类型 数组名[]; --不推荐使用

数组的初始化:
动态初始化:先创建后赋值
数据类型[] 数组名 = new 数据类型[长度];
数组中的数据如果不赋值有默认值 String–null,int–0,double–0.0 ,char–’ ',boolean–false
静态初始化:创建的同时赋值

  •  数据类型[]  数组名 =new 数据类型[]{值1,值2,值3...};
    
  •  数据类型[]  数组名 ={值1,值2,值3...}; --推荐
    

操作(获取|修改)数组中的数据
通过索引操作 数组名[索引|下标]

数组的长度:
数组名.length
数组中最后一个数据的下标:
数组名.length-1
数组的遍历:
1)普通for循环,可以获取可以修改,因为是操作索引(位置)
2)增强for循环|for…each ,只能获取每一个数据,不能修改

  •  for(数据类型 变量名: 数组名|容器名){
    
  •  	变量-->指代数组中的每一个数据
    
  •  }
    

可变参数:数据类型相同的0~多个参数
1.使用…表示可变参数
2.编译器会自动为可变参数隐式创建一个数组,通过操作数组的方式使用可变参数
3.可变参数必须放在参数列表的最后位置

### Java 中将 List 传递给 Varargs 方法 在 Java 中,varargs(可变参数)允许方法接受不定数量的参数。然而,如果希望将 `List` 类型的数据作为输入传递到 varargs 方法中,则需要特别处理。这是因为 varargs 实际上是一个数组类型的参数,在编译时会被转换为对应的数组。 以下是实现这一功能的一个例子: #### 示例代码 ```java import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { // 创建一个字符串列表 List<String> list = Arrays.asList("apple", "banana", "cherry"); // 调用 varargs 方法并传递列表 printItems(list.toArray(new String[0])); // 将列表转为数组再传递 } // 定义一个接收可变参数的方法 public static void printItems(String... items) { for (String item : items) { System.out.println(item); } } } ``` 在这个例子中,通过调用 `list.toArray(new String[0])` 将 `List` 转换为数组后再传递给 varargs 方法[^1]。这是因为在 Java 中无法直接将 `List` 对象赋值给 varargs 参数,因为它们本质上属于不同的数据结构类型。 需要注意的是,虽然可以使用上述方式解决此问题,但在实际开发过程中应谨慎使用 varargs 方法,尤其是在可能引起混淆的情况下。 #### 关于 Executors 和 Runnable 的扩展说明 尽管题目并未提及线程池相关内容,但引用提到 `Executors.newSingleThreadExecutor()` 可用于创建单一线程执行器,并配合匿名内部类Lambda 表达式提交任务[^2]。这与当前讨论的主题无直接关联,但如果涉及并发编程场景下的参数传递,同样需遵循类似的规则来适配 varargs 或其他复杂数据类型的需求。 另外值得注意的一点是关于 Scala 编程语言中的 varargs 处理机制略有不同之处在于其底层存储形式始终表现为同种数据类型的数组即 `[data_type][]` 形式[^3];而在 Java 当中则更加灵活多变取决于具体上下文环境以及开发者的设计意图。 最后提醒一下有关术语定义方面的小细节:“形参”指代函数签名部分所声明出来的那些占位符名称而“实参”则是真正用来填充这些位置的具体数值或者对象实例等等[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值