CoreJava(第六章)07-變量作用域

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章