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表达式转换为一个包含方法的对象,这样这个自由的变量就会复制到这个对象的实例变量中。

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