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表達式轉換爲一個包含方法的對象,這樣這個自由的變量就會複製到這個對象的實例變量中。