Java变量存储在哪里呢,用Java在哪里存储捕获的变量?

本文探讨了Java中LocalClass(本地类)的特性,强调了它如何捕获局部变量并将其作为字段,以及封闭类引用的实现。通过字节码解析,展示了LocalClass的构造过程,并模拟了其内部结构。重点讲解了构造函数中对局部变量和封闭实例的隐式传递。
摘要由CSDN通过智能技术生成

小编典典

作者似乎是指将捕获的变量转换为本地/匿名类的字段这一事实。

如果您不满意LocalClass,可以看到以下内容(Main封闭类的名称在哪里):

class Main$1LocalClass {

final int val$y;

final Main this$0;

Main$1LocalClass();

Code:

0: aload_0

1: aload_1

2: putfield #1 // Field this$0:LMain;

5: aload_0

6: iload_2

7: putfield #2 // Field val$y:I

10: aload_0

11: invokespecial #3 // Method java/lang/Object."":()V

14: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream;

17: aload_0

18: getfield #2 // Field val$y:I

21: invokevirtual #5 // Method java/io/PrintStream.println:(I)V

24: return

}

第一个字段是局部变量y,第二个字段是对封闭实例的引用。此外,这些值被隐式传递到本地类的构造函数中。

本质上LocalClass看起来像这样:

class LocalClass {

final int val$y;

final Main this$0;

LocalClass(Main arg1, int arg2) {

this.this$0 = arg1; // bytecode 1-2

this.val$y = arg2; // bytecode 5-7

super(); // bytecode 10-11

System.out.println(this.val$y); // bytecode 14-21

}

}

2020-11-26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值