首页 新闻 会员 周边

关于Java的内部类 ,这个问题大佬们看看。

0
[待解决问题]

上面那句 “TimePrinter类在beep参数值消失之前必须将beep字段赋值为start方法的 局部变量 和下面画红线的那句话 没有明白 。

下面画红线的意思是: start方法的beep形式参数先复制为 start方法的 局部变量,然后实例化TimePrinter对象的时候又从局部变量传给 TimePrinter 的构造器 ?

春风十里不如你Ni的主页 春风十里不如你Ni | 初学一级 | 园豆:186
提问于:2023-01-01 22:13

这书叫什么名字?

Halloworlds 1年前

@Halloworlds: 《java核心技术 卷一》

春风十里不如你Ni 1年前
< >
分享
所有回答(2)
0

我在认认真真的看代码,他给我整了个var

一生的风景 | 园豆:94 (初学一级) | 2023-01-03 16:24

??? 啥意思 ??

支持(0) 反对(0) 春风十里不如你Ni | 园豆:186 (初学一级) | 2023-01-03 22:13

哈哈真实

支持(0) 反对(0) Lanwenjie | 园豆:200 (初学一级) | 2023-01-04 10:26

var是jdk10加入的新特性,编译器会通过类型推断得出变量的类型,属于一种语法糖而已。

支持(2) 反对(0) 我是满意吖 | 园豆:386 (菜鸟二级) | 2023-01-12 22:12

@我是满意吖: 多谢告知,我要加强学习新知识了

支持(0) 反对(0) 一生的风景 | 园豆:94 (初学一级) | 2023-01-13 14:43

@我是满意吖: 可以给我解解惑吗 ?

支持(0) 反对(0) 春风十里不如你Ni | 园豆:186 (初学一级) | 2023-01-22 13:44

@春风十里不如你Ni: 有问题可以问,不过我平时很少上这个论坛,只能说看见就回答一下了

支持(0) 反对(0) 我是满意吖 | 园豆:386 (菜鸟二级) | 2023-03-08 22:04
0

TimePrinter类定义在start方法里,并使用了start方的参数beep,但是TimePrinter类并没有显式保存这个参数。当一个方法执行完后,它使用的局部变量可能会被清理。按理说start方法执行完后,TimePrinter类就不能使用beep变量了。可是实际上TimePrinter类却能继续使用beep变量,这是如何实现的呢?

当Java编译器看到TimePrinter类使用了一个定义在这个类外部的变量,它就会悄悄为TimePrinter类创建一个字段,使用这个字段保存外部变量的值。第二张图片的代码是Java编译器编译过的TimePrinter类的部分代码,可以看到在编译后的代码中出现了没有定义的字段val$beep,这个字段就是用于保存类外部定义的变量beep。当实例化TimePrinter对象时,表面上看好像没有给它传入参数,实际上编译器悄悄向构造方法传入了beep参数,并用val$beep接收了beep参数的值(还把外部类实例作为参数传入了,但这不在本题的讨论范围内)。这就是“TimePrinter类在beep参数消失之前必须将beep字段赋值为start方法的局部变量”的意思。

Halloworlds | 园豆:190 (初学一级) | 2023-03-26 17:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册