java进阶学习7—内部类、Lambda

本文详细探讨了Java中的内部类,包括成员内部类、局部内部类和匿名内部类的定义、特点和使用,以及各种类型的内部类访问实践。此外,还介绍了Lambda表达式的编程思想、标准格式,并通过实例比较了Lambda与匿名内部类的差异,讨论了Lambda的省略模式及其在接口实现中的应用。

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

I 内部类

一、内部类概述

1、定义:在一个类中定义一个类

2、分类:成员内部类、局部内部类、匿名内部类

3、内部类访问特点:(1)内部类可以直接访问外部类的成员,包括私有成员(2)外部类要通过创建对象访问内部类成员

二、内部类特点及使用

1、成员内部类:在类的成员位置

(i)属于类中的成员,可由修饰符修饰

(ii)private修饰:私有成员内部类访问需要在其所在外部类中创建对象使用

(iii)static修饰:(1)静态成员内部类访问格式:外部类名.内部类名.对象=new 外部类名.内部类名()(2)静态成员内部类方法访问:外部类名.内部类名.方法名()

2、局部内部类:在类的局部位置

(i)定义于方法内部,外界无法使用,需要在方法内部创建对象使用

(Ii)局部内部类可以访问外部类成员,也可以访问方法内的局部变量

3、匿名内部类:本质上是特殊的局部内部类(定义在方法内部)

 (i)使用前提是:有一个接口或类

(ii)格式:new 接口名|类名(){重写方法}

(iii)匿名内部类提供了实现接口的简便方法,将(继承|实现)、方法重写、创建对象合并为一步完成

三、内部类代码练习

€1 普通成员内部类访问使用练习

a374ef2c97f642b1959891756c0c40d9.png

c4cd4718600f4243a37036488491736c.png  

€2 私有成员内部类访问练习

b591370745814efaababa2f94c9e45fa.png 

€3 静态成员内部类访问练习

ccac854685884ec691d1b7944199c370.png 

€4 局部内部类访问练习

c0773918586441218694b3b22eb88365.png

bd36a36dfbc3474090cbee3437e4cc9a.png  

€5 实现接口两种方法对比(匿名内部类使用练习)

1edce4a6a9254ea38435ea04597db7a1.png

41c8c3d6742f4eb2b67566634b19f188.png 

a778f7ec6e6c4db1ba107df3dd8291ad.png  

€6 匿名内部类调用接口中多个方法练习

acf413f96ef44e27916eb1e87a0f2f4a.png 

€7 匿名内部类应用场景练习

73653d321e8f4fecad02439ef3335673.png 

note:当方法的形式参数是接口或者抽象类时,可以将匿名内部类作为实际参数进行传递

II Lambda

一、编程思想概述

1、面向对象编程思想:通过对象的形式完成某个事

2、函数式编程思想:忽略面向对象的复杂语法,强调做什么,而不是做的形式

3、匿名内部类与Lambda表达式对比体验

e2691f0f260541339055d03214ea1c06.png

二、Lambda表达式标准格式

1、格式:(形式参数)—>{代码块(重写方法)};

2、形式参数:多个参数之间用,隔开,无参数保留空白括号

3、—>:代表指向动作

4、代码块:方法体内容

5、使用前提:(1)有一个接口(2)接口中有且仅有一个抽象方法

三、Lambda表达式使用练习

€1 Lambda表达式优化匿名内部类

939fc8cc3e3c4547bda965ecec74fddd.png 

€2 接口作为方法形式参数时,匿名内部类和Lambda表达式实现接口(接口方法无返回、无传参)

f67baf8e45ca43b7b349798850fbfd62.png

664f2e9b0b224eb1b8c2acc2ec47e28e.png

5011dee57299414990215fc39141b17d.png 

a69b042d0dcc483fa25aa3742fd6cbf0.png  

€2 匿名内部类和Lambda表达式实现接口(接口方法无返回、有传参)

9fc30bf523b6416f90483509b3966a50.png

86b5e8a728aa43a2bda5b13203a6dff9.png

1ca8ba334bb94d5184fec32aebca9f42.png 

€3 匿名内部类和Lambda表达式实现接口(接口方法有返回、无传参)

d3016111a15d4b4aa3752cb7b03e7a6f.png

f65cb2d0df6d4029884a9466cf57e527.png

1afd25b20d56492983ca826c67e327d2.png  

€4 匿名内部类和Lambda表达式实现接口(接口方法有返回、有传参)

820935587f034210b09678b75ea21bf4.png

cf9896d5aa104f67a8db546db0aeae26.png 

0de0dfc4f560489a95594ef1f78143f8.png 

2756c0e3846b42f0812cb80951ea594b.png  

四、Lambda表达式省略模式

省略规则:

 (1)参数类型可以省略;多个参数时,每个参数的参数类型都要省略

(2)如参数有且仅有一个,()可以省略

(3)代码块只有一条语句时,{}和;可以省略,甚至return也可省略

(4)无参数时,保留()

€5 Lambda表达式省略模式代码练习

f5542c70f7584348aab325372bb779be.png 

五、Lambda表达式和匿名内部类的区别

1、所需类型不同

(1)匿名内部类:接口、抽象类、具体类

(2)Lambda表达式:接口

2、使用限制不同

(1)匿名内部类:接口中抽象方法不限制个数

(2)Lambda表达式:接口中有且仅有一个抽象方法

3、实现原理不同

(1)匿名内部类:编译后,产生单独的.class子节码文件

(2)Lambda表达式:编译后,不产生单独的.class子节码文件。对应的子节码文件在运行的时候动态产生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值