|
|
1
4
在实现级别发生的是
价值
这个
外部范围中的变量必须是
如果你使用
1或有效的Java 8的最终结果。
2如果
|
|
|
2
2
您已经定义了
所以对于你的问题,如果我错了请纠正我。
A发生了什么?
谁分配了?
范围
我可以访问吗?
不,你不能进入
|
|
|
3
0
由于“a”是本地参数,因此可以使用其他方法读取“a”值:
|
|
|
4
0
我想知道实际发生了什么,所以我编译了您的代码并查看了字节码输出。 基本上,编译器会将构造函数添加到类“inner”中。它还向接受“a”的构造函数添加了一个参数。如果multi2()方法不是静态的,那么可能还会有一个参数接受“this”,其中“this”是multi2()正在执行的“c”的实例。但由于我们是在静态环境中,所以没有“this”。 编译器向类“inner”添加一个私有的final字段,并使用通过构造函数传递的值设置该私有字段。编译器还转换
进入之内
然后,哈希代码访问包含a的值的私有字段。 如果“a”是一个对象而不是一个基元,那么它将是相同的方式,但引用将被传递,而不是实际的数值。 如何访问这个变量?嗯,你可以通过反射来访问它,但是有很多问题: 1)您不知道编译器生成的字段名,因此只能通过查看字节码来获取该名称。不要信任反编译器,因为它们可能会更改名称。你得自己看看字节码才能知道。 2)编译器可能会将该字段标记为最终字段,这意味着即使您可以获得反射来访问该字段,也无法对其进行更新。 3)完全由编译器来确定字段名。根据编译器和它的心情,字段名可以在构建之间更改。 |
|
|
5
-1
内心是一种所谓的
本地类
.
|