Java 03(代码块,内部类,lambda表达式)
代码块
使用{}括起来的代码块
1.局部代码块
位置
方法中的一对大括号
作用
减少代码的生命周期,提早的释放内存
----
很少用,因为现在电脑的内存大了
2.构造代码块
位置
类中方法外的一堆大括号
特点
1.在创建对象,执行代码的时候,就会执行构造代码块,(优先于构造方法执行)
作用
将多个构造方法中,重复的代码,抽取到构造代码块当中,从而提高代码的复用性
3.静态代码块
位置
类中方法外的一对大括号,需要加入static关键字
特点
类加载的时候就会调用,当这个类加载的时候就i会创建一次,
但是类只加载一次,所以只会执行一次,但是***局部代码块除外
作用
1.将数据进行初始化
(数据比较复杂)
2.文件读取
内部类
就是定义在一个类里面的类
成员内部类
class outer{class inner{}
}
格式
outer.inner in = new outer().new inner();
成员访问细节
内部类访问外部类:直接访问,包括私有
外部类访问内部类:不可以,需要访问的话需要创建对象,
并且,在外部内类里创建内部类对象的时候,可以直接inner =new inner();
小面试题
意义
一个汽车对象有一些别的内容例如发动机,可以使用内部类
但一般比较少用
静态内部类
class outer{static class inner{}
}
只有内部类才能这样写;
格式
outer inner in =new outer.inner();
注意事项
静态只能访问静态
局部内部类
放在方法里面,代码块和构造器等执行体里面;
比较鸡肋,不怎么用,上图是一个样例
匿名内部类**
概述
本质上是一个特殊的局部内部类(定义在方法内部)
前提
需要存在一个接口或者类
格式
new 接口/类名{
}
问题
可以让代码变得更加简介
在定义类的时候就可以实例化对象
Lambda表达式
1.作用
简化匿名内部类的代码写法
(匿名内部类杯从写的形参列表) -> {被重写的方法体代码
}
2.例子
3.注意
并不是所有的都可以使用lambda使用
只允许操作函数式表达式接口:
也就是有且仅有1个抽象方法的接口
可以跟@Override的使用一样,在需要的时候加上@FunctionalInterface检测一下
4.细节
a
如果方法体只有一行代码,可以省略大括号不写
b
)
只有一个参数,参数类型和小括号都可以不写
c
忘记了,参数类型可以一直省略不写
5.与匿名内部类的差别
1.lambda只能是函数类接口
2.lambda在编译的时候不会产生class字节码文件,但是匿名内部类需要