11.0java-内部类&&Lambda表达式

内部类

  • 是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类.
  • 场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类.
内部类有四种形式
  • 成员内部类:类中的一个普通成员,类似于普通的成员变量,成员方法

djk16开始支持定义静态成员

创建成员内部类对象要先创建外部类对象:外部类命.内部类名 对象名 = new 外部类名().new 内部类名();

内部类调用外部类的变量通过:外部类名.this.变量名

  • 静态内部类:有static修饰的内部类,属于外部类自己持有

创建静态内部类对象:外部类命.内部类名 对象名 = new 外部类名.内部类名

可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员.

  • 局部内部类:定义在方法中,代码块中,构造器等执行体中
匿名内部类:

一种特殊的局部内部类;所谓匿名指的是程序员不需要为这个类声明名字

格式:

new 类或接口(参数值...){
	类体(一般是方法重写);
};

**特点:**匿名内部类本质就是一个子类,并会立即创建出一个子类对象

**作用:**用于更方便的创建一个子类对象

匿名内部类在开发中的使用场景:

  • 通常作为一个参数传输给方法

    更方便的创建出一个子类对象

    • 匿名内部类:看接口的抽象方法个数(1~2个)
    • 单独编写实现类:接口中抽象方法个数很多
Lambda表达式
  • Lambda表达式是DJK8开始后的一种新语法形式(只能操作函数式接口)
  • 作用:简化匿名内部类的代码写法

Lambad表达式只能简化函数式接口的匿名内部类的写法形式

函数式接口:有且仅有一个抽象方法的接口,可以使@FunctionalInterface 注解, 来检查是否是函数式接口

Lambad表达式的简化格式
() -> {}
(匿名内部类被重写方法的形参列表) -> {
	被重写方法的方法体代码
}
注:-> 是语法形式,无实际意义
Lambda表达式的省略写法
  • 参数类型可以省略不写。
  • 如果只有一个参数,参数类型可以省略,同时 () 也可以省略。
  • 如果Lambda表达式的方法体代码只有一行代码可以省略大括号不写,同时要省略分号此时,如果这行代码是return语句,必须省略return不写,同时也必须省略 “;” 不写
Lambda表达式和匿名内部类的区别
使用限制不同
  • 匿名内部类 : 可以操作类, 接口
  • Lambda表达式 : 只能操作函数式接口
实现原理不同
  • 匿名内部类:编译之后,产生一个单独的.class字节码文件
  • Lambda表达式:编译之后,没有一个单独的.class字节码文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值