1.变量作用域
(1)在lambda表达式中访问外围方法或类中的变量
01-外围方法是什么?类中的变量?
外围方法:一个方法中嵌套了另外一个方法。
类中的变量:如String text, int delay
。
package com.eleven;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
/**
* delay:延迟
* ActionListener:对事件进行监听
* event:事件
* Toolkit:工具包
* Timer:计时器
*/
public class VariableScope{
public static void repeatMessage(String text, int delay) {
ActionListener listener = event ->
{
System.out.println(text);
Toolkit.getDefaultToolkit().beep(); // 获取默认工具包里面的beep方法
};
new Timer(delay,listener).start(); // 创建一个计时器,并启动
}
public static void main(String[] args) {
repeatMessage("hello",1000);
}
}
运行结果:.;\
02-如果将延迟的时间设置长一点,则会出现参数变量不存在的情况。
如:将1000改成10000,lambda表达式的代码会在repeatMessage
调用返回很久以后才会运行,这是因为参数变量text
已经不存在了。那么如何才能保留text的变量呢?
首先:lambda表达式分为3个部分:1、一个代码块。2、参数(String text, int delay
)。3、自由变量的值(hello
)。
接着:思路,我们可以将lambda表达式转换为一个包含方法的对象,这样这个自由的变量就会复制到这个对象的实例变量中。