进阶第六天安排
Lambda表达式
作用:Lambda表达式,允许算法逻辑(方法)作为一个可传递的对象,进行传递。诣在帮助java开发人员从冗余的代码开发中解脱出来。
Lambda表达式就是专门用来实现这些函数式接口的表达式,这点非常重要
函数式接口
函数式接口代表只包含一个抽象方法的接口,java8的API文档中很多函数式接口,例如 Runnable ActionListener等接口
我们可以使用注解@Functionallnterface,来强约束这种接口为函数式接口
举例子:
1 @FunctionalInterface
2 public interface Runnable {
3 public abstract void run();
4 }
使用Runanable创建线程
Runnable runnable=new Runnable()
{
@Override
publuc void run()
{
}
};
new Thread(runnable).start();
注意:这是起一个匿名内部类实现接口中的方法
但是Lambda表达式则可以直接作为一个函数表达式来替代这个内部类
Runnable runnable=()->
{
}
new Thread(runnable).start();
在这个例子中,我们可以发现Lambda表示有三部分构成:
1、参数列表:与接口中方法的参数列表要求一致
2、箭头:-> 由横线和大于号构成
3、方法体:和方法的方法体要求是一样的。
同时Lambda为了更加简洁的
1、参数列表中的参数类型可以直接都忽略掉不写。(注意是参数类型,不是参数。因为只有一个抽象方法,参数类型是可以直接推导出来的)
2、如果只有一个参数,圆括号也可以省略。
3、方法体如果只有一语句,可以省略掉大括号。
4、如果仅有一条语句,并且他是return语句的话,那么可以直接省略掉return关键字
这里不详细,之后熟悉了补充
枚举类
我们把有限而且固定的类称为枚举类
特点:
1 使用enum定义,非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。
2 枚举类的构造器只能使用private访问修饰符,
3 枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远都不能产生实例。系统会走动添加 public static final
public enum SeasonEnum
{
//在第一行列出4个枚举实例
SPRING,SUMMER,FALL,WINTER;
}
枚举类的成员变量,方法和构造器
枚举类应该设计成不可变类,这样会更安全,因此建议枚举类的成员变量都使用private final修饰
详细代码见第六章
对象与垃圾回收
遵循以下三点
1 垃圾回收机制只回收内存中的对象
2 程序无法精确控制垃圾回收的运行
3 在垃圾回收制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使对象重新复活。
强制垃圾回收方法:
1 调用system类的gc()静态方法System,gc()
2 调用Runtime对象的gc()实例方法:Runtime.getRutime().gc();
finallze方法
java提供默认机制来清理对象的资源,这个机制就是finalize()方法
1 永远不要主动调用某个对象的finalize()方法,该方法应交给垃圾回收机制调用