内部类以及lambda表达式

成员内部类
内部类可以直接访问外部类成员,包括私有,外部类无法直接访问内部类的成员,必须先创建对象后才能调用.

是只会在一种非常复杂的体系结构中才会使用到内部类,一般的内部类,都是只会提供给自己内部使用的。(有些很复杂的时候,提供内部类确实会好一点吧。但我们自己写内部类用的非常少,但这里并不是说我们平时的创建类的方式就不好)。
创建对象格式:
外部类名.内部类名 变量名=new 外部类名().new 内部类名();
例:A.B a=new A().newB();
在这里插入图片描述

静态内部类:定义在类中方法外,用static关键字修饰。
创建对象格式:
外部类名.内部类名 变量名=new 外部类名.内部类名();
例:A.B a=new A.B();
在这里插入图片描述

私有内部类
将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。

用private关键字修饰的类
外部不能访问,只能在类的内部访问。
在这里插入图片描述

局部内部类
定义在方法内部,随着方法的加载而加载,随着方法的消失而消失。
在这里插入图片描述

Lambda表达式:
函数式编程思想概述
lambda表达式采用的是一种函数式编程思想,关注于要做什么,也就是重点关注于业务逻辑上要怎么操作,不局限于怎么做,不在格式的代码上有过多的操作。与面向对象形成对比,面向对象思想强调的是要怎么去做,就是强调你要创建一个对象去做这件事。(这里在用的例子就是用匿名内部类和用Lambda之间的区别。)(更简洁的理解:
面向对象思想强调“必须通过对象的形式来做事情”
函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”
而我们要学习的Lambda表达式就是函数式思想的体现

在这里插入图片描述

在这里插入图片描述

lambda表达式的一些注意点
使用lambda表达式的前提就是一定要是接口,且接口中只存在一个抽象方法。一般这种接口称为函数式接口。
格式:
(形式参数) -> {代码块}

  • 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
  • ->:由英文中画线和大于符号组成,固定写法。代表指向动作
  • 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容

在这里插入图片描述
其实其原理还是产生接口的实现类对象。小括号里写的是抽象类的参数,大括号里写的是对抽象方法重写的业务逻辑。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
Lambda表达式的缩写规则
小括号中的方法参数类型可以省略,如果只有一个参数那么小括号也可以省略,但是如果有多个参数,不能只省略一个,要省略一起省略,如果大括号中的逻辑语句只有一行的时候可省略大括号以及分号,如果该逻辑语句是return,则也需省略return关键字。(如果有多行逻辑语句则不能省略)
匿名内部类与Lambda表达式的区别。
lambda表达式可以理解为是对匿名内部类的一种优化,但这也只能是一种理解。但是其本质是不相同的,匿名内部类在编译之后会单独的产生一个字节码文件,但Lambda表达式在编译之后并不会产生一个单独的字节码文件,对应的字节码会在编译的时候动态初始化在内存中。
匿名内部类可以是具体类,抽象类,接口。但lambda只能是接口。
具有多个抽象方法的只能使用匿名内部类,一个抽象方法的既可以使用匿名内部类也可以Lambda表达式。
匿名内部类的本质:
一个继承了该类的或者实现了该接口的实现类对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值