主题4:词法作用于

内部类中词法作用域说明:

    内部类中使用变量名(以及 this)非常容易出错。内部类中通过继承得到的成员(包括来自 Object 的方法)可能会把外部类的成员掩盖(shadow),此外未限定(unqualified)的 this 引用会指向内部类自己而非外部类。

lambda表达式词法作用域:

    相对于内部类,lambda 表达式的语义就十分简单:它不会从超类(supertype)中继承任何变量名,也不会引入一个新的作用域。lambda 表达式基于词法作用域,也就是说 lambda 表达式函数体里面的变量和它外部环境的变量具有相同的语义(也包括 lambda 表达式的形式参数)。此外,’this’ 关键字及其引用在 lambda 表达式内部和外部也拥有相同的语义

public class TestA {
     Runnable run = ()-> System.out.println(toString());

    @Override
     public String toString() {
         return "toString...............";
     }

    public static void main(String[] args) {
         new TestA().run.run();
     }
}

   基于词法作用域的理念,lambda 表达式不可以覆盖任何其所在上下文中的局部变量它的行为和那些拥有参数的控制流结构(例如 for 循环和 catch 从句)一致

int i = 0;

int sum = 0;

for (int i = 1; i < 10; i += 1) { //这里会出现编译错误,因为i已经在for循环外部声明过了

sum += i;

}

猜你喜欢

转载自www.cnblogs.com/zyj-468161691/p/12213639.html