Java笔记--接口新特性、代码块
一、接口新特性
1、JDK8的新特性:接口中可以定义有方法体的方法。(默认、静态)
假设我们在项目中编写了一个接口,里面编写了一堆抽象方法。然后又编写了接口的两个实现类,并且重写了里面的方法。

然后项目1.0版本正式上线了
在项目2.0版本,需要对功能进行一些丰富,我们要加入一些新的方法,按照以前,我们要是在接口中编写抽象方法,所有的实现类会报错,因为实现类要对新编写的抽象方法进行重写。如果接口中可以使用带有逻辑的方法,并且实现类可以直接拿来用,就可以解决接口升级的问题。
JDK8接口特性:允许在接口中定义非抽象方法,但是需要使用关键字default修饰,这些方法就是默认方法。

public是可以省略的,方法的默认权限就是public
假设我们在接口中编写了一个method方法,在实现类中直接输入方法名敲回车

方法被重写了,super.调用的是父类的方法,而加上前面的接口名.调用的是"干爹",而且在实现类中的重写方法,不需要带default关键字。
如果一个实现类同时实现两个接口,而且两个接口中的方法名是相同的,我们必须在实现类中将方法重写,并且指定用哪个接口的方法。
接口中也可以编写静态方法,直接通过接口名.进行调用。
2、JDK9的新特性:接口中可以定义私有方法。
接口中的私有方法,实现类不能调用有什么意义吗?

在这个接口中,里面有两个抽象方法,还有两个默认方法,但是这两个默认方法中有一段逻辑是重复的,代码显得很臃肿。我们可以将重复代码抽取出一个新的方法,但是这个方法不想让别人使用,可以加上private,但是不能加default。接口中的私有方法不能带default。

三、代码块
使用{ }括起来的内容就是代码块。
分为局部代码块、构造代码块、静态代码块、同步代码块四类。
1、局部代码块
位置:方法中的一对大括号。
作用:限定变量的生命周期,提早的释放内存。
2、构造代码块
位置:类中,方法外。


可以看见,在创建对象,执行构造方法的时候,就会执行构造代码块,优先于构造方法执行。
上面的图在字节码文件中是这样的:

我们在源文件中的构造代码块,在编译后,会分散到该类的每一个构造方法中,而且还是在构造方法的最开始的位置存放。
3、静态代码块
位置:类中方法外,需要加入static关键字。
特点:随着类的加载而执行,因为类只加载一次,所以它只执行一次。
实例:如果以后我们要赋值的不是基本数据类型,而是对象类型,就可以用静态代码块来赋值。