上面那句 “TimePrinter类在beep参数值消失之前必须将beep字段赋值为start方法的 局部变量
” 和下面画红线的那句话 没有明白 。
下面画红线的意思是: start方法的beep形式参数先复制为 start方法的 局部变量,然后实例化TimePrinter对象的时候又从局部变量传给 TimePrinter 的构造器 ?
我在认认真真的看代码,他给我整了个var
??? 啥意思 ??
哈哈真实
var是jdk10加入的新特性,编译器会通过类型推断得出变量的类型,属于一种语法糖而已。
@我是满意吖: 多谢告知,我要加强学习新知识了
@我是满意吖: 可以给我解解惑吗 ?
@春风十里不如你Ni: 有问题可以问,不过我平时很少上这个论坛,只能说看见就回答一下了
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 1年前@Halloworlds: 《java核心技术 卷一》
– 春风十里不如你Ni 1年前